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

MessagePack又はJSONを読み込むことで作成されるオブジェクトです。 [詳解]

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

公開型

enum  ObjectType {
  NIL = 0,
  BOOLEAN,
  UINT64,
  INT64,
  FLOAT,
  DOUBLE,
  RAW,
  ARRAY,
  MAP
}
 MpObjectに格納されているオブジェクトの型情報です。 [詳解]
 

公開メンバ関数

errno_t Resize (uint32_t n)
 配列や連想配列やRawデータ(文字列)のリサイズをします。 [詳解]
 
MpObjectClone () noexcept
 オブジェクトの複製を作成します。 [詳解]
 
uint32_t GetSize () const noexcept
 配列や連想配列やRawデータ(文字列)の場合にそのサイズを返します。 [詳解]
 
配列型(<tt>ARRAY</tt>型)の利用
MpObjectGetArrayItem (size_t n) noexcept
 インデックスを指定して配列内のオブジェクトを取得します。 [詳解]
 
const MpObjectGetArrayItem (size_t n) const noexcept
 GetArrayItem(size_t n) と同様です。
 
MpObjectoperator[] (size_t n)
 配列である場合に配列の要素への参照を返します。 [詳解]
 
MpObjectSwapArrayItem (size_t n, MpObject *obj) noexcept
 obj の内容と配列内のオブジェクトの内容を交換します。 [詳解]
 
errno_t GetArrayItem (size_t n, MpObject **obj) noexcept
 インデックスを指定して配列内のオブジェクトを取得します。 [詳解]
 
errno_t GetArrayItem (size_t n, const MpObject **obj) const noexcept
 GetArrayItem(size_t n, MpObject** obj) と同様です。
 
errno_t InitArray (uint32_t n) noexcept
 オブジェクトをn 個の要素を持つ配列として初期化します。 [詳解]
 
連想配列型(<tt>MAP</tt>型)の利用
MpObjectGetMapItem (const char *str) noexcept
 文字列を指定して連想配列内のオブジェクトを取得します。 [詳解]
 
const MpObjectGetMapItem (const char *str) const noexcept
 GetMapItem(const char* str) と同様です。
 
MpObjectGetMapItem (const std::string &str) noexcept
 文字列を指定して連想配列内のオブジェクトを取得します。 [詳解]
 
const MpObjectGetMapItem (const std::string &str) const noexcept
 GetMapItem(const std::string& str) と同様です。
 
MpObjectSwapMapItem (const std::string &key, MpObject *obj) noexcept
 obj の内容と連想配列内のオブジェクトの内容を交換します。 [詳解]
 
MpObjectSwapMapItem (const char *str, MpObject *obj) noexcept
 obj の内容と連想配列内のオブジェクトの内容を交換します。 [詳解]
 
MpObjectAppendArrayItem () noexcept
 オブジェクトが配列を格納している場合、要素を末尾に追加します。 [詳解]
 
MpObjectKvAppendMapItem () noexcept
 オブジェクトが連想配列を格納している場合、要素を末尾に追加します。 [詳解]
 
errno_t GetMapItem (size_t n, MpObjectKv **obj) noexcept
 インデックスを指定して連想配列内のオブジェクトを取得します。 [詳解]
 
errno_t GetMapItem (size_t n, const MpObjectKv **obj) const noexcept
 GetMapItem(size_t n, MpObjectKv** obj) と同様です。
 
errno_t InitMap (uint32_t n) noexcept
 オブジェクトをn個の要素を持つ連想配列として初期化します。 [詳解]
 
基本的なメンバ関数
 MpObject () noexcept
 デフォルトコンストラクタです。nil型に設定されます。
 
 ~MpObject () noexcept
 デストラクタです。
 
MpObjectassign (MpObject &rhs, move_tag)
 swapを利用したムーブにより代入します。
 
 MpObject (MpObject &rhs, move_tag)
 swapを利用したムーブによりオブジェクトを構築します。
 
 MpObject (MpObject &&rhs)
 ムーブコンストラクタです。C++11の利用時に有効です。
 
MpObjectoperator= (MpObject &&rhs)
 ムーブ代入演算子です。C++11の利用時に有効です。
 
