tbz2_file_source
extractを調整中です。
tar.gzやtar.bz2はよく使うので、ラッパークラスを用意しました。
<hamigaki/iostreams/device/tbz2_file.hpp>
<hamigaki/iostreams/device/tgz_file.hpp>
tar.bz2の短縮形は、日本のアーカイバを見る限りtbzが多いようですが、Wikipediaのbzip2のページやJakarta CommonsのVFSではtbz2になっているので、クラス名にはこちらを採用しました。
extractでは.tbz/.tbz2/.tb2を認識するようにしています。
extract.cppの差分
昨日のバージョンでは、
// Sourceの型ごとに用意 template<class Source> struct extractor_traits< io_ex::basic_lzh_file_source<Source> > { static entry do_current_entry( const io_ex::basic_lzh_file_source<Source>& src); }; // 継承関係があってもこれが必要 template<> struct extractor_traits<io_ex::lzh_file_source> { static entry do_current_entry(const io_ex::lzh_file_source& src) { return extractor_traits< io_ex::basic_lzh_file_source<io_ex::file_source> >::do_current_entry(src); } }; template<class Source> class extractor : public extractor_base { // ... entry do_current_entry() const // virtual { return extractor_traits<Source>::do_current_entry(src_); } };
となっていたところを、各アーカイバSourceにheader_typeのtypedefを追加して、
// ヘッダの型ごとに用意 template<> struct header_traits<io_ex::lha::header> { static entry to_entry(const io_ex::lha::header& head); }; template<class Source> class extractor : public extractor_base { // ... entry do_current_entry() const // virtual { typedef typename Source::header_type header_type; return header_traits<header_type>::to_entry(src_.header()); } };
と変更しました。
そのうち、この辺の枠組みはライブラリ側に移動します。