nlib
nn::nlib::msgpack::MpReader クラスfinal

MessagePack形式のデータをストリームから読み込みます。 [詳解]

#include "nn/nlib/msgpack/MpReader.h"

公開メンバ関数

初期化と終了
bool Init (InputStream *istr, const MpReaderSettings &settings) noexcept
 設定用パラメータを指定してオブジェクトを初期化します。 [詳解]
 
bool Init (InputStream *istr) noexcept
 オブジェクトを初期化します。 [詳解]
 
bool Close () noexcept
 MpReaderをクローズします。 [詳解]
 
エラーチェック
void SetError (errno_t e) noexcept
 エラーを設定します。 [詳解]
 
errno_t GetErrorValue () const noexcept
 発生したエラーを取得します。 [詳解]
 
 operator bool () const
 エラーがなければtrueを返します。
 
低レベルの読み込みと変換

オブジェクトへの型変換を伴わない読み込みと型変換を行うメンバ関数です。

bool GetNextValue () noexcept
 次の値データを読み込みます。 [詳解]
 
bool GetNextArrayNum (size_t *num) noexcept
 配列のサイズデータを読み込みます。 [詳解]
 
bool GetNextMapNum (size_t *num) noexcept
 連想配列のサイズデータを読み込みます。 [詳解]
 
bool GetNextRawNum (size_t *num) noexcept
 バイト列のサイズデータを読み込みます。 [詳解]
 
bool GetNextRawBody (void *p, size_t num) noexcept
 バイト列を読み込みます。 [詳解]
 
template<class T >
errno_t Convert (T *v)
 GetNextValue()で読み込まれたデータを与えられた型に変換します。 [詳解]
 

高レベルの読み込み

オブジェクトへの型変換を伴う読み込みを行うメンバ関数です。

template<class T >
bool Read (T v)
 ストリームからデータを読み込み、vに設定します。 [詳解]
 
template<size_t n>
bool Read (char(&v)[n]) noexcept
 Read(T (&vec)[n]) を御覧ください。
 
template<class T , size_t n>
bool Read (T(&v)[n])
 配列又は文字列を読み込みます。 [詳解]
 
bool Read (char *v, size_t n) noexcept
 ストリームから文字列を読み込みv に設定します。 [詳解]
 
bool Read (void *v, size_t n) noexcept
 ストリームからn バイトのバイト列を読み込みv に設定します。 [詳解]
 
template<class T >
bool Read (T *v, size_t n)
 ストリームから配列データを読み込み、vに設定します。 [詳解]
 
bool Read (MpObject *obj) noexcept
 Read(T v) を御覧ください。
 
bool SkipMpObject () noexcept
 ストリームからMpObject1つぶんのデータを読み飛ばします。 [詳解]
 
bool CheckString (const char *key, size_t keylen) noexcept
 ストリームから文字列1つぶんのデータを読み、key と一致するか調べます。 [詳解]
 
bool CheckString (const char *key) noexcept
 CheckString(key, nlib_strlen(key)) を実行します。
 
static bool Read (MpObject *obj, const void *p, size_t n, const MpReaderSettings &settings) noexcept
 MpReaderオブジェクトを構築して、p からMpObjectを設定します。 [詳解]
 
static bool Read (MpObject *obj, const void *p, size_t n) noexcept
 Read(MpObject* obj, const void* p, size_t n, const MpReaderSettings& settings)settings をデフォルトに設定して実行します。
 

詳解

MessagePack形式のデータをストリームから読み込みます。

説明
MpReaderは、Box化されたオブジェクトと、ネイティブ型の読み込みに対応しています。

MpReader.h43 行目に定義があります。

関数詳解

nn::nlib::msgpack::MpReader::CheckString ( const char *  key,
size_t  keylen 
)
noexcept

ストリームから文字列1つぶんのデータを読み、key と一致するか調べます。

引数
[in]key文字列
[in]keylen文字列の長さ
戻り値
key と一致した場合はtrue。一致しないかエラーが発生した場合はfalse
説明
key と一致した場合でも一致しない場合でも、ストリームの先頭は次の位置に移動します。 つまり、もし連想配列の内部である場合、ストリームの先頭はキーに対応する要素の位置に移動します。
nn::nlib::msgpack::MpReader::Close ( )
inlinenoexcept

