basic_streambuf::setg

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