template<class T >
 MpObject (const T &x)
 T型のオブジェクトをボックス化するコンストラクタです。 [詳解]
 
void swap (MpObject &rhs) noexcept
 オブジェクトの中身をスワップします。 [詳解]
 
バイト列型(<tt>RAW</tt>型)の利用
void * GetRaw ()
 オブジェクトからバイト列を取得します。 [詳解]
 
const void * GetRaw () const
 GetRaw()と同様です。
 
errno_t InitRaw (uint32_t n) noexcept
 オブジェクトをn バイトの領域として初期化します。 [詳解]
 
errno_t InitRaw (const void *p, uint32_t n) noexcept
 オブジェクトをn バイトの領域としてp からコピーして初期化します。 [詳解]
 
ボックス化

数値・文字列・ベクタ等をボックス化してMpObjectのインスタンスとして格納します。

errno_t Box (const char *str) noexcept
 文字列をボックス化します。 [詳解]
 
template<uint32_t n>
errno_t Box (const char(&str)[n]) noexcept
 文字列をボックス化します。 [詳解]
 
template<class T , uint32_t n>
errno_t Box (const T(&vec)[n])
 配列をボックス化します。 [詳解]
 
template<class T >
errno_t Box (const T &v)
 オブジェクトをボックス化します。 [詳解]
 
errno_t Box (const void *p, uint32_t n) noexcept
 バイト列をボックス化します。 [詳解]
 
template<class T >
MpObjectoperator= (const T &x)
 値をMpObjectに代入します。 [詳解]
 
アンボックス化

MpObjectのインスタンスをアンボックス化して数値・文字列・ベクタ等に格納します。

template<class T , size_t n>
errno_t Unbox (T(&a)[n]) const
 オブジェクトの値をアンボックス化します。 [詳解]
 
template<size_t n>
errno_t Unbox (char(&str)[n]) const noexcept
 Unbox(T (&a)[n]) を御覧ください。
 
template<class T >
errno_t Unbox (T *a, size_t n) const
 配列データをアンボックス化します。 [詳解]
 
errno_t Unbox (char *str, size_t n) const noexcept
 Unbox(T* a, size_t n) の説明を御覧ください。
 
errno_t Unbox (void *p, size_t n) const noexcept
 Unbox(T* a, size_t n) の説明を御覧ください。
 
template<class T >
errno_t Unbox (T v) const
 オブジェクトをアンボックス化します。 [詳解]
 
型の取得と判定
ObjectType GetType () const noexcept
 オブジェクトの型を返します。 [詳解]
 
bool IsNil () const noexcept
 格納されている値ががnilであるかどうかを調べます。 [詳解]
 
bool IsBoolean () const noexcept
 格納されている値が真偽値であるかどうかを調べます。 [詳解]
 
bool IsInteger () const noexcept
 格納されている値が整数値であるかどうかを調べます。 [詳解]
 
bool IsFloat () const noexcept
 格納されている値が単精度浮動小数点型であるかどうかを調べます。 [詳解]
 
bool IsDouble () const noexcept
 格納されている値が倍精度浮動小数点型であるかどうかを調べます。 [詳解]
 
bool IsRaw () const noexcept
 格納されている値がバイト列(文字列)であるかどうかを調べます。 [詳解]
 
bool IsArray () const noexcept
 格納されている値が配列であるかどうかを調べます。 [詳解]
 
bool IsMap () const noexcept
 格納されている値が連想配列であるかどうかを調べます。 [詳解]
 

詳解

MessagePack又はJSONを読み込むことで作成されるオブジェクトです。

