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

JSON又はmsgpackを出力するためのクラスです。 [詳解]

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

公開メンバ関数

errno_t Open (OutputStream *stream) noexcept
 ストリームを指定してデータの生成を開始します。 [詳解]
 
bool Flush () noexcept
 ストリームにデータを書き出しストリームをフラッシュします。 [詳解]
 
errno_t Close () noexcept
 ジェネレータをクローズして初期化直後の状態に設定します。 [詳解]
 
JsonStreamGeneratorNull () noexcept
 nullを出力します。 [詳解]
 
JsonStreamGeneratorBoolean (bool value) noexcept
 true又はfalseを出力します。 [詳解]
 
JsonStreamGeneratorInt8 (int8_t num) noexcept
 整数値を出力します。 [詳解]
 
JsonStreamGeneratorUint8 (uint8_t num) noexcept
 整数値を出力します。 [詳解]
 
JsonStreamGeneratorInt16 (int16_t num) noexcept
 整数値を出力します。 [詳解]
 
JsonStreamGeneratorUint16 (uint16_t num) noexcept
 整数値を出力します。 [詳解]
 
JsonStreamGeneratorInt32 (int32_t num) noexcept
 整数値を出力します。 [詳解]
 
JsonStreamGeneratorUint32 (uint32_t num) noexcept
 整数値を出力します。 [詳解]
 
JsonStreamGeneratorInt64 (int64_t num) noexcept
 整数値を出力します。 [詳解]
 
JsonStreamGeneratorUint64 (uint64_t num) noexcept
 整数値を出力します。 [詳解]
 
JsonStreamGeneratorFloat (float num) noexcept
 浮動小数点数を出力します。 [詳解]
 
JsonStreamGeneratorDouble (double num) noexcept
 浮動小数点数を出力します。 [詳解]
 
JsonStreamGeneratorString (const nlib_utf8_t *str) noexcept
 文字列を出力します。 [詳解]
 
JsonStreamGeneratorBinary (const void *bin, size_t n) noexcept
 バイナリデータを出力します。現在のところmsgpackの出力のみがサポートされています。 [詳解]
 
JsonStreamGeneratorExt (int8_t tp, const void *bin, size_t n) noexcept
 拡張データを出力します。 [詳解]
 
JsonStreamGeneratorTimestamp (nlib_time t) noexcept
 タイムスタンプを出力します。JSONの場合は文字列として出力されます。 [詳解]
 
JsonStreamGeneratorObject (const MpObject &obj) noexcept
 MpObjectを出力します。 [詳解]
 
コンストラクタ、デストラクタ、及び初期化
constexpr JsonStreamGenerator () noexcept
 デフォルトコンストラクタです。
 
 ~JsonStreamGenerator () noexcept
 デストラクタです。
 
 JsonStreamGenerator (JsonStreamGenerator &&rhs)
 ムーブコンストラクタです。
 
JsonStreamGeneratoroperator= (JsonStreamGenerator &&rhs)
 ムーブ代入演算子です。
 
void Reset () noexcept
 このオブジェクトをデフォルトコンストラクタの実行直後の状態にリセットします。
 
errno_t Init (const JsonStreamGeneratorSettings &settings) noexcept
 動作オプションを指定して初期化を行います。成功した場合は0を返します。 [詳解]
 
errno_t Init () noexcept
 上記関数の引数省略版で、settingsをデフォルト値で渡します。
 
配列の出力
JsonStreamGeneratorStartArray (size_t count) noexcept
 配列の出力を開始します。 [詳解]
 
JsonStreamGeneratorEndArray () noexcept
 配列を終了します。 [詳解]
 
JsonStreamGeneratorEmptyArray () noexcept
 空の配列を出力します。 [詳解]
 
JsonStreamGeneratorInt8Array (const int8_t *p, size_t count) noexcept
 整数値の配列を出力します。 [詳解]
 
JsonStreamGeneratorUint8Array (const uint8_t *p, size_t count) noexcept
 整数値の配列を出力します。 [詳解]
 
