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

メモリ上に展開されたMessagePackのデータに高速にアクセスします。 [詳解]

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

公開メンバ関数

MpWalker operator[] (size_t array_idx) const noexcept
 インデックスを指定して配列の要素にアクセスします。 [詳解]
 
MpWalker operator[] (const nlib_utf8_t *key) const noexcept
 文字列を指定して連想配列の要素にアクセスします。 [詳解]
 
MpWalker operator[] (int array_idx) const noexcept
 operator[](size_t array_idx) と同様です。
 
const void * GetPtr () const noexcept
 MessagePackデータの現在位置へのポインタを取得します。 [詳解]
 
size_t GetSize () const noexcept
 MessagePackデータのサイズを取得します。 [詳解]
 
MpWalker At (size_t idx) const noexcept
 operator[](size_t array_idx)と同じです。
 
MpWalker At (size_t idx, const nlib_utf8_t **key, size_t *n) const noexcept
 インデックスを指定して連想配列の要素にアクセスします。 [詳解]
 
MpWalker Find (const nlib_utf8_t *key) const noexcept
 operator[](const nlib_utf8_t* key)と同じです。
 
MpWalker GetString (const nlib_utf8_t **str, uint32_t *n) const noexcept
 str formatのデータを取得します。 [詳解]
 
MpWalker GetBinary (const void **bin, uint32_t *n) const noexcept
 bin formatのデータを取得します。 [詳解]
 
MpWalker GetExt (int8_t *tp, const void **bin, uint32_t *n) const noexcept
 ext formatのデータを取得します。 [詳解]
 
MpWalker GetMapCount (uint32_t *n) const noexcept
 連想配列のサイズを取得します。 [詳解]
 
MpWalker GetArrayCount (uint32_t *n) const noexcept
 配列のサイズを取得します。 [詳解]
 
MpWalker GetNil () const noexcept
 nilを取得します。 [詳解]
 
MpWalker GetBoolean (bool *val) const noexcept
 truefalseを取得します。 [詳解]
 
MpWalker GetInt (int32_t *val) const noexcept
 符号付き整数値を取得します。 [詳解]
 
MpWalker GetInt (int64_t *val) const noexcept
 符号付き整数値を取得します。 [詳解]
 
MpWalker GetUint (uint32_t *val) const noexcept
 符号なし整数値を取得します。 [詳解]
 
MpWalker GetUint (uint64_t *val) const noexcept
 符号なし整数値を取得します。 [詳解]
 
MpWalker GetFloat (float *val) const noexcept
 単精度浮動小数点数を取得します。 [詳解]
 
MpWalker GetDouble (double *val) const noexcept
 倍精度浮動小数点数を取得します。 [詳解]
 
 operator bool () const
 オブジェクトが初期化されて読み込み可能であればtrueを返します。
 
基本的なメンバ関数
 MpWalker () noexcept
 デフォルトコンストラクタです。
 
 ~MpWalker () noexcept
 デストラクタです。
 
初期化と終了
 MpWalker (const void *p, size_t n) noexcept
 コンストラクタです。 [詳解]
 
bool Init (const void *p, size_t n) noexcept
 デフォルトコンストラクタを利用した場合はこの関数で初期化します。 [詳解]
 

詳解

メモリ上に展開されたMessagePackのデータに高速にアクセスします。

説明
MpReaderを利用してMessagePackのデータを読み込む場合、ツリー状にMpObjectが構築されます。 この動作は便利なのですが、必要でないデータに関してもMpObjectが構築されることになります。
MpWalkerを利用して連想配列のキーや配列のインデックスを指定して必要な部分に移動してから、MpReaderを利用することで必要なデータについてのみMpObjectを構築すれば、効率よくMessagePackのデータを利用することが可能になります。
属性"key"以下のみをMpObjectとして構築するコード例を以下に示します。
#include "nn/nlib/msgpack/MpReader.h"
...
// 属性"key"の値だけが欲しい場合
const void* p = MessagePackデータへのポインタ
size_t n = MessagePackのデータサイズ
MpWalker root(p, n);
MpWalker value = root["key"];
if (!value) { 属性"key"が見つからなかったのでエラー; }
MemoryInputStream istr(value.GetPtr(), value.GetSize());
MpReader r;
if (!r.Init(&istr)) { 初期化失敗; }
MpObject obj;
if (!r.Read(&obj)) { 読み込み失敗 }

