iostreamの継承方法(C++技術メモ)3

basic_streambuf のクラスの継承の仕方

iostreamの継承方法(C++技術メモ)2:http://sato-si.at.webry.info/200502/article_6.html のつづき

さて,ここからが,本番である。
実際のストリームのプログラムの実装部分だ。


basic_streambufクラスはメソッドはいっが,使うのは限られてくる。
イメージとしては,イベント駆動型で記述する。

以下のメンバ関数をオーバーライドして実装する。

入力方向のバッファが空っぽになったら呼ばれるメソッド。
外部からの入力をバッファに書き込む。
virtual int_type underflow();

出力方向のバッファが満杯なったら呼ばれるメソッド。バッファの書き出し処理を行う
通常 sync呼び出しバッファの初期化を行う。
virtual int_type overflow(int_type c = T::eof())

出力方向のバッファの内容を全て書き出しを実行する処理を書くメソッド。
virtual int sync();

なお,バッファは,通常,自分のクラスで用意する。
入力,出力別々に用意する。

underflowでは,通常入力バッファの再設定(初期化)も行う
入力バッファの再設定は,
setg(バッファの先頭, バッファの開始位置, バッファの終端 );
で行えるsetとg。gとは getのg で setg


syncでは,出力バッファの再設定(初期化)も行う。
setp(バッファの先頭, バッファの開始位置, バッファの終端 );
で行えるset と putの pで setp

入力バッファは次の3つのメソッドで現される
setgで設定している値は,これら3つの値だ。
eback(),gptr(),egptr()


出力バッファは,次の3つのメソッドで,ポインタとしてあらわされる。
setpで設定している値は,これら3つの値の設定だ。
pbase(), pptr(), epptr()



int_type という型が出てきた。
これは, 1文字int型にカプセル化して,
関数の引数や戻り値にしやすくしている。
int_type の値で特殊なのが T::eof()
Tは,クラスのテンプレート引数の1つ目の値
これは,バッファの終端に達したときの文字。
C言語のEOFみたいなもの。

int_typeを,通常の型に戻すには,
int_type c = ??;
T raw_c = T::to_char_type(c);
という風に,T::to_char_type(c)を通す。

その反対は
T raw_c = ??;
int_type c = T::to_int_type( raw_c);
という風に,T::to_char_type(c)を通す。

とりあえず,ここまで。次は実装例

この記事へのコメント

この記事へのトラックバック