JsonStreamGeneratorInt16Array (const int16_t *p, size_t count) noexcept
 整数値の配列を出力します。 [詳解]
 
JsonStreamGeneratorUint16Array (const uint16_t *p, size_t count) noexcept
 整数値の配列を出力します。 [詳解]
 
JsonStreamGeneratorInt32Array (const int32_t *p, size_t count) noexcept
 整数値の配列を出力します。 [詳解]
 
JsonStreamGeneratorUint32Array (const uint32_t *p, size_t count) noexcept
 整数値の配列を出力します。 [詳解]
 
JsonStreamGeneratorInt64Array (const int64_t *p, size_t count) noexcept
 整数値の配列を出力します。 [詳解]
 
JsonStreamGeneratorUint64Array (const uint64_t *p, size_t count) noexcept
 整数値の配列を出力します。 [詳解]
 
JsonStreamGeneratorFloatArray (const float *p, size_t count) noexcept
 単精度浮動小数点数の配列を出力します。 [詳解]
 
JsonStreamGeneratorDoubleArray (const double *p, size_t count) noexcept
 倍精度浮動小数点数の配列を出力します。 [詳解]
 
連想配列の出力
JsonStreamGeneratorStartMap (size_t count) noexcept
 マップの出力を開始します。 [詳解]
 
JsonStreamGeneratorKey (const nlib_utf8_t *key) noexcept
 連想配列のキーを出力します。 [詳解]
 
JsonStreamGeneratorEndMap () noexcept
 マップを終了します。 [詳解]
 
JsonStreamGeneratorEmptyMap () noexcept
 空のマップを出力します。 [詳解]
 
エラーチェック
Error GetError () const noexcept
 エラーを取得します。 [詳解]
 
 operator bool () const
 オブジェクトが初期化済みで内部でエラーが発生していなければtrue、発生していればfalseを返します。
 

静的公開メンバ関数

static errno_t Generate (size_t *written, nlib_utf8_t *str, size_t n, const MpObject &obj, const JsonStreamGeneratorSettings &settings) noexcept
 objの内容をJSON又はmsgpackで出力します。 [詳解]
 
static errno_t Generate (size_t *written, nlib_utf8_t *str, size_t n, const MpObject &obj) noexcept
 上記関数の引数省略版で、settingsをデフォルト値で渡します。
 
template<size_t N>
static errno_t Generate (size_t *written, nlib_utf8_t(&str)[N], const MpObject &obj, const JsonStreamGeneratorSettings &settings) noexcept
 上記関数のテンプレートオーバーロードです。
 
template<size_t N>
static errno_t Generate (size_t *written, nlib_utf8_t(&str)[N], const MpObject &obj) noexcept
 上記関数のテンプレートオーバーロードです。
 
static std::pair< errno_t, size_t > Generate (nlib_utf8_t *str, size_t n, const MpObject &obj, const JsonStreamGeneratorSettings &settings) noexcept
 objの内容をJSON又はmsgpackで出力します。 [詳解]
 
template<size_t N>
static std::pair< errno_t, size_t > Generate (nlib_utf8_t(&str)[N], const MpObject &obj, const JsonStreamGeneratorSettings &settings) noexcept
 上記関数のテンプレートオーバーロードです。
 
static std::pair< errno_t, size_t > Generate (nlib_utf8_t *str, size_t n, const MpObject &obj) noexcept
 上記関数の引数省略版で、settingsをデフォルト値で渡します。
 
template<size_t N>
static std::pair< errno_t, size_t > Generate (nlib_utf8_t(&str)[N], const MpObject &obj) noexcept
 上記関数のテンプレートオーバーロードです。
 

詳解

JSON又はmsgpackを出力するためのクラスです。

