やっぱりハッシュ表

テストコードが間違っていて、テストをすり抜けていたlazy matchingのバグを修正しました。
lazy matchingの修正差分
テストに使用した文字列の初期化で、

std::string(4096+1, 'a')

が、

std::string('a', 4096+1)

になっていました。
これ、よく間違えます。他にはseek()の引数なんかもよくやります。
bjamのVC++のオプション設定は警告レベルが低いので、g++でコンパイルするまで気が付かないことが多いです。


それから、やはりバカサーチでは遅すぎて使い物にならないので、ハッシュ表を使った実装も用意してみました。
これでなんとかUNLHA32.DLLの2倍ぐらいの遅さで動きます。
ハッシュ対応の修正差分
特許が怖いので、既定ではハッシュ表を使いません。
ハッシュ表を使う場合は、マクロHAMIGAKI_IOSTREAMS_USE_HASHを定義してコンパイルする必要があります。
一応、RFC1951(DEFLATE Compressed Data Format Specification)に安全と書いてあるアルゴリズムに従っているつもりですが、ご利用は自己責任でお願いします。