restrictとseek()
とりあえす、LZHのLevel 0/1ヘッダーをサポートしました。
<hamigaki/iostreams/device/lzh_file.hpp>
仕様の確認などにも手間取って、LZHUFの組み込みまではできていません。
Level1ヘッダの実装中にboost::restriction::seek()の戻り値が変なことに気が付きました。
最初はバグかと思ったのですが、どうもboost::restrictionは元のデバイスのストリームオフセットが0であることを要求するようです。
そもそも想定されている使用法は、
io::copy( io::restrict(some_device("some"), 10, 20), other_device("other") );
のようなものですし、close()すると元のデバイスもclose()することから考えても、そういうものだと諦めるしかありません。
自分の必要な機能としては、
- Sourceの一部を仮想的にSourceとして見せたい
- 元のSourceをclose()して欲しくない
- 一つのSourceを何度も使いたい
- 元のSourceをコピーしない (今はrestrictに渡した後で、コピー元Sourceを使うインチキをやっている)
なので、別の簡易クラスを考えることにします。
restrictの別バージョンはこれで3つ目です。