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

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

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

公開メンバ関数

MpWalker operator[] (size_t array_idx) const noexcept
 インデックスを指定して配列の要素にアクセスします。 [詳解]
 
MpWalker operator[] (const char *key) const noexcept
 文字列を指定して連想配列の要素にアクセスします。 [詳解]
 
MpWalker operator[] (int array_idx) const noexcept
 operator[](size_t array_idx) と同様です。
 
const void * GetRaw (uint32_t *n) const noexcept
 バイトデータを取得します。 [詳解]
 
const void * GetPtr () const noexcept
 MessagePackデータの現在位置へのポインタを取得します。 [詳解]
 
size_t GetSize () const noexcept
 MessagePackデータのサイズを取得します。 [詳解]
 
 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として構築するコード例を以下に示します。
...
// 属性"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.h17 行目に定義があります。

構築子と解体子

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

コンストラクタです。

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

関数詳解

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

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

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

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

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

バイトデータを取得します。

引数
[out]nバイトデータのバイト数が格納されます。
戻り値
バイトデータへのポインタ、又はNULL(バイトデータでなかった場合)
説明
実行後に読み込み位置はバイトデータの直後に移動します。
nn::nlib::msgpack::MpWalker::GetSize ( ) const
inlinenoexcept

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

戻り値
MessagePackデータのサイズ

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

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

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

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

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

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

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

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

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

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

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