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

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

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

公開型

enum  ObjectType {
  kNil = 0,
  kBoolean,
  kUint64,
  kInt64,
  kFloat,
  kDouble,
  kString,
  kArray,
  kMap
}
 MpObjectに格納されているオブジェクトの型情報です。 [詳解]
 

公開メンバ関数

errno_t Resize (uint32_t n)
 配列や連想配列や文字列やバイナリのリサイズをします。 [詳解]
 
MpObjectClone () const noexcept
 オブジェクトの複製を作成します。 [詳解]
 
uint32_t GetSize () const noexcept
 配列や連想配列や文字列やバイナリの場合にそのサイズを返します。 [詳解]
 
配列型(kArray型)の利用
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 の内容と配列内のオブジェクトの内容を交換します。 [詳解]
 
MpObjectAppendArrayItem () noexcept
 オブジェクトが配列を格納している場合、要素を末尾に追加します。 [詳解]
 
MpObjectInsertArrayItem (size_t n) noexcept
 オブジェクトが配列を格納している場合、要素を指定されたインデックスの場所に挿入します。 [詳解]
 
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 RemoveArrayItem (size_t n, MpObject *obj) noexcept
 インデックスを指定して配列内のオブジェクトを削除します。 [詳解]
 
errno_t InitArray (uint32_t n) noexcept
 オブジェクトをn 個の要素を持つ配列として初期化します。 [詳解]
 
連想配列型(kMap型)の利用
const MpObjectGetMapItem (const nlib_utf8_t *str) const noexcept
 GetMapItem(const nlib_utf8_t* str) と同様です。
 
MpObjectGetMapItem (const nlib_utf8_t *str) noexcept
 文字列を指定して連想配列内のオブジェクトを取得します。 [詳解]
 
template<class STDSTRING >
const MpObjectGetMapItem (const STDSTRING &str) const noexcept
 GetMapItem(const STDSTRING& str) と同様です。
 
template<class STDSTRING >
MpObjectGetMapItem (const STDSTRING &str) noexcept
 文字列を指定して連想配列内のオブジェクトを取得します。 [詳解]
 
template<class STDSTRING >
MpObjectSwapMapItem (const STDSTRING &key, MpObject *obj) noexcept
 obj の内容と連想配列内のオブジェクトの内容を交換します。 [詳解]
 
MpObjectSwapMapItem (const nlib_utf8_t *key, MpObject *obj) noexcept
 obj の内容と連想配列内のオブジェクトの内容を交換します。 [詳解]
 
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 GetMapItem (const nlib_utf8_t *str, size_t n, MpObjectKv **obj) noexcept
 キーとなる非ヌル終端の文字列を指定して連想配列のキーと値のペアを取得します。 [詳解]
 
errno_t RemoveMapItem (size_t n, MpObjectKv *kv) noexcept
 インデックスを指定して連想配列内のキーとオブジェクトを削除します。 [詳解]
 
errno_t RemoveMapItem (const nlib_utf8_t *key, MpObjectKv *kv) noexcept
 キーを指定して連想配列内のキーとオブジェクトを削除します。 [詳解]
 
template<class STDSTRING >
errno_t RemoveMapItem (const STDSTRING &str, MpObjectKv *kv) noexcept
 キーを指定して連想配列内のキーとオブジェクトを削除します。 [詳解]
 
errno_t InitMap (uint32_t n) noexcept
 オブジェクトをn個の要素を持つ連想配列として初期化します。 [詳解]
 
基本的なメンバ関数
 MpObject () noexcept
 デフォルトコンストラクタです。nil型に設定されます。
 
 ~MpObject () noexcept
 デストラクタです。
 
 MpObject (MpObject &&rhs) noexcept
 ムーブコンストラクタです。C++11の利用時に有効です。
 
MpObjectoperator= (MpObject &&rhs) noexcept
 ムーブ代入演算子です。C++11の利用時に有効です。
 
 MpObject (MpObject &rhs, move_tag) noexcept
 ムーブコンストラクタに相当します。
 