説明
初期化を終えた後は、以下のようなコードでメソッドチェーンを記述してJSON又はmsgpackを出力することができます。
// make {"key1" : "value", "key2" : [1,2,3], "key3" : [true, null]}
MemoryOutputStream stream(buf);
SUCCEED_IF(gen.Init() == 0);
SUCCEED_IF(gen.Open(&stream) == 0);
gen.StartMap(3);
gen.Key("key1").String("value");
gen.Key("key2").StartArray(3).Int32(1).Int32(2).Int32(3).EndArray();
gen.Key("key3").StartArray(2).Boolean(true).Null().EndArray();
gen.EndMap();
SUCCEED_IF(gen.Close() == 0);
size_t n = stream.Pos();
SUCCEED_IF(stream.Close());
buf[n] = '\0'; // note that JsonStreamGenerator does not append '\0'
nlib_printf("%s\n", buf);
/*
Output:
{"key1":"value","key2":[1,2,3],"key3":[true,null]}
*/
静的メンバ関数を利用して、MpObjectから簡単に出力することも可能です。
auto r = JsonStreamGenerator::Generate(buf, obj);
SUCCEED_IF(r.first == 0);
nlib_printf("output size = %" PRIdS "\n", r.second);
nlib_printf("%s\n", buf);
/*
Output:
output size = 50
{"key1":"value","key2":[1,2,3],"key3":[true,null]}
*/

JsonStreamGenerator.h42 行目に定義があります。

関数詳解

◆ Binary()

nn::nlib::msgpack::JsonStreamGenerator::Binary ( const void *  bin,
size_t  n 
)
noexcept

バイナリデータを出力します。現在のところmsgpackの出力のみがサポートされています。

引数
[in]binバイナリデータ
[in]nバイナリデータのサイズ
戻り値
JsonStreamGeneratorオブジェクト
参照
https://github.com/msgpack/msgpack/blob/master/spec.md#formats-bin

◆ Boolean()

nn::nlib::msgpack::JsonStreamGenerator::Boolean ( bool  value)
noexcept

true又はfalseを出力します。

引数
[in]value真偽値
戻り値
JsonStreamGeneratorオブジェクト

◆ Close()

nn::nlib::msgpack::JsonStreamGenerator::Close ( )
noexcept

ジェネレータをクローズして初期化直後の状態に設定します。

戻り値
0成功した場合
EINVALOpen()が実行されていない場合
その他ストリームが返すエラー
説明
クローズの際にストリームをフラッシュしますが、ストリームをクローズすることはありません。

◆ Double()

nn::nlib::msgpack::JsonStreamGenerator::Double ( double  num)
noexcept

浮動小数点数を出力します。

引数
[in]num倍精度浮動小数点数
戻り値
JsonStreamGeneratorオブジェクト

◆ DoubleArray()

nn::nlib::msgpack::JsonStreamGenerator::DoubleArray ( const double *  p,
size_t  count 
)
noexcept

倍精度浮動小数点数の配列を出力します。

引数
[in]p倍精度浮動小数点数の配列へのポインタ
[in]count倍精度浮動小数点数の数
戻り値
JsonStreamGeneratorオブジェクト

◆ EmptyArray()

nn::nlib::msgpack::JsonStreamGenerator::EmptyArray ( )
inlinenoexcept

空の配列を出力します。

戻り値
JsonStreamGeneratorオブジェクト

JsonStreamGenerator.h149 行目に定義があります。

◆ EmptyMap()

nn::nlib::msgpack::JsonStreamGenerator::EmptyMap ( )
inlinenoexcept

空のマップを出力します。

戻り値
JsonStreamGeneratorオブジェクト

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

◆ EndArray()

nn::nlib::msgpack::JsonStreamGenerator::EndArray ( )
noexcept

配列を終了します。

戻り値
JsonStreamGeneratorオブジェクト

◆ EndMap()

nn::nlib::msgpack::JsonStreamGenerator::EndMap ( )
noexcept

マップを終了します。

戻り値
JsonStreamGeneratorオブジェクト

◆ Ext()