説明
Boxメソッドによるボックス化、又はJSONやMessagePackのデータを読み込んで作成される動的型つきオブジェクトです。 静的型オブジェクトへの変換はUnboxメソッドを用いて行います。 デフォルトでBox化とUnbox化に対応している型は、各種数値型, 配列, 文字列, bool, nil, std::pair, std::vector, std::map, std::stringです。 C++11においては、std::array, std::unordered_map, std::tupleにも対応します。
ユーザー定義型をBox化する場合は、次の2つの関数テンプレートを特殊化する必要があります。
例えば以下のような形になります。エラーが発生した場合は0以外を返す必要があります。
struct UserType {
....
};
template<> errno_t Box(MpObject* obj, const UserType& v) {
// いろいろな方法でUserTypeをMpObjectにマップすることができます。
// - 単純に値のみを順番に書きこむ
// - 連想配列として変数名と値をペアにして書きこむ
// - バージョン番号等のメタ情報を含めて書きこむ
// - etc.
// Unboxで読み出す場合のことを意識して実装する必要があります。
....
}
template<> errno_t Unbox(const MpObject* obj, UserType* v) {
....
}
errno_t型を返す関数は、0以外には以下の値を返す可能性があります。
  • EINVAL: 引数が不正です
  • ENOMEM: メモリの確保に失敗しました
  • EACCES: 型変換に失敗しました。
  • ERANGE: 配列等のインデックスが範囲外です。
  • EILSEQ: データにエラーがあります。

MpObject.h83 行目に定義があります。

列挙型メンバ詳解

MpObjectに格納されているオブジェクトの型情報です。

説明
GetType()で取得できます。
列挙値
NIL 

nil型を表します。

BOOLEAN 

真偽値型を表します。内部表現はboolです。

UINT64 

非負整数型を表します。内部表現はuint64_tです。

INT64 

整数型を表します。内部表現はint64_tです。

FLOAT 

浮動小数型を表します。内部表現はfloatです。

DOUBLE 

浮動小数型を表します。内部表現はdoubleです。

RAW 

バイト列(文字列)を表します。

ARRAY 

配列を表します。内部ではMpObjectの列として表現されています。

MAP 

連想配列を表します。内部ではMpObjectのペアの列として表現されています。

MpObject.h230 行目に定義があります。

構築子と解体子

template<class T >
nn::nlib::msgpack::MpObject::MpObject ( const T &  x)
inlineexplicit

T型のオブジェクトをボックス化するコンストラクタです。

テンプレート引数
Tボックス化対象の型
引数
[in]xMpObjectへボックス化する値

MpObject.h141 行目に定義があります。

関数詳解

nn::nlib::msgpack::MpObject::AppendArrayItem ( )
noexcept

オブジェクトが配列を格納している場合、要素を末尾に追加します。

戻り値
成功した場合は追加された要素へのポインタ。失敗した場合はNULL
nn::nlib::msgpack::MpObject::AppendMapItem ( )
noexcept

オブジェクトが連想配列を格納している場合、要素を末尾に追加します。

戻り値
成功した場合は追加された要素へのポインタ。失敗した場合はNULL
nn::nlib::msgpack::MpObject::Box ( const char *  str)
noexcept

文字列をボックス化します。

引数
[in]str文字列
戻り値
0ならば成功。それ以外はエラー
説明
文字列はRAW型のデータとして格納されます。
template<uint32_t n>
errno_t nn::nlib::msgpack::MpObject::Box ( const char(&)  str[n])
noexcept

文字列をボックス化します。

テンプレート引数
n配列のサイズ
引数
[in]strヌル終端する文字列
戻り値
0ならば成功。それ以外はエラー
説明
文字列はRAW型のデータとして格納されます。

MpObject.h720 行目に定義があります。

template<class T, uint32_t n>
errno_t nn::nlib::msgpack::MpObject::Box ( const T(&)  vec[n])

配列をボックス化します。

引数
[in]vecボックス化する配列
テンプレート引数
T要素の型
n要素数
戻り値
0ならば成功
説明
Tの型により、ボックス化の動作が異なります。以下の表に動作の違いを示します。
Tの型 説明
char 文字列としてヌル文字までの文字列がMpObject::RAW型にボックス化される。
それ以外 配列としてMpObject::ARRAY型にボックス化される。

MpObject.h729 行目に定義があります。

template<class T >
nn::nlib::msgpack::MpObject::Box ( const T &  v)
inline

オブジェクトをボックス化します。