MpObjectassign (MpObject &rhs, move_tag) noexcept
 swapを利用したムーブにより代入します。
 
void swap (MpObject &rhs) noexcept
 オブジェクトの中身をスワップします。 [詳解]
 
template<class T >
 MpObject (const T &x)
 T型のオブジェクトをボックス化するコンストラクタです。 [詳解]
 
文字列型(STRING型)の利用
nlib_utf8_tGetString () noexcept
 オブジェクトから文字列を取得します。
 
const nlib_utf8_tGetString () const noexcept
 オブジェクトから文字列を取得します。
 
errno_t InitString (uint32_t n) noexcept
 オブジェクトを文字列として初期化します。 [詳解]
 
errno_t InitString (const nlib_utf8_t *str, uint32_t n) noexcept
 オブジェクトを文字列として初期化します。 [詳解]
 
errno_t InitString (const nlib_utf8_t *str) noexcept
 オブジェクトを文字列として初期化します。 [詳解]
 
バイナリ型(BINARY型)の利用
void * GetBinary (uint32_t *n) noexcept
 オブジェクトからバイナリを取得します。
 
const void * GetBinary (uint32_t *n) const noexcept
 オブジェクトからバイナリを取得します。
 
errno_t InitBinary (uint32_t n) noexcept
 オブジェクトをバイナリとして初期化します。 [詳解]
 
errno_t InitBinary (const void *p, uint32_t n) noexcept
 オブジェクトをバイナリとして初期化します。 [詳解]
 