nn::nlib::msgpack::JsonStreamGenerator::Ext ( int8_t  tp,
const void *  bin,
size_t  n 
)
noexcept

拡張データを出力します。

引数
[in]tp拡張データのタイプ
[in]binバイナリデータ
[in]nバイナリデータのサイズ
戻り値
JsonStreamGeneratorオブジェクト
説明
JSONの出力を行う場合、拡張データがタイムスタンプである場合は、'2001-02-03T04:05:06'のような文字列として出力されます。
参照
https://github.com/msgpack/msgpack/blob/master/spec.md#formats-ext

◆ Float()

nn::nlib::msgpack::JsonStreamGenerator::Float ( float  num)
noexcept

浮動小数点数を出力します。

引数
[in]num単精度浮動小数点数
戻り値
JsonStreamGeneratorオブジェクト

◆ FloatArray()

nn::nlib::msgpack::JsonStreamGenerator::FloatArray ( const float *  p,
size_t  count 
)
noexcept

単精度浮動小数点数の配列を出力します。

引数
[in]p単精度浮動小数点数の配列へのポインタ
[in]count単精度浮動小数点数の数
戻り値
JsonStreamGeneratorオブジェクト

◆ Flush()

nn::nlib::msgpack::JsonStreamGenerator::Flush ( )
noexcept

ストリームにデータを書き出しストリームをフラッシュします。

戻り値
trueならば成功

◆ Generate() [1/2]

nn::nlib::msgpack::JsonStreamGenerator::Generate ( size_t *  written,
nlib_utf8_t str,
size_t  n,
const MpObject obj,
const JsonStreamGeneratorSettings settings 
)
staticnoexcept

objの内容をJSON又はmsgpackで出力します。

引数
[out]written出力されたデータサイズ
[out]str出力が格納されるバッファ
[in]n出力バッファ・サイズ
[in]objJSON又はmsgpackにシリアライズされるMpObject
[in]settingsジェネレータの設定パラメータ
戻り値
0ならば成功
説明
JSONを出力する場合には文字列はヌル終端されます。 この場合writtenには文字列長が格納されています。

◆ Generate() [2/2]

nn::nlib::msgpack::JsonStreamGenerator::Generate ( nlib_utf8_t str,
size_t  n,
const MpObject obj,
const JsonStreamGeneratorSettings settings 
)
inlinestaticnoexcept

objの内容をJSON又はmsgpackで出力します。

引数
[out]str出力が格納されるバッファ
[in]n出力バッファ・サイズ
[in]objJSON又はmsgpackにシリアライズされるMpObject
[in]settingsジェネレータの設定パラメータ
戻り値
エラー値と出力されたデータサイズのペア
説明
JSONを出力する場合には文字列はヌル終端されます。 この場合writtenには文字列長が格納されています。

JsonStreamGenerator.h84 行目に定義があります。

◆ GetError()

nn::nlib::msgpack::JsonStreamGenerator::GetError ( ) const
inlinenoexcept

エラーを取得します。

戻り値
JsonStreamGeneratorが定義するエラー値
説明
以下の値のどれかを返します。
説明
kOk エラーは発生していません
kErrorKeyRequired キーを出力する必要があります
kErrorKeyForbidden キーの出力をおこなってはいけません
kErrorEndArrayRequired 配列を終了させる必要があります
kErrorEndArrayForbidden 配列を終了してはいけません
kErrorEndMapRequired マップを終了させる必要があります
kErrorEndMapForbidden マップを終了してはいけません
kErrorStringUtf8 文字列又はキーにUTF-8でない文字が含まれています
kErrorStream 出力ストリームでエラーが発生しています
kErrorOutOfMemory メモリの確保に失敗しました
kErrorArrayOrMapRequired 配列かマップを開始させる必要があります
kErrorDocumentEnd JSON/msgpackのドキュメントは既に終了しています
kErrorBinaryNotAvailable Binary()を利用することはできません
kErrorExtNotAvailable Ext()を利用することはできません
kErrorInvalidParam 入力パラメータが不正です