テンプレート引数
Tボックス化するオブジェクトの型
引数
[in]vボックス化するオブジェクト
戻り値
0ならば成功。それ以外はエラー。
説明
静的型オブジェクトをボックス化して動的型オブジェクトに変換します。 ボックス化の途中で動的にメモリを確保する場合、失敗した場合に0以外を返します。
Tの型により動作は異なります。以下の表に動作の違いを示します。
Tの型 説明
nil MpObject::NIL型として格納されます。この操作でエラーを返すことはありません。
bool MpObject::BOOLEAN型として格納されます。この操作でエラーを返すことはありません。
符号つき整数型 MpObject::INT64型として格納されます。この操作でエラーを返すことはありません。
符号なし整数型 MpObject::UINT64型として格納されます。この操作でエラーを返すことはありません。
float MpObject::FLOAT型として格納されます。この操作でエラーを返すことはありません。
double MpObject::DOUBLE型として格納されます。この操作でエラーを返すことはありません。
std::string MpObject::RAW型として格納されます。
std::vector MpObject::ARRAY型として格納されます。
Nlist MpObject::ARRAY型として格納されます。
std::pair サイズが2のMpObject::ARRAY型として格納されます。
std::map MpObject::MAP型として格納されます。
std::array MpObject::ARRAY型として格納されます。
std::tuple MpObject::ARRAY型として格納されます。
std::unordered_map MpObject::MAP型として格納されます。
なお、配列をボックス化する場合、通常は配列としてボックス化されますが、char型の配列のみは文字列としてボックス化されます。
std::vector<int> intvec;
int a[...];
char str[...];
...
mpObj.Box(1); // 数値の1をボックス化します。
mpObj.Box(intvec); // 配列にBOX化されます。
mpObj.Box(a); // 配列にBOX化されます。
mpObj.Box(str); // 文字列としてBOX化されます。

MpObject.h176 行目に定義があります。

nn::nlib::msgpack::MpObject::Box ( const void *  p,
uint32_t  n 
)
noexcept

バイト列をボックス化します。

引数
[in]pボックス化するバイト列へのポインタ
[in]nバイト列のサイズ
戻り値
0ならば成功。それ以外はエラー。
説明
バイト列をボックス化して動的型オブジェクトに変換します。 ボックス化の際に動的メモリを確保に失敗した場合は0以外の値を返します。 なお、8バイト以下のバイト列の場合は動的にメモリを確保せずに、バイト列を直接格納するのでエラーが発生することはありません。
nn::nlib::msgpack::MpObject::Clone ( )
noexcept

オブジェクトの複製を作成します。

戻り値
複製されたオブジェクトへのポインタ
説明
途中で複製に失敗した場合は、それまでの複製のために確保したメモリを全て解放してNULLを返します。
nn::nlib::msgpack::MpObject::GetArrayItem ( size_t  n)
inlinenoexcept

インデックスを指定して配列内のオブジェクトを取得します。

引数
[in]n配列のインデックス
戻り値
インデックスに対応するオブジェクト(MpObject)へのポインタ
説明
取得に失敗した場合はNULLを返します。

MpObject.h96 行目に定義があります。

nn::nlib::msgpack::MpObject::GetArrayItem ( size_t  n,
MpObject **  obj 
)
noexcept

インデックスを指定して配列内のオブジェクトを取得します。

引数
[in]n配列のインデックス
[out]objオブジェクトのポインタ(MpObject)が格納されるポインタ
戻り値
0ならば成功。それ以外はエラー。
nn::nlib::msgpack::MpObject::GetMapItem ( const char *  str)
noexcept

文字列を指定して連想配列内のオブジェクトを取得します。

引数
[in]str連想配列のキー文字列
戻り値
対応するオブジェクト(MpObjectKv)へのポインタ
説明
連想配列で文字列のキーに対応する値オブジェクトを取得します。 文字列以外がキーとなっている場合には、GetMapItem(size_t n, MpObjectKv** obj)を利用する必要があります。 また、探索は線形に行われます。取得に失敗した場合はNULLを返します。
nn::nlib::msgpack::MpObject::GetMapItem ( const std::string &  str)
noexcept

文字列を指定して連想配列内のオブジェクトを取得します。

引数
[in]str連想配列のキー文字列
戻り値
対応するオブジェクト(MpObjectKv)へのポインタ
説明
連想配列で文字列のキーに対応する値オブジェクトを取得します。 文字列以外がキーとなっている場合には、GetMapItem(size_t n, MpObjectKv** obj)を利用する必要があります。 また、探索は線形に行われます。取得に失敗した場合はNULLを返します。
nn::nlib::msgpack::MpObject::GetMapItem ( size_t  n,
MpObjectKv **  obj 
)
noexcept