拡張データ型(<tt>kExt</tt>
void * GetExt (int8_t *tp, uint32_t *n) noexcept
 オブジェクトから拡張データ型を取得します。 [詳解]
 
const void * GetExt (int8_t *tp, uint32_t *n) const noexcept
 オブジェクトから拡張データ型を取得します。
 
std::pair< errno_t, nlib_timeGetTimestamp () const noexcept
 オブジェクトからタイムスタンプを取得します。 [詳解]
 
errno_t InitExt (int8_t tp, uint32_t n) noexcept
 オブジェクトを拡張データ型として初期化します。 [詳解]
 
errno_t InitExt (int8_t tp, const void *p, uint32_t n) noexcept
 オブジェクトを拡張データ型として初期化します。 [詳解]
 
errno_t InitTimestamp (nlib_time t) noexcept
 オブジェクトを拡張データ型のタイムスタンプとして初期化します。 [詳解]
 
ボックス化

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

errno_t Box (const nlib_utf8_t *str) noexcept
 文字列をボックス化します。 [詳解]
 
template<uint32_t n>
errno_t Box (const nlib_utf8_t(&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)
 オブジェクトをボックス化します。 [詳解]
 
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 (nlib_utf8_t(&str)[n]) const noexcept
 Unbox(T (&a)[n]) を御覧ください。
 
template<class T >
errno_t Unbox (T *a, size_t n) const
 配列データをアンボックス化します。 [詳解]
 
errno_t Unbox (nlib_utf8_t *str, 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 IsString () const noexcept
 格納されている値が文字列であるかどうかを調べます。
 
bool IsBinary () const noexcept
 格納されている値がバイナリであるかどうかを調べます。
 
bool IsExt () const noexcept
 格納されている値が拡張データであるかどうかを調べます。
 
bool IsArray () const noexcept
 格納されている値が配列であるかどうかを調べます。
 
bool IsMap () const noexcept
 格納されている値が連想配列であるかどうかを調べます。
 

静的公開メンバ関数

static bool IsJsonPointer (const nlib_utf8_t *first, const nlib_utf8_t *last) noexcept
 文字列を指定してJSON Pointerであるかどうかを判定します。 [詳解]
 
static bool IsJsonPointer (const nlib_utf8_t *str) noexcept
 IsJsonPointer(str, str + nlib_strlen(str))と等価です。
 
static errno_t ResolveJsonPointer (MpObject **result, MpObject *root, const nlib_utf8_t *json_pointer) noexcept
 json_pointerによって参照されるMpObject*resultに格納します。 [詳解]
 
static errno_t DigByJsonPointer (MpObject **result, MpObject *root, const nlib_utf8_t *json_pointer) noexcept
 json_pointerによってMpObjectを参照しますが、新たにMpObjectを追加する場合があります。 [詳解]
 
static errno_t RemoveByJsonPointer (MpObjectKv *removed, MpObject *root, const nlib_utf8_t *json_pointer) noexcept
 json_pointerによって参照されるMpObjectを削除してremovedに格納します。 [詳解]
 

詳解

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.h95 行目に定義があります。

列挙型メンバ詳解

◆ ObjectType

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

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

nil型を表します。

kBoolean 

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

kUint64 

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

kInt64 

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

kFloat 

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

kDouble 

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

kString 

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

kArray 

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

kMap 

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

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

構築子と解体子

◆ MpObject()

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

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

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

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

関数詳解

◆ AppendArrayItem()

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

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

戻り値
成功した場合は追加された要素へのポインタ。失敗した場合はNULL

◆ AppendMapItem()

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

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

戻り値
成功した場合は追加された要素へのポインタ。失敗した場合はNULL

◆ Box() [1/4]

nn::nlib::msgpack::MpObject::Box ( const nlib_utf8_t str)
noexcept

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

引数
[in]str文字列
戻り値
0ならば成功。それ以外はエラー
説明
文字列はkString型のデータとして格納されます。

◆ Box() [2/4]

template<uint32_t n>
errno_t nn::nlib::msgpack::MpObject::Box ( const nlib_utf8_t(&)  str[n])
noexcept

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

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

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

◆ Box() [3/4]

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

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

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

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

◆ Box() [4/4]

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

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

テンプレート引数
Tボックス化するオブジェクトの型
引数
[in]vボックス化するオブジェクト
戻り値
0ならば成功。それ以外はエラー。
説明
静的型オブジェクトをボックス化して動的型オブジェクトに変換します。 ボックス化の途中で動的にメモリを確保する場合、失敗した場合に0以外を返します。
Tの型により動作は異なります。以下の表に動作の違いを示します。
Tの型 説明
nil MpObject::kNil型として格納されます。この操作でエラーを返すことはありません。
bool MpObject::kBoolean型として格納されます。この操作でエラーを返すことはありません。
符号つき整数型 MpObject::kInt64型として格納されます。この操作でエラーを返すことはありません。
符号なし整数型 MpObject::kUint64型として格納されます。この操作でエラーを返すことはありません。
float MpObject::kFloat型として格納されます。この操作でエラーを返すことはありません。
double MpObject::kDouble型として格納されます。この操作でエラーを返すことはありません。
std::string MpObject::kString型として格納されます。
std::vector MpObject::kArray型として格納されます。
Nlist MpObject::kArray型として格納されます。
std::pair サイズが2のMpObject::kArray型として格納されます。
std::map MpObject::kMap型として格納されます。
std::array MpObject::kArray型として格納されます。
std::tuple MpObject::kArray型として格納されます。
std::unordered_map MpObject::kMap型として格納されます。
なお、配列をボックス化する場合、通常は配列としてボックス化されますが、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.h329 行目に定義があります。

◆ Clone()

nn::nlib::msgpack::MpObject::Clone ( ) const
noexcept

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

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

◆ DigByJsonPointer()

nn::nlib::msgpack::MpObject::DigByJsonPointer ( MpObject **  result,
MpObject root,
const nlib_utf8_t json_pointer 
)
staticnoexcept

json_pointerによってMpObjectを参照しますが、新たにMpObjectを追加する場合があります。

引数
[in,out]resultjson_pointerによって参照されたオブジェクト
[in]rootjson_pointerによる参照の起点となる根元のオブジェクト
[in]json_pointerJSON Pointerの文字列
戻り値
0json_pointerの最後の参照トークンが辿れず、辿れるように新たにMpObjectが作成された場合
EEXIST既にjson_pointerが指し示すMpObjectが存在する場合
EINVALresult, root, 又はjson_pointerNULLの場合
EILSEQjson_pointerの文法が間違っていた場合
ENOENTjson_pointer内の最後でない参照トークンを辿ることができなかった場合
ENOMEMメモリの確保に失敗した場合
説明
JSON Pointer(RFC6901)によって規定された文字列によりJSONのツリー構造をたどりMpObjectを取得します。 ただし、json_pointerの末端に対応するMpObjectが存在しない場合は新たにMpObjectが作成されます。 戻り値が0かEEXISTの場合は*resultjson_pointerを辿った先のMpObjectへのポインタが設定されます。
以下の点に注意してください。
  • json_pointerの末端の参照トークンによって配列が参照される場合、MpObjectが配列に挿入されること
  • json_pointerの末端以外の参照トークンを辿れなかった場合はENOENTエラーになること。 つまり、以下に示す2つのJSONに対して操作を行うとして、json_pointerに"/a/b"を指定した場合、1番目のJSONに対しては操作が成功し、2番目のJSONに対してはエラーになるということ
    { "a": { "foo": 1 } }
    { "q": { "bar": 2 } }
この関数はJSON Patch(RFC6902)のadd演算のうち、値の設定以外の動作を行います。 詳細はRFCをご覧ください。
参照
https://tools.ietf.org/html/rfc6901
https://tools.ietf.org/html/rfc6902
https://triple-underscore.github.io/RFC6901-ja.html
https://triple-underscore.github.io/RFC6902-ja.html

◆ GetArrayItem() [1/2]

nn::nlib::msgpack::MpObject::GetArrayItem ( size_t  n)
inlinenoexcept

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

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

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

◆ GetArrayItem() [2/2]

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

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

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

◆ GetExt()

nn::nlib::msgpack::MpObject::GetExt ( int8_t *  tp,
uint32_t *  n 
)
inlinenoexcept

オブジェクトから拡張データ型を取得します。

引数
[out]tpデータ型を示す整数
[out]nバイナリのサイズ
戻り値
拡張データ型のバイナリへのポインタ

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

◆ GetMapItem() [1/4]

nn::nlib::msgpack::MpObject::GetMapItem ( const nlib_utf8_t str)
noexcept

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

引数
[in]str連想配列のキー文字列
戻り値
対応するオブジェクト(MpObject)へのポインタ
説明
連想配列で文字列のキーに対応する値オブジェクトを取得します。 探索は線形に行われ、取得に失敗した場合はNULLを返します。

◆ GetMapItem() [2/4]

template<class STDSTRING >
nn::nlib::msgpack::MpObject::GetMapItem ( const STDSTRING &  str)
inlinenoexcept

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

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

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

◆ GetMapItem() [3/4]

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

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

引数
[in]n連想配列のインデックス
[out]obj連想配列のキーと値のペア(MpObjectKv*)が格納されるポインタ
戻り値
0ならば成功。それ以外はエラー。

◆ GetMapItem() [4/4]

nn::nlib::msgpack::MpObject::GetMapItem ( const nlib_utf8_t str,
size_t  n,
MpObjectKv **  obj 
)
inlinenoexcept

キーとなる非ヌル終端の文字列を指定して連想配列のキーと値のペアを取得します。

引数
[in]str連想配列のキー文字列
[in]n文字列の長さ
[out]obj連想配列のキーと値のペア(MpObjectKv*)が格納されるポインタ
戻り値
0成功した場合
EINVALstr又はobjNULLだった場合
EACCESこのオブジェクトが連想配列でなかった場合
ENOENT与えられたキー文字列に対応する値が見つからなかった場合

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

◆ GetSize()

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

配列や連想配列や文字列やバイナリの場合にそのサイズを返します。

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

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

◆ GetTimestamp()

nn::nlib::msgpack::MpObject::GetTimestamp ( ) const
noexcept

オブジェクトからタイムスタンプを取得します。

戻り値
エラー値とタイムスタンプのペア。エラー値が0ならば成功。
参照
https://github.com/msgpack/msgpack/blob/master/spec.md#formats-timestamp

◆ GetType()

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

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

戻り値
オブジェクトの型

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

◆ InitArray()

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

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

引数
[in]n初期化する配列のサイズ
戻り値
0ならば成功。それ以外はエラー

◆ InitBinary() [1/2]

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

オブジェクトをバイナリとして初期化します。

引数
[in]nバイナリのサイズ
戻り値
0ならば成功。それ以外はエラー

◆ InitBinary() [2/2]

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

オブジェクトをバイナリとして初期化します。

引数
[in]pバイナリへのポインタ
[in]nバイナリのサイズ
戻り値
0ならば成功。それ以外はエラー

◆ InitExt() [1/2]

nn::nlib::msgpack::MpObject::InitExt ( int8_t  tp,
uint32_t  n 
)
noexcept

オブジェクトを拡張データ型として初期化します。

引数
[in]tpデータ型を示す整数
[in]nバイナリのサイズ
戻り値
0ならば成功。それ以外はエラー

◆ InitExt() [2/2]

nn::nlib::msgpack::MpObject::InitExt ( int8_t  tp,
const void *  p,
uint32_t  n 
)
noexcept

オブジェクトを拡張データ型として初期化します。

引数
[in]tpデータ型を示す整数
[in]pバイナリへのポインタ
[in]nバイナリのサイズ
戻り値
0ならば成功。それ以外はエラー

◆ InitMap()

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

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

引数
[in]n初期化する連想配列のサイズ
戻り値
0ならば成功。それ以外はエラー

◆ InitString() [1/3]

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

オブジェクトを文字列として初期化します。

引数
[in]n初期化する文字列の(終端文字を含まない)長さ
戻り値
0ならば成功。それ以外はエラー

◆ InitString() [2/3]

nn::nlib::msgpack::MpObject::InitString ( const nlib_utf8_t str,
uint32_t  n 
)
noexcept

オブジェクトを文字列として初期化します。

引数
[in]str文字列
[in]n初期化する文字列の(終端文字を含まない)長さ
戻り値
0ならば成功。それ以外はエラー

◆ InitString() [3/3]

nn::nlib::msgpack::MpObject::InitString ( const nlib_utf8_t str)
inlinenoexcept

オブジェクトを文字列として初期化します。

引数
[in]str文字列
戻り値
0ならば成功。それ以外はエラー

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

◆ InitTimestamp()

nn::nlib::msgpack::MpObject::InitTimestamp ( nlib_time  t)
noexcept

オブジェクトを拡張データ型のタイムスタンプとして初期化します。

引数
[in]t時刻
戻り値
0ならば成功。それ以外はエラー
参照
https://github.com/msgpack/msgpack/blob/master/spec.md#formats-timestamp

◆ InsertArrayItem()

nn::nlib::msgpack::MpObject::InsertArrayItem ( size_t  n)
noexcept

オブジェクトが配列を格納している場合、要素を指定されたインデックスの場所に挿入します。

引数
[in]n配列のインデックス
戻り値
成功した場合は挿入された要素へのポインタ。失敗した場合はNULL

◆ IsJsonPointer()

nn::nlib::msgpack::MpObject::IsJsonPointer ( const nlib_utf8_t first,
const nlib_utf8_t last 
)
staticnoexcept

文字列を指定してJSON Pointerであるかどうかを判定します。

引数
[in]first検査する文字列の先頭
[in]last検査する文字列の末尾
戻り値
trueなら文字列はJSON Pointer

◆ operator=()

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.h369 行目に定義があります。

◆ operator[]()

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

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

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

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

◆ RemoveArrayItem()

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

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

引数
[in]n配列のインデックス
[in,out]objNULLでない場合は削除されたオブジェクトが格納されます。
戻り値
0ならば成功。それ以外はエラー。

◆ RemoveByJsonPointer()

nn::nlib::msgpack::MpObject::RemoveByJsonPointer ( MpObjectKv removed,
MpObject root,
const nlib_utf8_t json_pointer 
)
staticnoexcept

json_pointerによって参照されるMpObjectを削除してremovedに格納します。

引数
[in,out]removedjson_pointerによって参照されたキーと値のペア
[in]rootjson_pointerによる参照の起点となる根元のオブジェクト
[in]json_pointerJSON Pointerの文字列
戻り値
0成功した場合
ECHILDjson_pointerが空文字列なので、rootが削除された場合
EINVALremoved, root, 又はjson_pointerNULLの場合
EILSEQjson_pointerの文法が間違っていた場合
ENOENTjson_pointerによって参照されるオブジェクトが存在しない場合
説明
JSON Pointer(RFC6901)によって規定された文字列によりJSONのツリー構造をたどりMpObjectを削除します。 削除されたキーと値のペアはremovedに格納されます。 配列の要素が削除される場合には、removed->firstにインデックスがボックス化された状態で格納され、指定されたインデックスより先の要素は1つずつ先頭へずらされることに注意してください。
この関数はJSON Patch(RFC6902)のremove演算を行います。 詳細はRFCを御覧ください。
参照
https://tools.ietf.org/html/rfc6901
https://tools.ietf.org/html/rfc6902
https://triple-underscore.github.io/RFC6901-ja.html
https://triple-underscore.github.io/RFC6902-ja.html

◆ RemoveMapItem() [1/3]

nn::nlib::msgpack::MpObject::RemoveMapItem ( size_t  n,
MpObjectKv kv 
)
noexcept

インデックスを指定して連想配列内のキーとオブジェクトを削除します。

引数
[in]n連想配列のインデックス
[in,out]kvNULLでない場合は削除されたキーと値のペアが格納されます。
戻り値
0ならば成功。それ以外はエラー。

◆ RemoveMapItem() [2/3]

nn::nlib::msgpack::MpObject::RemoveMapItem ( const nlib_utf8_t key,
MpObjectKv kv 
)
noexcept

キーを指定して連想配列内のキーとオブジェクトを削除します。

引数
[in]key連想配列のキー文字列
[in,out]kvNULLでない場合は削除されたキーと値のペアが格納されます。
戻り値
0ならば成功。それ以外はエラー。

◆ RemoveMapItem() [3/3]

template<class STDSTRING >
nn::nlib::msgpack::MpObject::RemoveMapItem ( const STDSTRING &  key,
MpObjectKv kv 
)
inlinenoexcept

キーを指定して連想配列内のキーとオブジェクトを削除します。

テンプレート引数
STDSTRINGstd::stringと互換性のある型
引数
[in]key連想配列のキー文字列
[in,out]kvNULLでない場合は削除されたキーと値のペアが格納されます。
戻り値
0ならば成功。それ以外はエラー。

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

◆ Resize()

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

配列や連想配列や文字列やバイナリのリサイズをします。

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

◆ ResolveJsonPointer()

nn::nlib::msgpack::MpObject::ResolveJsonPointer ( MpObject **  result,
MpObject root,
const nlib_utf8_t json_pointer 
)
staticnoexcept

json_pointerによって参照されるMpObject*resultに格納します。

引数
[in,out]resultjson_pointerによって参照されたオブジェクト
[in]rootjson_pointerによる参照の起点となる根元のオブジェクト
[in]json_pointerJSON Pointerの文字列
戻り値
0成功した場合
EINVALresult, root, 又はjson_pointerNULLの場合
EILSEQjson_pointerの文法が間違っていた場合
ENOENTjson_pointerによって参照されるオブジェクトが存在しない場合
説明
JSON Pointer(RFC6901)によって規定された文字列によりJSONのツリー構造をたどりMpObjectを取得します。 '/'で区切られた文字列は参照トークンと呼ばれ、ファイルパスのような文字列により、JSON内の場所を指定するようになっています。
JSON Pointerは以下のような文字列です。 次のようなJSONが与えられたとき、
{
"foo": ["bar", "baz"],
"": 0,
"a/b": 1,
"c%d": 2,
"e^f": 3,
"g|h": 4,
"i\\j": 5,
"k\"l": 6,
" ": 7,
"m~n": 8
}
以下のコードの各行にJSON Pointerと対応する値を併記します。
"" // the whole document
"/foo" ["bar", "baz"]
"/foo/0" "bar"
"/" 0
"/a~1b" 1
"/c%d" 2
"/e^f" 3
"/g|h" 4
"/i\\j" 5
"/k\"l" 6
"/ " 7
"/m~0n" 8
詳細はRFCを御覧ください。
参照
https://tools.ietf.org/html/rfc6901
https://triple-underscore.github.io/RFC6901-ja.html

◆ swap()

nn::nlib::msgpack::MpObject::swap ( MpObject rhs)
inlinenoexcept

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

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

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

◆ SwapArrayItem()

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

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

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

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

◆ SwapMapItem() [1/2]

template<class STDSTRING >
MpObject * nn::nlib::msgpack::MpObject::SwapMapItem ( const STDSTRING &  key,
MpObject obj 
)
inlinenoexcept

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

テンプレート引数
STDSTRINGstd::stringと互換性のある型
引数
[in]keyキー文字列
[in,out]objスワップするオブジェクトへのポインタ
戻り値
連想配列内のオブジェクトへのポインタ
非推奨:
この関数は将来のリリースにおいて削除されます。直接要素をswapするようにしてください。
説明
MpObjectにはコピーコンストラクタ及び代入演算子が定義されていないので、オブジェクトを設定するにはswapを用いる必要があります。 戻り値は連想配列内のオブジェクトへのポインタです(つまり元のobj の中身が入っている)。 対応する連想配列の要素が存在しない場合はNULLを返します。

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

◆ SwapMapItem() [2/2]

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

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

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

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

◆ Unbox() [1/3]

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

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

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

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

◆ Unbox() [2/3]

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

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

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

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

◆ Unbox() [3/3]

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

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

テンプレート引数
Tアンボックスされたデータを書きこむオブジェクト(へのポインタ)の型
引数
[out]vアンボックスされたデータを書きこむオブジェクト(へのポインタ)
戻り値
0ならば成功。それ以外はエラー。
説明
動的型オブジェクトをアンボックス化して静的型オブジェクトに変換します。 アンボックス化に失敗した場合は0以外の値を返します。
Tの型により動作は異なります。下記の表に動作の違いを示します。
Tの型 説明
bool* MpObject::kBoolean型ならばbool値が格納されます。
整数型へのポインタ MpObject::kInt64又はMpObject::kUint64型ならば整数値が格納されます。オーバーフローはチェックされません。
float*, double* MpObject::kFloat又はMpObject::kDouble型ならばfloat値が格納されます。オーバーフローはチェックされません。
std::string* MpObject::kString型ならばstringオブジェクトが設定されます。文字列のassign()時に例外が発生した場合はENOMEMを返します。
std::vector* MpObject::kArray型ならばvectorオブジェクトが設定されます。ベクタのresize()時に例外が発生した場合はENOMEMを返します。
Nlist* MpObject::kArray型ならば Nlistオブジェクトが設定されます。メモリが足りない場合はENOMEMを返します。
std::pair* サイズが2のMpObject::kArray型ならばpairオブジェクトが設定されます。
std::map* MpObject::kMap型ならばmapオブジェクトが設定されます。mapの要素の追加時に例外が発生した場合は、ENOMEMを返します。
std::array* MpObject::kArray型ならばarrayオブジェクトが設定されます。
std::tuple* MpObject::kArray型ならばtupleオブジェクトが設定されます。
std::unordered_map* MpObject::kMap型ならば unordered_mapオブジェクトが設定されます。unordered_mapの要素の追加時に例外が発生した場合は、ENOMEMを返します。
いずれも型に変換不能な場合は、EACCESSを返します。 また、配列等のアンボックス化に失敗した場合、途中までの変換結果が格納されています。 ユーザー定義型へのアンボックス化については、その型のアンボックス関数の仕様に従います。
配列にアンボックス化する場合、通常は配列型のデータをアンボックス化しますが、nlib_utf8_t型の配列のみは文字列としてアンボックス化されます。
// 整数のアンボックス化
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.h357 行目に定義があります。


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