.gz/.bz2対応

archive/extractサンプルを.gz/.bz2に対応させました。
archive.cppの差分
extract.cppの差分
結局、.gzはアーカイブクラスにはなりませんでした。
特に、ヘッダにファイル名が含まれない場合、アーカイブのファイル名から元のファイル名を推測する仕様がアーカイブクラスの形に合いませんでした。
そんなわけで、サンプルでは.gz/.bz2の圧縮/展開処理がベタ書きになっています。
.gzのファイル名は、昨日書いたような少しread()してみる方法を使って取得しています。

io::gzip_decompressor gzip;
io_ex::file_source src(filename);

// 適当なサイズを読んでみる(Blockingを想定)
char buf[4096];
std::streamsize amt = io::read(gzip, src, buf, sizeof(buf));

// この時点でヘッダは読み込めている

// ファイル名を取得
const std::string& org_name = gzip.file_name();


今日の作業はサンプルだけで、ライブラリの方は手付かずです。
明日は、ごちゃごちゃしてきたファイル操作を別ファイルにまとめようと思います。