input_bit_stream

ハフマンデコードの処理が大体できて、ビット単位ストリームに必要な機能も見えてきました。
ビット単位の操作とはいえ、メモリやディスクの上ではバイトやワードの単位でしか存在できません。そのため、ビットストリームの終端にはビットの端数がでることがあります。(昨日の例の「余りビット」はこれです)
この端数はビット列を眺めるだけでは他のビットと区別が付かないので、どこまでが有効なビットなのかをビットストリームとは別に持つ必要があります。
場合によっては、ビットの並びに特殊なルールがあって終端が決定するケースも考えられますが、これもビットストリームよりメタな外的要因であり、EOFを読む前に終端が確定することには違いありません。
このような性質のため、ビットストリームからEOFが読み込まれるケースというのはエラーと考えて間違いないと思います。これはつまり例外を投げても問題ないということです。
よって、input_bit_streamはこうなりました。
<hamigaki/iostreams/bit_stream.hpp>
下位ストリームからは1文字ずつget()してますが、そこはバッファリングされていることを前提にしています。


ハフマンのコードはまとめ中なので、また明日。
#段々LZHの手動デコードに慣れてきました。
#もう紙と鉛筆があればLZHデコードできます、、、。