インデックスを指定して連想配列内のオブジェクトを取得します。

引数
[in]n連想配列のインデックス
[out]objオブジェクトのポインタ(MpObjectKv)が格納されるポインタ
戻り値
0ならば成功。それ以外はエラー。
nn::nlib::msgpack::MpObject::GetRaw ( )
inline

オブジェクトからバイト列を取得します。

戻り値
バイト列(文字列)へのポインタ
説明
オブジェクトに格納されているデータがバイト列でない場合はNULLを返します。

MpObject.h150 行目に定義があります。

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

配列や連想配列やRawデータ(文字列)の場合にそのサイズを返します。

戻り値
配列や連想配列のサイズ
説明
オブジェクトが配列や連想配列やRawデータ(文字列)でない場合は、戻り値は不定です。 文字列の場合は、原則的にはstrlenの値と一致しますが、文字列の途中にヌル文字が存在する場合は一致しません。

MpObject.h247 行目に定義があります。

nn::nlib::msgpack::MpObject::GetType ( ) const
inlinenoexcept

オブジェクトの型を返します。

戻り値
オブジェクトの型

MpObject.h244 行目に定義があります。

nn::nlib::msgpack::MpObject::InitArray ( uint32_t  n)
noexcept

オブジェクトをn 個の要素を持つ配列として初期化します。

引数
[in]n初期化する配列のサイズ
戻り値
0ならば成功。それ以外はエラー
nn::nlib::msgpack::MpObject::InitMap ( uint32_t  n)
noexcept

オブジェクトをn個の要素を持つ連想配列として初期化します。

引数
[in]n初期化する連想配列のサイズ
戻り値
0ならば成功。それ以外はエラー
nn::nlib::msgpack::MpObject::InitRaw ( uint32_t  n)
noexcept

オブジェクトをn バイトの領域として初期化します。

引数
[in]n初期化するバイトデータ列(文字列)のサイズ
戻り値
0ならば成功。それ以外はエラー
説明
文字列の場合は終端のヌル文字を含まないバイト数を指定します。
nn::nlib::msgpack::MpObject::InitRaw ( const void *  p,
uint32_t  n 
)
noexcept

オブジェクトをn バイトの領域としてp からコピーして初期化します。

引数
[in]p初期化するデータの領域
[in]n初期化するバイトデータ列(文字列)のサイズ
戻り値
0ならば成功。それ以外はエラー
nn::nlib::msgpack::MpObject::IsArray ( ) const
inlinenoexcept

格納されている値が配列であるかどうかを調べます。

戻り値
配列ならばtrue

MpObject.h259 行目に定義があります。

nn::nlib::msgpack::MpObject::IsBoolean ( ) const
inlinenoexcept

格納されている値が真偽値であるかどうかを調べます。

戻り値
真偽値ならばtrue

MpObject.h251 行目に定義があります。

nn::nlib::msgpack::MpObject::IsDouble ( ) const
inlinenoexcept

格納されている値が倍精度浮動小数点型であるかどうかを調べます。

戻り値
倍精度浮動小数点型ならばtrue

MpObject.h257 行目に定義があります。

nn::nlib::msgpack::MpObject::IsFloat ( ) const
inlinenoexcept

格納されている値が単精度浮動小数点型であるかどうかを調べます。

戻り値
単精度浮動小数点型ならばtrue

MpObject.h256 行目に定義があります。

nn::nlib::msgpack::MpObject::IsInteger ( ) const
inlinenoexcept

格納されている値が整数値であるかどうかを調べます。

戻り値
整数値ならばtrue

MpObject.h252 行目に定義があります。

nn::nlib::msgpack::MpObject::IsMap ( ) const
inlinenoexcept

格納されている値が連想配列であるかどうかを調べます。

戻り値
連想配列ならばtrue

MpObject.h260 行目に定義があります。

nn::nlib::msgpack::MpObject::IsNil ( ) const
inlinenoexcept

格納されている値ががnilであるかどうかを調べます。

戻り値
nilならばtrue

MpObject.h250 行目に定義があります。

nn::nlib::msgpack::MpObject::IsRaw ( ) const
inlinenoexcept

格納されている値がバイト列(文字列)であるかどうかを調べます。