JsonStreamGenerator.h161 行目に定義があります。

◆ Init()

nn::nlib::msgpack::JsonStreamGenerator::Init ( const JsonStreamGeneratorSettings settings)
noexcept

動作オプションを指定して初期化を行います。成功した場合は0を返します。

引数
[in]settings動作オプション
戻り値
0成功した場合
EALREADY既に初期化済みの場合
ENOMEM内部でメモリ確保に失敗した場合
EINVAL動作オプションの指定が不正だった場合

◆ Int16()

nn::nlib::msgpack::JsonStreamGenerator::Int16 ( int16_t  num)
noexcept

整数値を出力します。

引数
[in]num整数値
戻り値
JsonStreamGeneratorオブジェクト

◆ Int16Array()

nn::nlib::msgpack::JsonStreamGenerator::Int16Array ( const int16_t *  p,
size_t  count 
)
noexcept

整数値の配列を出力します。

引数
[in]p整数値の配列へのポインタ
[in]count整数値の数
戻り値
JsonStreamGeneratorオブジェクト

◆ Int32()

nn::nlib::msgpack::JsonStreamGenerator::Int32 ( int32_t  num)
noexcept

整数値を出力します。

引数
[in]num整数値
戻り値
JsonStreamGeneratorオブジェクト

◆ Int32Array()

nn::nlib::msgpack::JsonStreamGenerator::Int32Array ( const int32_t *  p,
size_t  count 
)
noexcept

整数値の配列を出力します。

引数
[in]p整数値の配列へのポインタ
[in]count整数値の数
戻り値
JsonStreamGeneratorオブジェクト

◆ Int64()

nn::nlib::msgpack::JsonStreamGenerator::Int64 ( int64_t  num)
noexcept

整数値を出力します。

引数
[in]num整数値
戻り値
JsonStreamGeneratorオブジェクト

◆ Int64Array()

nn::nlib::msgpack::JsonStreamGenerator::Int64Array ( const int64_t *  p,
size_t  count 
)
noexcept

整数値の配列を出力します。

引数
[in]p整数値の配列へのポインタ
[in]count整数値の数
戻り値
JsonStreamGeneratorオブジェクト

◆ Int8()

nn::nlib::msgpack::JsonStreamGenerator::Int8 ( int8_t  num)
noexcept

整数値を出力します。

引数
[in]num整数値
戻り値
JsonStreamGeneratorオブジェクト

◆ Int8Array()

nn::nlib::msgpack::JsonStreamGenerator::Int8Array ( const int8_t *  p,
size_t  count 
)
noexcept

整数値の配列を出力します。

引数
[in]p整数値の配列へのポインタ
[in]count整数値の数
戻り値
JsonStreamGeneratorオブジェクト

◆ Key()

nn::nlib::msgpack::JsonStreamGenerator::Key ( const nlib_utf8_t key)
noexcept

連想配列のキーを出力します。

引数
[in]key連想配列のキー
戻り値
JsonStreamGeneratorオブジェクト

◆ Null()

nn::nlib::msgpack::JsonStreamGenerator::Null ( )
noexcept

nullを出力します。

戻り値
JsonStreamGeneratorオブジェクト

◆ Object()

nn::nlib::msgpack::JsonStreamGenerator::Object ( const MpObject obj)
noexcept

MpObjectを出力します。

引数
[in]obj出力するMpObject
戻り値
JsonStreamGeneratorオブジェクト

◆ Open()

nn::nlib::msgpack::JsonStreamGenerator::Open ( OutputStream stream)
noexcept

ストリームを指定してデータの生成を開始します。

引数
[in]streamJSON又はmsgpackを書きこむストリーム
戻り値
0成功した場合
EINVALstreamNULL、又はJsonStreamGeneratorが未初期化な場合
ENOMEMメモリの確保に失敗した場合

◆ StartArray()

nn::nlib::msgpack::JsonStreamGenerator::StartArray ( size_t  count)
noexcept

