nlib
nn::nlib::BinaryReader クラスfinal

ストリーム(InputStream)からバイナリを読み込むクラスです。 [詳解]

#include "nn/nlib/BinaryReader.h"

公開型

enum  EndianSetting {
  DEFAULT = 0,
  ENDIAN_LITTLE,
  ENDIAN_BIG
}
 エンディアンを指定します。 [詳解]
 

公開メンバ関数

bool Init (InputStream *stream, EndianSetting endian=DEFAULT) noexcept
 ストリームとエンディアン指定を与えてバイナリリーダを初期化します。 [詳解]
 
template<class T >
bool Read (T *x) noexcept
 binary_reader::Read() を呼び出します。
 
int Peek () noexcept
 ストリームの先頭1バイトを参照します。 [詳解]
 
bool Skip (size_t n) noexcept
 ストリームからn バイトを読み飛ばします。 [詳解]
 
template<class T >
size_t ReadArray (T *x, size_t n) noexcept
 binary_reader::ReadArray() を呼び出します。
 
template<class T , size_t N>
size_t ReadArray (T(&a)[N]) noexcept
 ストリームから配列を読み込みます。 [詳解]
 
bool Close () noexcept
 バイナリリーダをクローズします。 [詳解]
 
void SetError (errno_t e) noexcept
 エラーを設定します。既にエラーが設定されている場合にはエラーは設定されません。 [詳解]
 
errno_t GetErrorValue () const noexcept
 書き込み等が失敗した際に、エラーの原因を取得できます。 [詳解]
 
 operator bool () const
 内部でエラーが発生していなければtrueを返します。
 
基本的なメンバ関数
 BinaryReader () noexcept
 デフォルトコンストラクタです。
 
 ~BinaryReader () noexcept
 デストラクタです。ストリームをクローズしません。
 
基本データ型の読み込み
bool Read (char *x) noexcept
 ストリームからバイナリでchar型のデータを読み取ります。成功した場合はtrueを返します。
 
bool Read (signed char *x) noexcept
 ストリームからバイナリでsigned char型のデータを読み取ります。成功した場合はtrueを返します。
 
bool Read (unsigned char *x) noexcept
 ストリームからバイナリでunsigned char型のデータを読み取ります。成功した場合はtrueを返します。
 
bool Read (short *x) noexcept
 ストリームからバイナリでshort型のデータを読み取ります。成功した場合はtrueを返します。
 
bool Read (unsigned short *x) noexcept
 ストリームからバイナリでunsigned short型のデータを読み取ります。成功した場合はtrueを返します。
 
bool Read (int *x) noexcept
 ストリームからバイナリでint型のデータを読み取ります。成功した場合はtrueを返します。
 
bool Read (unsigned int *x) noexcept
 ストリームからバイナリでunsigned int型のデータを読み取ります。成功した場合はtrueを返します。
 
bool Read (long *x) noexcept
 ストリームからバイナリでlong型のデータを読み取ります。成功した場合はtrueを返します。
 
bool Read (unsigned long *x) noexcept
 ストリームからバイナリでunsigned long型のデータを読み取ります。成功した場合はtrueを返します。
 
bool Read (long long *x) noexcept
 ストリームからバイナリでlong long型のデータを読み取ります。成功した場合はtrueを返します。
 
bool Read (unsigned long long *x) noexcept
 ストリームからバイナリでunsigned long long型のデータを読み取ります。成功した場合はtrueを返します。
 
bool Read (float *x) noexcept
 ストリームからバイナリでfloat型のデータを読み取ります。成功した場合はtrueを返します。
 
bool Read (double *x) noexcept
 ストリームからバイナリでdouble型のデータを読み取ります。成功した場合はtrueを返します。
 
基本データ型配列の読み込み
size_t ReadArray (unsigned char *x, size_t n) noexcept
 ストリームからバイナリでunsigned char型のデータ列を読み取ります。
 
size_t ReadArray (unsigned short *x, size_t n) noexcept
 ストリームからバイナリでunsigned short型のデータ列を読み取ります。
 
size_t ReadArray (unsigned int *x, size_t n) noexcept
 ストリームからバイナリでunsigned int型のデータ列を読み取ります。
 
size_t ReadArray (unsigned long long *x, size_t n) noexcept
 ストリームからバイナリでunsigned long long型のデータ列を読み取ります。
 
size_t ReadArray (unsigned long *x, size_t n) noexcept
 ストリームからバイナリでunsigned long型のデータ列を読み取ります。
 
size_t ReadArray (float *x, size_t n) noexcept
 ストリームからバイナリでfloat型のデータ列を読み取ります。
 
size_t ReadArray (double *x, size_t n) noexcept
 ストリームからバイナリでdouble型のデータ列を読み取ります。
 