戻り値
バイト列(文字列)ならばtrue

MpObject.h258 行目に定義があります。

template<class T >
nn::nlib::msgpack::MpObject::operator= ( const T &  x)
inline

値をMpObjectに代入します。

テンプレート引数
T代入するオブジェクトの型
引数
[in]x代入する値
戻り値
*thisの参照を返します。
説明
代入できる型は、ボックス化の際にエラーが発生することのない型(値型)に限られています。 それ以外の型の場合はボックス化,又はスワップを利用する必要があります。
mpObj = 1; // mpObj.box(1)と同じ
mpObj = 1.2f; // mpObj.box(1.2f)と同じ
mpObj = "abc"; // error: このように書くことはできない。

MpObject.h213 行目に定義があります。

nn::nlib::msgpack::MpObject::operator[] ( size_t  n)
inline

配列である場合に配列の要素への参照を返します。

引数
[in]n配列のインデックス
戻り値
配列の要素となるMpObjectへの参照
説明
配列でない場合やインデックスが配列の範囲外である場合の動作は不定です。

MpObject.h104 行目に定義があります。

nn::nlib::msgpack::MpObject::Resize ( uint32_t  n)

配列や連想配列やRawデータ(文字列)のリサイズをします。

引数
[in]nリサイズ後のサイズ
戻り値
0ならば成功。0以外の場合はエラー
説明
// mpObjに別途作成したobjを設定したい場合
mpObj.swap(obj); // スワップなのでobjにはmpObjの内容が入る
nn::nlib::msgpack::MpObject::swap ( MpObject rhs)
inlinenoexcept

オブジェクトの中身をスワップします。

引数
[in,out]rhsスワップするオブジェクト
説明
MpObjectにはコピーコンストラクタ及び代入演算子が定義されていないので、オブジェクトを設定するにはswapを用いる必要があります。

MpObject.h219 行目に定義があります。

nn::nlib::msgpack::MpObject::SwapArrayItem ( size_t  n,
MpObject obj 
)
inlinenoexcept

obj の内容と配列内のオブジェクトの内容を交換します。

引数
[in]n配列のインデックス
[in,out]objスワップするオブジェクトへのポインタ
戻り値
配列内のオブジェクトへのポインタ
説明
MpObjectにはコピーコンストラクタ及び代入演算子が定義されていないので、オブジェクトを設定するにはswapを用いる必要があります。 戻り値は配列内のオブジェクトへのポインタです(つまり元のobj の中身が入っている)。 対応する配列の要素が存在しない場合はNULLを返します。

MpObject.h114 行目に定義があります。

nn::nlib::msgpack::MpObject::SwapMapItem ( const std::string &  key,
MpObject obj 
)
inlinenoexcept

obj の内容と連想配列内のオブジェクトの内容を交換します。

引数
[in]keyキー文字列
[in,out]objスワップするオブジェクトへのポインタ
戻り値
連想配列内のオブジェクトへのポインタ
説明
MpObjectにはコピーコンストラクタ及び代入演算子が定義されていないので、オブジェクトを設定するにはswapを用いる必要があります。 戻り値は連想配列内のオブジェクトへのポインタです(つまり元のobj の中身が入っている)。 対応する連想配列の要素が存在しない場合はNULLを返します。

MpObject.h119 行目に定義があります。

nn::nlib::msgpack::MpObject::SwapMapItem ( const char *  key,
MpObject obj 
)
inlinenoexcept

obj の内容と連想配列内のオブジェクトの内容を交換します。

引数
[in]keyキー文字列
[in,out]objスワップするオブジェクトへのポインタ
戻り値
連想配列内のオブジェクトへのポインタ
説明
MpObjectにはコピーコンストラクタ及び代入演算子が定義されていないので、オブジェクトを設定するにはswapを用いる必要があります。 戻り値は連想配列内のオブジェクトへのポインタです(つまり元のobj の中身が入っている)。 対応する連想配列の要素が存在しない場合はNULLを返します。

MpObject.h125 行目に定義があります。

template<class T , size_t n>
nn::nlib::msgpack::MpObject::Unbox ( T(&)  a[n]) const
inline

オブジェクトの値をアンボックス化します。