配列の出力を開始します。

引数
[in]count配列のサイズ
戻り値
JsonStreamGeneratorオブジェクト
説明
msgpackを出力している場合には適切なcountを指定する必要があります。 JSONを出力している場合にはcountは無視されます。

◆ StartMap()

nn::nlib::msgpack::JsonStreamGenerator::StartMap ( size_t  count)
noexcept

マップの出力を開始します。

引数
[in]countマップのサイズ
戻り値
JsonStreamGeneratorオブジェクト
説明
msgpackを出力している場合には適切なcountを指定する必要があります。 JSONを出力している場合にはcountは無視されます。

◆ String()

nn::nlib::msgpack::JsonStreamGenerator::String ( const nlib_utf8_t str)
noexcept

文字列を出力します。

引数
[in]str文字列
戻り値
JsonStreamGeneratorオブジェクト
テンプレート引数
STDSTRINGC文字列を返すc_str()メンバ関数を持つクラス
引数
[in]strstd::string等クラスのオブジェクト
戻り値
JsonStreamGeneratorオブジェクト

◆ Timestamp()

nn::nlib::msgpack::JsonStreamGenerator::Timestamp ( nlib_time  t)
noexcept

タイムスタンプを出力します。JSONの場合は文字列として出力されます。

引数
[in]t時刻
戻り値
JsonStreamGeneratorオブジェクト
説明
JSONの出力を行う場合、拡張データがタイムスタンプである場合は、'2001-02-03T04:05:06'のような文字列として出力されます。
参照
https://github.com/msgpack/msgpack/blob/master/spec.md#formats-timestamp

◆ Uint16()

nn::nlib::msgpack::JsonStreamGenerator::Uint16 ( uint16_t  num)
noexcept

整数値を出力します。

引数
[in]num整数値
戻り値
JsonStreamGeneratorオブジェクト

◆ Uint16Array()

nn::nlib::msgpack::JsonStreamGenerator::Uint16Array ( const uint16_t *  p,
size_t  count 
)
noexcept

整数値の配列を出力します。

引数
[in]p整数値の配列へのポインタ
[in]count整数値の数
戻り値
JsonStreamGeneratorオブジェクト

◆ Uint32()

nn::nlib::msgpack::JsonStreamGenerator::Uint32 ( uint32_t  num)
noexcept

整数値を出力します。

引数
[in]num整数値
戻り値
JsonStreamGeneratorオブジェクト

◆ Uint32Array()

nn::nlib::msgpack::JsonStreamGenerator::Uint32Array ( const uint32_t *  p,
size_t  count 
)
noexcept

整数値の配列を出力します。

引数
[in]p整数値の配列へのポインタ
[in]count整数値の数
戻り値
JsonStreamGeneratorオブジェクト

◆ Uint64()

nn::nlib::msgpack::JsonStreamGenerator::Uint64 ( uint64_t  num)
noexcept

整数値を出力します。

引数
[in]num整数値
戻り値
JsonStreamGeneratorオブジェクト

◆ Uint64Array()

nn::nlib::msgpack::JsonStreamGenerator::Uint64Array ( const uint64_t *  p,
size_t  count 
)
noexcept

整数値の配列を出力します。

引数
[in]p整数値の配列へのポインタ
[in]count整数値の数
戻り値
JsonStreamGeneratorオブジェクト

◆ Uint8()

nn::nlib::msgpack::JsonStreamGenerator::Uint8 ( uint8_t  num)
noexcept

整数値を出力します。

引数
[in]num整数値
戻り値
JsonStreamGeneratorオブジェクト

◆ Uint8Array()

nn::nlib::msgpack::JsonStreamGenerator::Uint8Array ( const uint8_t *  p,
size_t  count 
)
noexcept

整数値の配列を出力します。

引数
[in]p整数値の配列へのポインタ
[in]count整数値の数
戻り値
JsonStreamGeneratorオブジェクト

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