std::basic_streambuf
| ヘッダ <streambuf> で定義 |
||
| template< class CharT, |
||
クラス basic_streambuf は、文字シーケンスへの入出力を制御します。これには以下が含まれ、アクセスが提供されます。
- 制御された文字シーケンス(バッファとも呼ばれる)は、入力操作のバッファリングのための入力シーケンス(get areaとも呼ばれる)や、出力操作のバッファリングのための出力シーケンス(put areaとも呼ばれる)を含むことがあります。
- 関連付けられた文字シーケンス(ソース(入力用)またはシンク(出力用)とも呼ばれる)。これは、OS API(ファイル、TCPソケット、シリアルポート、その他の文字デバイス)を介してアクセスされるエンティティであるか、あるいは文字ソースまたはシンクとして解釈できるオブジェクト(std::vector、配列、文字列リテラル)である可能性があります。
I/Oストリームオブジェクト std::basic_istream および std::basic_ostream、およびそれらから派生したすべてのオブジェクト(std::ofstream、std::stringstream など)は、std::basic_streambuf のみで実装されています。
制御された文字シーケンスは CharT の配列であり、常に、関連付けられた文字シーケンスの部分シーケンス、または「ウィンドウ」を表します。その状態は 3 つのポインタによって記述されます。
- 開始ポインタは、常にバッファの最も低い要素を指します。
- 次ポインタは、読み書きの次の候補となる要素を指します。
- 終了ポインタは、バッファの末尾の次を指します。
basic_streambuf オブジェクトは、入力(この場合、開始、次、終了ポインタで記述されるバッファはget areaと呼ばれる)、出力(put area)、または同時に入出力(入力と出力)をサポートできます。後者の場合、6 つのポインタが追跡され、すべて同じ文字配列の要素、または 2 つの個別の配列を指す場合があります。
put area において次ポインタが終了ポインタより小さい場合、書き込み位置が利用可能です。次ポインタは間接参照して代入できます。
get area において次ポインタが終了ポインタより小さい場合、読み込み位置が利用可能です。次ポインタは間接参照して読み取ることができます。
get area において次ポインタが開始ポインタより大きい場合、putback position が利用可能になり、次ポインタをデクリメントし、間接参照して代入することで、文字を get area に戻すことができます。
制御シーケンス内の文字表現とエンコーディングは、関連シーケンス内の文字表現と異なる場合があります。この場合、通常は std::codecvt ロケールファセットを使用して変換を実行します。一般的な例は、std::wfstream オブジェクトを介してアクセスされる UTF-8(またはその他のマルチバイト)ファイルです。制御シーケンスは wchar_t 文字で構成されますが、関連シーケンスはバイトで構成されます。
std::basic_streambuf 基底クラスの典型的な実装は、6 つの CharT* ポインタと std::locale のコピーのみをデータメンバーとして保持します。さらに、実装はロケールファセットのキャッシュされたコピーを保持する可能性があり、これは imbue() が呼び出されるたびに無効になります。std::basic_filebuf や std::basic_stringbuf などの具体的なバッファは、std::basic_streambuf から派生します。
一般的な文字型のためにいくつかの typedef が提供されています
| ヘッダ
<streambuf> で定義 | |
| 型 | 定義 |
std::streambuf
|
std::basic_streambuf<char> |
std::wstreambuf
|
std::basic_streambuf<wchar_t> |
目次 |
[編集] メンバ型
| メンバ型 | 定義 |
char_type
|
CharT |
traits_type
|
Traits; Traits::char_type が CharT でない場合、プログラムは不適格となる。 |
int_type
|
Traits::int_type |
pos_type
|
Traits::pos_type |
off_type
|
Traits::off_type |
[編集] メンバ関数
| [virtual] |
basic_streambuf オブジェクトを破棄する(virtual public member function) |
ロケール | |
| 関連するロケールを変更し、imbue() を呼び出す (public member function) | |
| 関連するロケールのコピーを取得する (public member function) | |
位置付け | |
| setbuf() を呼び出す (public member function) | |
| seekoff() を呼び出す (public member function) | |
| seekpos() を呼び出す (public member function) | |
| sync() を呼び出す (public member function) | |
取得領域 | |
| 取得領域ですぐに利用可能な文字数を取得する (public member function) | |
| 入力シーケンスを進め、その後、再度進めずに1文字を読み取る (public member function) | |
| (C++17 で削除) |
入力シーケンスから1文字を読み込み、シーケンスを進める (public member function) |
| シーケンスを進めずに、入力シーケンスから1文字を読み取る (public member function) | |
| xsgetn() を呼び出す (public member function) | |
配置領域 | |
| 配置領域に1文字を書き込み、次のポインタを進める (public member function) | |
| xsputn() を呼び出す (public member function) | |
戻し | |
| 1文字を入力シーケンスに戻す (public member function) | |
| 入力シーケンスの次のポインタを1つ戻す (public member function) | |
Protected member functions | |
basic_streambuf オブジェクトを構築する(protected メンバ関数) | |
| (C++11) |
basic_streambuf オブジェクトを置き換える(protected メンバ関数) |
| (C++11) |
2つの basic_streambuf オブジェクトをスワップする(protected メンバ関数) |
ロケール | |
| [virtual] |
関連するロケールの変更に対応する (virtual protected member function) |
位置付け | |
| [virtual] |
許可されていれば、バッファをユーザー定義配列で置き換える (virtual protected member function) |
| [virtual] |
入力シーケンス、出力シーケンス、またはその両方で、相対アドレス指定を使用して次のポインタを再配置する (virtual protected member function) |
| [virtual] |
入力シーケンス、出力シーケンス、またはその両方で、絶対アドレス指定を使用して次のポインタを再配置する (virtual protected member function) |
| [virtual] |
バッファを関連付けられた文字シーケンスと同期する (virtual protected member function) |
取得領域 | |
| [virtual] |
分かっていれば、関連付けられた入力シーケンスで入力に利用可能な文字数を取得する (virtual protected member function) |
| [virtual] |
関連付けられた入力シーケンスから取得領域に文字を読み込む (virtual protected member function) |
| [virtual] |
関連付けられた入力シーケンスから取得領域に文字を読み込み、次のポインタを進める (virtual protected member function) |
| [virtual] |
入力シーケンスから複数の文字を読み込む (virtual protected member function) |
| 取得領域の先頭、現在の文字、および末尾へのポインタを返す (protected メンバ関数) | |
| 入力シーケンスの次のポインタを進める (protected メンバ関数) | |
| 入力シーケンスの先頭、次、および末尾のポインタを再配置する (protected メンバ関数) | |
配置領域 | |
| [virtual] |
出力シーケンスに複数の文字を書き込む (virtual protected member function) |
| [virtual] |
関連付けられた出力シーケンスに、配置領域から文字を書き込む (virtual protected member function) |
| 配置領域の先頭、現在の文字、および末尾へのポインタを返す (protected メンバ関数) | |
| 出力シーケンスの次のポインタを進める (protected メンバ関数) | |
| 出力シーケンスの先頭、次、および末尾のポインタを再配置する (protected メンバ関数) | |
戻し | |
| [virtual] |
入力シーケンスに1文字を戻す (入力シーケンスを変更する可能性あり) (virtual protected member function) |
[編集] 関連項目
| Cの入出力ストリームを制御するために必要なすべての情報を保持できるオブジェクト型 (typedef) |