size_t ReadArray (signed char *x, size_t n) noexcept
 ストリームからバイナリでsigned char型のデータ列を読み取ります。
 
size_t ReadArray (char *x, size_t n) noexcept
 ストリームからバイナリでchar型のデータ列を読み取ります。
 
size_t ReadArray (short *x, size_t n) noexcept
 ストリームからバイナリでshort型のデータ列を読み取ります。
 
size_t ReadArray (int *x, size_t n) noexcept
 ストリームからバイナリでint型のデータ列を読み取ります。
 
size_t ReadArray (long *x, size_t n) noexcept
 ストリームからバイナリでlong型のデータ列を読み取ります。
 
size_t ReadArray (long long *x, size_t n) noexcept
 ストリームからバイナリでlong long型のデータ列を読み取ります。
 

詳解

ストリーム(InputStream)からバイナリを読み込むクラスです。

説明
ストリームデータのエンディアンを指定することが可能で、フィールドへの読み込みはエンディアンの指定に従って行われます。
// リトルエンディアンでデータを読み込んで変数に設定します。
unsigned char buf[] = {
0x00,
0x00, 0x01,
0x00, 0x01, 0x02, 0x03,
0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07
};
MemoryInputStream s;
s.Init(buf);
// リトルエンディアンで初期化
if (!r.Init(&s, r.ENDIAN_LITTLE))) { ERROR; }
int8_t v8;
int16_t v16;
int32_t v32;
int64_t v64;
// 各フィールドがリトルエンディアンで読まれる
if (!r.Read(&v8))) { ERROR; } // v8 == 0
if (!r.Read(&v16)) { ERROR; } // v16 == 0x100
if (!r.Read(&v32)) { ERROR; } // v32 == 0x03020100
if (!r.Read(&v64)) { ERROR; } // v64 == 0x0706050403020100LL
if (!r.Close()) { ERROR; }
各種例:
succinct/detection/detection.cpp, succinct/kwlink/kwlink.cpp.

BinaryReader.h13 行目に定義があります。

列挙型メンバ詳解

エンディアンを指定します。

列挙値
DEFAULT 

プログラムが動作しているマシンと同じエンディアンで書き込みます。

ENDIAN_LITTLE 

リトルエンディアンで書き込みます。

ENDIAN_BIG 

ビッグエンディアンで書き込みます。

BinaryReader.h15 行目に定義があります。

関数詳解

nn::nlib::BinaryReader::Close ( )
inlinenoexcept

バイナリリーダをクローズします。

戻り値
成功した場合はtrue(常に成功する)
説明
バイナリリーダをクローズし、ベースストリームをクリアします。 この操作ではベースストリームはクローズされません。

BinaryReader.h107 行目に定義があります。

nn::nlib::BinaryReader::GetErrorValue ( ) const
inlinenoexcept

書き込み等が失敗した際に、エラーの原因を取得できます。

戻り値
0エラーは発生していません。
EINVAL引数が間違っている。
EEXIST初期化を2重に行おうとした。
EBADF読み込みストリームが存在しない。
EIO何らかの原因でストリームからの読み取りに失敗した。

BinaryReader.h115 行目に定義があります。

nn::nlib::BinaryReader::Init ( InputStream stream,
EndianSetting  endian = DEFAULT 
)
noexcept

ストリームとエンディアン指定を与えてバイナリリーダを初期化します。

引数
[in]streamストリーム
[in]endianエンディアン指定
戻り値
成功した場合はtrue
説明
既に初期化されている場合やstreamNULLの場合はfalseを返します。
nn::nlib::BinaryReader::Peek ( )
inlinenoexcept

ストリームの先頭1バイトを参照します。

戻り値
-1失敗した場合
それ以外ストリームの先頭1バイトの値

BinaryReader.h49 行目に定義があります。

template<class T , size_t N>
nn::nlib::BinaryReader::ReadArray ( T(&)  a[N])
inlinenoexcept

ストリームから配列を読み込みます。

テンプレート引数
T数値型(e.g. int32_t, float, ...)
引数
[out]aデータが格納される配列
戻り値
読み取ることが出来たデータの個数(全部読み取れた場合はN )

BinaryReader.h177 行目に定義があります。

nn::nlib::BinaryReader::SetError ( errno_t  e)
inlinenoexcept

エラーを設定します。既にエラーが設定されている場合にはエラーは設定されません。

引数
[in]eエラー値
説明
ユーザー定義型を読み込むユーザーコードにおいて、エラーを発生させたい場合に利用することができます。

BinaryReader.h112 行目に定義があります。

nn::nlib::BinaryReader::Skip ( size_t  n)
inlinenoexcept

ストリームからn バイトを読み飛ばします。

引数
[in]n読み飛ばすバイト数
戻り値
成功した場合はtrue

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


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