MpReaderをクローズします。

戻り値
成功した場合はtrue
説明
MpReaderをクローズして、ベースストリームをデタッチします。 この際、ベースストリームはクローズされません。
Init()メンバ関数を再び利用することでオブジェクトを再利用することができます。

MpReader.h52 行目に定義があります。

template<class T >
nn::nlib::msgpack::MpReader::Convert ( T *  v)
inline

GetNextValue()で読み込まれたデータを与えられた型に変換します。

テンプレート引数
T変換先の型
引数
[out]v変換されたデータの格納場所
戻り値
0エラーは発生していません。
EFAULT型変換が不可能な場合に返ります。v には何も設定されません。
EOVERFLOWオーバーフローが発生した場合に返ります。サイズの大きな型に格納すれば解消できます。
EINVALvがNULLの場合
EIDRM違う種類の型にキャストされている場合に返されます(e.g. boolから数値型)
説明
この関数はMpReader内部のエラー状態を設定しません。

MpReader.h74 行目に定義があります。

nn::nlib::msgpack::MpReader::GetErrorValue ( ) const
inlinenoexcept

発生したエラーを取得します。

戻り値
0エラーは発生していません。
EILSEQMesagePackとしては正しくないデータに遭遇した(パースエラー)。
EOF予期しないEOFに遭遇した(パースエラー)。
EINVAL引数にエラーがあった。
EEXIST初期化されたMpReaderを再度初期化しようとした。
EIOベースストリームでエラーが発生した。
EBADF未初期化のMpReaderを利用しようとした。
E2BIG配列サイズ等が大きすぎた。
ENOMEMメモリの取得に失敗した。

MpReader.h66 行目に定義があります。

nn::nlib::msgpack::MpReader::GetNextArrayNum ( size_t *  num)
noexcept

配列のサイズデータを読み込みます。

引数
[out]num配列の数が設定されるポインタ
戻り値
成功した場合はtrue
説明
ストリームから配列サイズのデータを取得してnum に設定します。 エラーが発生した場合は、エラーを設定しfalseを返します。
データが配列サイズのデータでない場合は、falseを返しエラーは設定されません。 この場合は、ストリームからは何も読み込まれていません。
nn::nlib::msgpack::MpReader::GetNextMapNum ( size_t *  num)
noexcept

連想配列のサイズデータを読み込みます。

引数
[out]num連想配列の数が設定されるポインタ
戻り値
成功した場合はtrue
説明
ストリームから連想配列サイズのデータを取得してnum に設定します。 エラーが発生した場合は、エラーを設定しfalseを返します。
データが連想配列サイズのデータでない場合は、falseを返しエラーは設定されません。 この場合は、ストリームからは何も読み込まれていません。
nn::nlib::msgpack::MpReader::GetNextRawBody ( void *  p,
size_t  num 
)
noexcept

バイト列を読み込みます。

引数
[out]pバイト列が格納される領域です。
[in]numGetNextRawNum()で取得した数を渡します。
戻り値
成功した場合にはtrue
nn::nlib::msgpack::MpReader::GetNextRawNum ( size_t *  num)
noexcept

バイト列のサイズデータを読み込みます。

引数
[out]numバイト列のサイズが設定されるポインタ
戻り値
成功した場合はtrue
説明
ストリームからバイト列のサイズのデータを取得してnum に設定します。 エラーが発生した場合は、エラーを設定しfalseを返します。
データがバイト列のサイズのデータでない場合は、falseを返しエラーは設定されません。 この場合は、ストリームからは何も読み込まれていません。
nn::nlib::msgpack::MpReader::GetNextValue ( )
noexcept

次の値データを読み込みます。

戻り値
成功した場合はtrue
説明
ストリームから次の値データを取得してオブジェクトの内部状態に設定します。 エラーが発生した場合は、エラーを設定しfalseを返します。
データが配列, 連想配列, 及びバイト列だった場合は、falseを返しエラーは設定されません。 この場合は、ストリームからは何も読み込まれていません。
nn::nlib::msgpack::MpReader::Init ( InputStream istr,
const MpReaderSettings settings 
)
noexcept

