zip_file_sourceのdeflate

zip_file_sourceにmethod=8(deflate)の展開処理を追加しました。
zip_file.hppの差分
zlib_decompressorに処理を渡すだけで簡単に対応できました。拍子抜けです。
注意点は、zlibのヘッダがいらない(deflateにチェックサムを付加したのがzlibフォーマット)ので、zlib_params::no_headerをtrueに設定するくらいです。


PKWAREのZIP仕様書によると、ほかにも十数種類の圧縮法がサポートされているようですが、Info-ZIPもdeflateしか実装していない模様。
method=12(bzip2)ならbzip2_decompressorで簡単に実装できそうな気がしますが、これに対応したアーカイバが手元にないため動作確認ができません。


クラスの構成としては、ustar_file_sourceの経験を元に、zipファイルの構造を解析する部分はraw_zip_file_sourceに移動させ、zip_file_sourceはraw_zip_file_sourceから読み出した圧縮イメージを圧縮方法に応じたdecompressorで伸長するラッパーにしました。
この構成はLZHにも適用できるはずで、書庫から特定のエントリを削除するような処理を実装する上で役に立ちます。(無駄な伸長と圧縮を行わず、圧縮イメージをそのまま読み出せるため)


あと、残っているのはエクストラ・フィールド(LZHでいう拡張ヘッダ)のパースぐらいです。
構造はLZH拡張ヘッダとほぼ同じなのでひたすら実装するだけなんですが、PKWAREの仕様書には詳細が書かれていないものも多く、仕様を調べるほうが大変です。
Info-ZIPの吐くヘッダは大体分かったので、とりあえずそれを実装することにします。