sliding_window_decompressor

一応、LZSSの展開までできましたが、インタフェースをどうするかで迷っています。
今のところ、インタフェースはこうなっています。

template<class Input>
class sliding_window_decompressor
{
public:
    typedef char char_type;
    struct category
        : public boost::iostreams::input
        , public boost::iostreams::filter_tag
    {};

    sliding_window_decompressor(const Input& input, std::size_t window_bits);

    template<class Source>
    std::char_traits<char>::int_type get(Source& src);
};

Inputは次のようなクラス(コンセプト/ポリシー)です。

class Input
{
public:
    // 一致長の型
    typedef implementation-defined length_type;
    // 一致位置の型
    typedef implementation-defined offset_type;

    // 一致長の最小値
    static const length_type min_match_length = implementation-defined;

    // 次の(不一致文字)か(一致位置,一致長)を返す
    // EOFの場合はnoneを返す
    template<class Source>
    boost::variant<
        boost::none_t,
        char,
        std::pair<offset_type,length_type>
    > get(Source& src);
};

メンバテンプレートget()は定義通りのインタフェースであるものの、あんまりな気はしています。
このコンセプトに合わせて、

class lz77_input;
class lzss_input;
class lzhuf_input;

を作ると、

typedef sliding_window_decompressor<lz77_input> lz77_decompressor;
typedef sliding_window_decompressor<lzss_input> lzss_decompressor;
typedef sliding_window_decompressor<lzhuf_input> lzhuf_decompressor;

で実際の復号フィルタが出来上がる寸法です。


先ほどのget()のインタフェースも問題ですが、目下悩みの種はsliding_window_decompressorという長いクラス名だったりします。
このクラステンプレートのドキュメントをBoostBookで作成すると、sliding_window_decompressor.htmlというファイルができるのですが、これがBoostのガイドライン(ファイル名31文字まで)に引っかかります。(別にこのガイドラインに従う必要はないんですけどね。)
以下候補、

  • slide_window_decompressor(英語としては変な気がする)
  • sliding_win_decompressor(Win98とか略すので意味は分かりそう)
  • sliding_window_decoder(compressという単語は付けたいけど、、、)
  • sliding_window::decompressor(これも何か変)

本当はsliding〜の前にbasic_も付けたいんですが、、、。