|
template<class T > |
bool | operator== (const nil &lhs, const T &rhs) noexcept |
| rhs はnil 以外のオブジェクトでfalse を返します。
|
|
template<class T > |
bool | operator== (const T &lhs, const nil &rhs) noexcept |
| lhs はnil 以外のオブジェクトでfalse を返します。
|
|
bool | operator== (const nil &lhs, const nil &rhs) noexcept |
| true を返します。
|
|
template<class T > |
bool | operator!= (const nil &rhs, const T &lhs) noexcept |
| rhs はnil 以外のオブジェクトでtrue を返します。
|
|
template<class T > |
bool | operator!= (const T &rhs, const nil &lhs) noexcept |
| lhs はnil 以外のオブジェクトでtrue を返します。
|
|
bool | operator!= (const nil &rhs, const nil &lhs) noexcept |
| false を返します。
|
|
bool | operator== (const MpObjectKv &lhs, const MpObjectKv &rhs) noexcept |
| 再帰的に比較して、lhs とrhs が等価な場合はtrue を返します。
|
|
bool | operator!= (const MpObject &lhs, const MpObject &rhs) noexcept |
| 再帰的に比較して、lhs とrhs が等価な場合はfalse を返します。
|
|
bool | operator!= (const MpObjectKv &lhs, const MpObjectKv &rhs) noexcept |
| 再帰的に比較して、lhs とrhs が等価な場合はfalse を返します。
|
|
template<class T1 , class T2 > |
bool | MpRead (MpReader *r, std::pair< T1, T2 > *v) |
| データをpair に読み込みます。
|
|
template<class T , class Alloc > |
bool | MpRead (MpReader *r, std::vector< T, Alloc > *v) |
| データをvector に読み込みます。
|
|
template<class T , class Alloc > |
bool | MpRead (MpReader *r, Nlist< T, Alloc > *v) |
| データをNlist に読み込みます。
|
|
template<class K , class V , class Pr , class Alloc > |
bool | MpRead (MpReader *r, std::map< K, V, Pr, Alloc > *m) |
| データをmap に読み込みます。
|
|
template<class T1 , class T2 > |
uint32_t uint64_t nlib_ulong_compatible_t bool | MpWrite (MpWriter *w, const std::pair< T1, T2 > &v) |
| v の内容をMpWriter 経由で書き込みます。
|
|
bool | MpWrite (MpWriter *w, const char *str) |
| str をMpWriter 経由で書き込みます。
|
|
template<class T , class Alloc > |
bool | MpWrite (MpWriter *w, const std::vector< T, Alloc > &vec) |
| vec をMpWriter 経由で書き込みます。
|
|
template<class T , class Alloc > |
bool | MpWrite (MpWriter *w, const Nlist< T, Alloc > &vec) |
| vec をMpWriter 経由で書き込みます。
|
|
template<class K , class V , class Pr , class Alloc > |
bool | MpWrite (MpWriter *w, const std::map< K, V, Pr, Alloc > &m) |
| m をMpWriter 経由で書き込みます。
|
|
|
|
template<class T > |
errno_t | Box (MpObject *obj, const T &v) |
| この関数テンプレートを特殊化してユーザー型のボックス化を定義することが可能です。 [詳解]
|
|
template<class T > |
errno_t | Unbox (const MpObject *obj, T *v) |
| この関数テンプレートを特殊化してユーザー型のアンボックス化を定義することが可能です。 [詳解]
|
|
bool | operator== (const MpObject &lhs, const MpObject &rhs) |
| 2つのMpObject を再帰的に比較します。等価であればtrue を返します。 [詳解]
|
|
|
|
template<class T > |
bool | MpRead (MpReader *obj, T *v) |
| この関数テンプレートを特殊化してMessagePackのユーザー型へのデシリアライズを定義することが可能です。 [詳解]
|
|
|
|
template<class T > |
bool | MpWrite (MpWriter *obj, const T &v) |
| この関数テンプレートを特殊化してユーザー型のMessagePackへのシリアライズを定義することが可能です。 [詳解]
|
|
MessagePackのシリアライザ及びJSONパーサー/ライター, CSVパーサーが実装されています。
MessagePackについて
- MessagePack(http://msgpack.org/)は、バイナリベースのオブジェクトシリアライズのためのフォーマットの1つです。 MessagePackを使うとデータを高速・省サイズかつ柔軟にやりとりすることが可能です。 データ形式はJSONをバイナリに変換したようなフォーマットになっているので、JSONを利用する処理を高速なものに置き換えたい場合にも利用されることが多いようです。 また、MessagePackはJSONと同様にPerl, Python, Ruby等の環境でも読み書きできるので、データを異なる環境の異なる言語とやりとりする用途に使うことが可能です。
本ライブラリについて
nn::nlib::msgpack
では、このMessagePackに対応したシリアライザとデシリアライザ、及びJSONのパーサーとジェネレータを実装しています。 MessagePackのデータもJSONのデータも読み込んだ後は同じデータ形式に変換されるので、JSONで読み込んでMessagePackで保管、又はその逆、といった作業を簡単に行うことが可能です。
JSONパーサーのRFC 4627への適合性について
- JSONについてはRFC 4627(https://tools.ietf.org/html/rfc4627.html)に定義が記述されていますが、このライブラリのJSONパーサーのRFCへの適合性について説明いたします。
- エンコーディングについて
- RFC 4627ではUTF-8, UTF-16, UTF-32を解釈するように求められていますが、
msgpack
ライブラリはUTF-8のみを解釈します。
- ヌル文字を含む文字列について
- ヌル文字を含む文字列、例えば"A\u0000Z"はパースエラーになりません。 これはRFC通りなのですが、この例をC文字列として解釈しようとすると"A"として解釈されます。
- 数値について
- JSONには実数と整数の区別がありませんが、読み取り時には、符号なし整数(
uint64_t
)、符号つき整数(int64_t
)、浮動小数(double
)、の優先順で解釈を試みます。 ただし、符号を除いて19桁以上の整数は浮動小数型として読み取ります。 実際の数値の読み取りはnn::nlib::StrTo()
関数を利用して実装されています。
- なお、一般にJSONで大きな数値を扱う際にはJSONの処理系によって挙動が異なる場合があるので、数値としてより文字列として扱うことをお勧めいたします。
参考資料
- 以下に参考資料へのリンクを掲載いたします。
- RFC等
-