設定用パラメータを指定してオブジェクトを初期化します。

引数
[in]istrMpReaderに設定する入力ストリーム
[in]settingsMessagePackデシリアライズにおける各種設定
戻り値
成功した場合はtrue
nn::nlib::msgpack::MpReader::Init ( InputStream istr)
inlinenoexcept

オブジェクトを初期化します。

引数
[in]istrMpReaderに設定する入力ストリーム
戻り値
成功した場合はtrue

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

nn::nlib::msgpack::MpReader::Read ( MpObject obj,
const void *  p,
size_t  n,
const MpReaderSettings settings 
)
staticnoexcept

MpReaderオブジェクトを構築して、p からMpObjectを設定します。

引数
[in]objMpObjectへのポインタ。NULLでない必要があります。
[in]pシリアライズされたデータへのポインタ
[in]nデータのサイズ
[in]settings読み込み設定
戻り値
成功した場合はtrueを返します。
template<class T >
nn::nlib::msgpack::MpReader::Read ( v)
inline

ストリームからデータを読み込み、vに設定します。

テンプレート引数
T読み込むオブジェクトの型のポインタ型
引数
[out]v読み込んだデータが格納されるオブジェクト
戻り値
成功した場合はtrue
説明
デフォルトでTは以下の型に対応しています。 MpRead()関数を特殊化することでユーザー型に対応することができます。
  • nil, bool
  • 8bitから64bitまでの符号・符号無し整数
  • float, double
  • C文字列, std::string
  • std::pair
  • std::vector
  • Nlist
  • std::map
  • MpObject

MpReader.h79 行目に定義があります。

template<class T , size_t n>
nn::nlib::msgpack::MpReader::Read ( T(&)  vec[n])
inline

配列又は文字列を読み込みます。

引数
[in]vec配列
テンプレート引数
T要素の型
n要素の数
戻り値
trueならば成功
説明
Tがchar型以外の場合は配列を、Tがchar型の場合は文字列として読み込みます。 文字列の場合はヌル文字を付加して終端します。

MpReader.h89 行目に定義があります。

nn::nlib::msgpack::MpReader::Read ( char *  v,
size_t  n 
)
noexcept

ストリームから文字列を読み込みv に設定します。

引数
[out]v文字列へのポインタ
[in]n文字列のバッファサイズ(終端のヌル文字を含む)
戻り値
成功した場合はtrue
説明
文字列としてバイト列をn - 1バイトまで読み込みます。 文字列の長さがn 以上だった場合はエラーにE2BIGを設定してfalseを返します。 成功した場合、文字列の末尾には必ず'\0'が書き込まれます。
nn::nlib::msgpack::MpReader::Read ( void *  v,
size_t  n 
)
noexcept

ストリームからn バイトのバイト列を読み込みv に設定します。

引数
[out]vバイト列が格納されるポインタ
[in]nバイト列
戻り値
成功した場合はtrue
説明
バイト列をn バイト読み込みます。 バイト列のサイズがn バイトでない場合はエラーにEILSEQを設定してfalseを返します。
template<class T>
bool nn::nlib::msgpack::MpReader::Read ( T *  v,
size_t  n 
)

ストリームから配列データを読み込み、vに設定します。

テンプレート引数
T読み込むオブジェクトの型のポインタ型
引数
[out]v読み込んだデータが格納されるオブジェクト配列へのポインタ
[in]n配列のサイズ
戻り値
成功した場合はtrue

MpReader.h184 行目に定義があります。

nn::nlib::msgpack::MpReader::SetError ( errno_t  e)
inlinenoexcept

エラーを設定します。

引数
[in]e設定するエラー値(0以外はエラー)
説明
既にエラーが設定されている場合は何もしません。

MpReader.h63 行目に定義があります。

nn::nlib::msgpack::MpReader::SkipMpObject ( )
noexcept

ストリームからMpObject1つぶんのデータを読み飛ばします。

戻り値
成功した場合はtrue
説明
バイト列を読み込みますが、MpObjectを構築しないのでRead()を利用するより高速に動作します。

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