nlib
nn::nlib::InputConverterStream クラス

内部でデータ変換を行う InputStream のように振る舞うクラスの基底です。 [詳解]

#include "nn/nlib/InputConverterStream.h"

+ nn::nlib::InputConverterStream の継承関係図

公開メンバ関数

errno_t SetStream (InputStream *istr) noexcept
 変換前のデータを読み込む入力ストリームを設定します。 [詳解]
 
InputStreamGetStream () const noexcept
 変換前のデータを読み込む入力ストリームを取得します。 [詳解]
 
- 基底クラス nn::nlib::InputStream に属する継承公開メンバ関数
errno_t GetErrorValue () const noexcept
 エラー値を取得します。 [詳解]
 
size_t Pos () const noexcept
 ストリーム上の現在位置を返します。 [詳解]
 
uint64_t Pos64 () const noexcept
 ストリーム上の現在位置を64bit値で返します。 [詳解]
 
bool IsEos () noexcept
 ストリームを最後まで読み終えている場合trueを返します。最後まで読み終えていない場合やエラーが発生している場合はfalseを返します。 [詳解]
 
int Read () noexcept
 ストリームから1バイトを読み込みます。 [詳解]
 
int Peek () noexcept
 ストリームを消費せずに次の1バイトを読み込みます。 [詳解]
 
size_t Skip (size_t nbytes) noexcept
 nbytes を読み飛ばします。 [詳解]
 
size_t Read (void *ptr, size_t nbytes) noexcept
 ptr で示されるメモリにnbytes 読み込みます。 [詳解]
 
template<size_t N>
size_t Read (nlib_byte_t(&buf)[N]) noexcept
 上記関数のテンプレートオーバーロードです。
 
bool Close () noexcept
 ストリームを閉じます。成功した場合にはtrueを返します。 [詳解]
 
bool Mark (size_t readlimit) noexcept
 現在の読み込み位置にGoBackToMark()で戻ることができるように設定します。 [詳解]
 
bool GoBackToMark () noexcept
 最後にMark()を実行した読み込み位置に戻ります。 [詳解]
 
bool IsMarkSupported () const noexcept
 このストリームがMark()GoBackToMark()をサポートしていればtrueを返します。
 
 operator bool () const
 オブジェクトが初期化済みで内部でエラーが発生していなければtrue、発生していればfalseを返します。
 
constexpr InputStream () noexcept
 デフォルトコンストラクタです。 派生クラスから呼び出されます。
 
virtual ~InputStream () noexcept
 デストラクタです。 派生クラスから呼び出されます。
 

その他の継承メンバ

- 基底クラス nn::nlib::InputStream に属する継承限定公開メンバ関数
void SetBuffer (void *p, size_t nbytes, bool is_mark_supported, bool is_buf_readonly) noexcept
 InputStreamが持つバッファを設定します。 [詳解]
 
void SetError (errno_t e) const noexcept
 InputStreamにエラーを設定します。 [詳解]
 

詳解

内部でデータ変換を行う InputStream のように振る舞うクラスの基底です。

説明
SetStream()関数を用いて入力ストリームを設定しデータを読み込むと、データ変換の結果をInputStreamのインターフェイスで読み込むことができます。 通常、ユーザーが直接利用することはありません。
何も変換しない(最も単純な)データ変換のためのコードは以下のような形になります。
InputTransform::GetWorkBuffer()では、InputStreamが利用するためのバッファを登録します。 InputStreamはこのバッファからデータを取り出してユーザーに提供します。 InputTransform::Transform()では、InputStreamからデータを読み込んで、変換したデータを書き出すことを行います。 InputTransform::OnSetStream()は、InputConverterStream::SetStream()が呼び出された時に行いたい処理を記述します。 InputTransform::OnClose()は、ストリームが閉じられた際に呼び出されます。
最後にInputConverterStreamTemplクラステンプレートを、InputTransformの派生クラスで実体化することにより、内部でデータ変換を行う入力ストリームを定義できます。
class NoInputTransform : public nlib_ns::InputTransform {
public:
NoInputTransform() {}
virtual errno_t Transform(nlib_ns::InputStream* is, void* p, size_t size, size_t* nbytes) override {
*nbytes = is->Read(p, size);
if (*nbytes == 0) return is->GetErrorValue();
return 0;
}
virtual void* GetWorkBuffer(size_t* n) override {
*n = 128;
return buf_;
}
virtual errno_t OnSetStream(nlib_ns::InputStream*) override {
return 0;
}
virtual errno_t OnClose() override {
return 0;
}
private:
unsigned char buf_[128];
NLIB_DISALLOW_COPY_AND_ASSIGN(NoInputTransform);
};

InputConverterStream.h48 行目に定義があります。

関数詳解

◆ GetStream()

nn::nlib::InputConverterStream::GetStream ( ) const
inlinenoexcept

変換前のデータを読み込む入力ストリームを取得します。

戻り値
入力ストリームへのポインタ

InputConverterStream.h56 行目に定義があります。

◆ SetStream()

nn::nlib::InputConverterStream::SetStream ( InputStream istr)
noexcept

変換前のデータを読み込む入力ストリームを設定します。

引数
[in]istr変換前のデータを読み込むストリームへのポインタ
戻り値
0エラーがない場合
EEXIST既にストリームがセットされている場合
EINVAListrNULLだった場合
EBADFSetTransform()が未実行の場合
ENOMEMワークメモリの確保に失敗した場合

このクラス詳解は次のファイルから抽出されました: