basic_streambufのsetpが書き込み位置の情報をセットするものだとすると、setgは読み込み位置の情報をセットするもの。
https://ja.cppreference.com/w/cpp/io/basic_streambuf/setg
カスタムバッファ
setgには、バッファの最初の位置、現在位置、最後の位置をセットする。
std::basic_iostreamのioscにして、前回のようにストリームに書き込むだけじゃなく、ストリームから読み込むこともする。
print_gptrを追加し、
std::basic_streambuf<CharT,Traits>::eback, gptr, egptr - cppreference.com
basic_streambuf::gptrで、現在の読み込みポインタからの出力を見ることで、読み込みポインタが移動していく様子を見ていく。
$ vi basic_streambuf.cpp $ g++ basic_streambuf.cpp -o basic_streambuf $ ./basic_streambuf constructor buf_ = ?+b buf_ = ABC DEF GHI gptr() = ABC DEF GHI str1 = ABC gptr() = DEF GHI str2 = DEF, str3 = GHI????+b gptr() = $
ioscから読み込むたびにgptr()の位置が移動していくのがわかる。
Sample/cpp/basic_streambuf/setg/src/basic_streambuf at master · bg1bgst333/Sample · GitHub