MpWalker.h31 行目に定義があります。

構築子と解体子

◆ MpWalker()

nn::nlib::msgpack::MpWalker::MpWalker ( const void *  p,
size_t  n 
)
noexcept

コンストラクタです。

引数
[in]pMessagePackデータへのポインタ
[in]nデータサイズ

関数詳解

◆ At()

nn::nlib::msgpack::MpWalker::At ( size_t  idx,
const nlib_utf8_t **  key,
size_t *  n 
) const
noexcept

インデックスを指定して連想配列の要素にアクセスします。

引数
[in]idx連想配列のインデックス
[out]key対応する連想配列のキー(ヌル終端しません)
[out]n対応する連想配列のキーの長さ
戻り値
成功した場合、連想配列の値を指すMpWalkerオブジェクト

◆ GetArrayCount()

nn::nlib::msgpack::MpWalker::GetArrayCount ( uint32_t *  n) const
noexcept

配列のサイズを取得します。

引数
[out]n配列のサイズ
戻り値
成功した場合、次の要素(配列内の最初の要素)を指すMpWalkerオブジェクト

◆ GetBinary()

nn::nlib::msgpack::MpWalker::GetBinary ( const void **  bin,
uint32_t *  n 
) const
noexcept

bin formatのデータを取得します。

引数
[out]binバイナリへのポインタ
[out]nバイナリの長さ
戻り値
成功した場合、次の要素を指すMpWalkerオブジェクト
参照
https://github.com/msgpack/msgpack/blob/master/spec.md#formats-bin

◆ GetBoolean()

nn::nlib::msgpack::MpWalker::GetBoolean ( bool *  val) const
noexcept

truefalseを取得します。

引数
[out]valブール値へのポインタ
戻り値
成功した場合、次の要素を指すMpWalkerオブジェクト

◆ GetDouble()

nn::nlib::msgpack::MpWalker::GetDouble ( double *  val) const
noexcept

倍精度浮動小数点数を取得します。

引数
[out]val倍精度浮動小数点数へのポインタ
戻り値
成功した場合、次の要素を指すMpWalkerオブジェクト

◆ GetExt()

nn::nlib::msgpack::MpWalker::GetExt ( int8_t *  tp,
const void **  bin,
uint32_t *  n 
) const
noexcept

ext formatのデータを取得します。

引数
[out]tpオブジェクトの型を示す数値
[out]binバイナリへのポインタ
[out]nバイナリの長さ
戻り値
成功した場合、次の要素を指すMpWalkerオブジェクト
参照
https://github.com/msgpack/msgpack/blob/master/spec.md#formats-ext

◆ GetFloat()

nn::nlib::msgpack::MpWalker::GetFloat ( float *  val) const
noexcept

単精度浮動小数点数を取得します。

引数
[out]val単精度浮動小数点数へのポインタ
戻り値
成功した場合、次の要素を指すMpWalkerオブジェクト

◆ GetInt() [1/2]

nn::nlib::msgpack::MpWalker::GetInt ( int32_t *  val) const
noexcept

符号付き整数値を取得します。

引数
[out]val符号付き整数値へのポインタ
戻り値
成功した場合、次の要素を指すMpWalkerオブジェクト

◆ GetInt() [2/2]

nn::nlib::msgpack::MpWalker::GetInt ( int64_t *  val) const
noexcept

符号付き整数値を取得します。

引数
[out]val符号付き整数値へのポインタ
戻り値
成功した場合、次の要素を指すMpWalkerオブジェクト