引数
[out]aアンボックスされたデータが格納される配列
テンプレート引数
Tアンボックス後のオブジェクトの型
n配列の要素数
戻り値
0ならば成功。
説明
Tの型により、アンボックス化の動作が異なります。以下の表に動作の違いを示します。
Tの型 説明
char MpObject::RAW型のオブジェクトが文字列にアンボックス化される。末尾のヌル文字を格納する容量が必要です。
それ以外 配列としてMpObject::ARRAY型にボックス化される。
以下がコード例になります。
// バイトデータ列のアンボックス化
unsigned char data[N];
MpObject mpobj;
....
mpobj.Unbox(&data[0], N);

MpObject.h183 行目に定義があります。

template<class T>
errno_t nn::nlib::msgpack::MpObject::Unbox ( T *  a,
size_t  n 
) const

配列データをアンボックス化します。

テンプレート引数
Tアンボックスされた配列データを書きこむオブジェクト(へのポインタ)の型
引数
[out]aアンボックスされたデータを書きこむオブジェクト(へのポインタ)
[in]n要素数
戻り値
0ならば成功。型が違ったりオーバーフローが発生した場合はそれ以外。
説明
Tの型 説明
void バイト列データとしてアンボックス化します。
char 文字列データとしてアンボックス化します。ヌル文字が追加されるのでヌル終端するだけの容量が必要です。
その他 オブジェクトの配列としてアンボックス化します。

MpObject.h757 行目に定義があります。

template<class T >
nn::nlib::msgpack::MpObject::Unbox ( v) const
inline

オブジェクトをアンボックス化します。

テンプレート引数
Tアンボックスされたデータを書きこむオブジェクト(へのポインタ)の型
引数
[out]vアンボックスされたデータを書きこむオブジェクト(へのポインタ)
戻り値
0ならば成功。それ以外はエラー。
説明
動的型オブジェクトをアンボックス化して静的型オブジェクトに変換します。 アンボックス化に失敗した場合は0以外の値を返します。
Tの型により動作は異なります。下記の表に動作の違いを示します。
Tの型 説明
bool* MpObject::BOOLEAN型ならばbool値が格納されます。
整数型へのポインタ MpObject::INT64又はMpObject::UINT64型ならば整数値が格納されます。オーバーフローはチェックされません。
float*, double* MpObject::FLOAT又はMpObject::DOUBLE型ならばfloat値が格納されます。オーバーフローはチェックされません。
std::string* MpObject::RAW型ならばstringオブジェクトが設定されます。文字列のassign()時に例外が発生した場合はENOMEMを返します。
std::vector* MpObject::ARRAY型ならばvectorオブジェクトが設定されます。ベクタのresize()時に例外が発生した場合はENOMEMを返します。
Nlist* MpObject::ARRAY型ならば Nlistオブジェクトが設定されます。メモリが足りない場合はENOMEMを返します。
std::pair* サイズが2のMpObject::ARRAY型ならばpairオブジェクトが設定されます。
std::map* MpObject::MAP型ならばmapオブジェクトが設定されます。mapの要素の追加時に例外が発生した場合は、ENOMEMを返します。
std::array* MpObject::ARRAY型ならばarrayオブジェクトが設定されます。
std::tuple* MpObject::ARRAY型ならばtupleオブジェクトが設定されます。
std::unordered_map* MpObject::MAP型ならば unordered_mapオブジェクトが設定されます。unordered_mapの要素の追加時に例外が発生した場合は、ENOMEMを返します。
いずれも型に変換不能な場合は、EACCESSを返します。 また、配列等のアンボックス化に失敗した場合、途中までの変換結果が格納されています。 ユーザー定義型へのアンボックス化については、その型のアンボックス関数の仕様に従います。
配列にアンボックス化する場合、通常は配列型のデータをアンボックス化しますが、char型の配列のみは文字列としてアンボックス化されます。
// 整数のアンボックス化
int intval;
MpObject mpobj = 1;
mpobj.Unbox(&intval); // intval == 1
// 配列のベクタへのアンボックス化
vector<int> vec;
MpObject mpobj;
JsonReader::Read(&mpobj, "[1, 2, 3, 4, 5]");
mpobj.Unbox(&vec); // std::vectorに格納される

MpObject.h201 行目に定義があります。


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