2.1.2. Writing a container_sourceの勉強メモ
http://www.boost.org/libs/iostreams/doc/tutorial/container_source.html
#include <iosfwd> // streamsize
#include <boost/iostreams/categories.hpp> // source_tag
namespace io = boost::iostreams;
class my_source {
public:
//キャラクタタイプを示す、char_type
typedef char char_type;
typedef source_tag category;// 読み取り
std::streamsize read(char s, std::streamsize n)
{
// Read up to n characters from the underlying data source
// into the buffer s, returning the number of characters
// read; return -1 to indicate EOF
}
/ その他のメンバ /
};
・読み取りのみを行うクラスはSourceと呼ばれる。
・Sourceクラス中には下記の型定義を行う。
-キャラクタタイプを示す、char_type。
-デバイスがサポートするI/O操作を示すcategory
例)typedef source_tag category;//読み取りをサポートする。
・std::streamsize read(char s, std::streamsize n)メソッドを定義する。
-これはnだけデータを読み取とり、sにセットする
-返却値は実際に読み取ったサイズを返却する。EOFもしくは読み取った数が0の場合は-1を返却する。
・ノンブロッキングデバイス...readメソッドでストリームの残りサイズがまだnより大きく、EOFにも達していないが、要求されたnよりも小さいデータを返却する場合があるデバイス。ノンブロッキングデバイスはstd::iostreamとうまく協調できない。
・sourceクラス
-char_typeやcategoryがあらかじめ定義されているクラス
・Boost.Iostreamにはfiltering streams や stream buffersのコンストラクタにboost::iterator_rangeを直接指定できる。これによってコンテナを容易に読み取ることができる。