◆ GetMapCount()

nn::nlib::msgpack::MpWalker::GetMapCount ( uint32_t *  n) const
noexcept

連想配列のサイズを取得します。

引数
[out]n連想配列のサイズ
戻り値
成功した場合、次の要素(連想配列内の最初のキー)を指すMpWalkerオブジェクト

◆ GetNil()

nn::nlib::msgpack::MpWalker::GetNil ( ) const
noexcept

nilを取得します。

戻り値
成功した場合、次の要素を指すMpWalkerオブジェクト

◆ GetPtr()

nn::nlib::msgpack::MpWalker::GetPtr ( ) const
inlinenoexcept

MessagePackデータの現在位置へのポインタを取得します。

戻り値
MessagePackデータへのポインタ

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

◆ GetSize()

nn::nlib::msgpack::MpWalker::GetSize ( ) const
inlinenoexcept

MessagePackデータのサイズを取得します。

戻り値
MessagePackデータのサイズ

MpWalker.h53 行目に定義があります。

◆ GetString()

nn::nlib::msgpack::MpWalker::GetString ( const nlib_utf8_t **  str,
uint32_t *  n 
) const
noexcept

str formatのデータを取得します。

引数
[out]str文字列(ヌル終端しません)へのポインタ
[out]n文字列の長さ
戻り値
成功した場合、次の要素を指すMpWalkerオブジェクト
説明
文字列がUTF-8であるかどうかのチェックは行われません。必要な場合はユーザー自身で行う必要があります。
参照
https://github.com/msgpack/msgpack/blob/master/spec.md#formats-str

◆ GetUint() [1/2]

nn::nlib::msgpack::MpWalker::GetUint ( uint32_t *  val) const
noexcept

符号なし整数値を取得します。

引数
[out]val符号なし整数値へのポインタ
戻り値
成功した場合、次の要素を指すMpWalkerオブジェクト

◆ GetUint() [2/2]

nn::nlib::msgpack::MpWalker::GetUint ( uint64_t *  val) const
noexcept

符号なし整数値を取得します。

引数
[out]val符号なし整数値へのポインタ
戻り値
成功した場合、次の要素を指すMpWalkerオブジェクト

◆ Init()

nn::nlib::msgpack::MpWalker::Init ( const void *  p,
size_t  n 
)
inlinenoexcept

デフォルトコンストラクタを利用した場合はこの関数で初期化します。

引数
[in]pMessagePackデータへのポインタ
[in]nデータサイズ
戻り値
成功ならばtrue(常に成功)

MpWalker.h36 行目に定義があります。

◆ operator[]() [1/2]

nn::nlib::msgpack::MpWalker::operator[] ( size_t  array_idx) const
noexcept

インデックスを指定して配列の要素にアクセスします。

引数
[in]array_idx配列のインデックス
戻り値
成功した場合、配列の要素の値を指すMpWalkerオブジェクト
説明
配列の要素を指し示すMpWalkerオブジェクトを返します。 配列でなかったり、指定されたインデックスが存在しない等の場合は、デフォルトコンストラクタで構築されたMpWalkerオブジェクトを返します。
結果は以下のコードのようにオブジェクトを評価することで判定可能です。
MpWalker result = obj[idx];
if (!p) {
// error
}

◆ operator[]() [2/2]

nn::nlib::msgpack::MpWalker::operator[] ( const nlib_utf8_t key) const
noexcept

文字列を指定して連想配列の要素にアクセスします。

引数
[in]key連想配列のキー
戻り値
成功した場合、連想配列の値を指すMpWalkerオブジェクト
説明
連想配列の要素を指し示すMpWalkerオブジェクトを返します。 連想配列でなかったり、指定されたキーが存在しない等の場合は、デフォルトコンストラクタで構築されたMpWalkerオブジェクトを返します。
結果は以下のコードのようにオブジェクトを評価することで判定可能です。
MpWalker result = obj[idx];
if (!p) {
// error
}

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