JSON又はmsgpackをプル形式でパースするためのクラスです。
[詳解]
#include "nn/nlib/msgpack/JsonStreamParser.h"
|
struct | Token |
| パーサーが取得したトークンに関するデータが格納されています。 [詳解]
|
|
|
enum | Event {
kNone = -1,
kEventNull = 1,
kEventTrue,
kEventFalse,
kEventString,
kEventNumberInt32,
kEventNumberUint32,
kEventNumberInt64,
kEventNumberUint64,
kEventNumberFloat,
kEventNumberDouble,
kEventStartArray,
kEventEndArray,
kEventStartMap,
kEventEndMap,
kEventKeyName,
kEventBinary,
kEventExt,
kEventEndDocument
} |
| JsonStreamParser::Next() 及びToken で利用される型で、パーサーが読み込んだデータに対応するイベントです。 [詳解]
|
|
|
static errno_t | Parse (JsonStreamParser *parser, UniquePtr< MpObject > &obj, bool peek) noexcept |
| JSON又はmsgpackをパースして、MpObject を作成します。 [詳解]
|
|
static errno_t | Parse (JsonStreamParser *parser, UniquePtr< MpObject > &obj) noexcept |
| Parse(parser, obj, false) を実行します。
|
|
static errno_t | Parse (UniquePtr< MpObject > &obj, const void *data, size_t n, const JsonStreamParserSettings &settings) noexcept |
| JSON又はmsgpackをパースして、MpObject を作成します。 [詳解]
|
|
static errno_t | Parse (UniquePtr< MpObject > &obj, const void *data, size_t n) noexcept |
| JsonStreamParserSettings のデフォルト設定でParse(obj, data, n, settings) を実行します。
|
|
static errno_t | Parse (UniquePtr< MpObject > &obj, const nlib_utf8_t *str, const JsonStreamParserSettings &settings) noexcept |
| JSONをパースして、MpObject を作成します。 [詳解]
|
|
static errno_t | Parse (UniquePtr< MpObject > &obj, const nlib_utf8_t *str) noexcept |
| JsonStreamParserSettings のデフォルト設定でParse(obj, str, settings を実行します。
|
|
|
|
static errno_t | ToInt32 (const Token &token, int32_t *number) noexcept |
| 数値トークンをint32_t へキャストします。 [詳解]
|
|
static errno_t | ToUint32 (const Token &token, uint32_t *number) noexcept |
| 数値トークンをuint32_t へキャストします。 [詳解]
|
|
static errno_t | ToInt64 (const Token &token, int64_t *number) noexcept |
| 数値トークンをint64_t へキャストします。 [詳解]
|
|
static errno_t | ToUint64 (const Token &token, uint64_t *number) noexcept |
| 数値トークンをuint64_t へキャストします。 [詳解]
|
|
static errno_t | ToFloat (const Token &token, float *number) noexcept |
| 数値トークンをfloat へキャストします。 [詳解]
|
|
static errno_t | ToDouble (const Token &token, double *number) noexcept |
| 数値トークンをdouble へキャストします。 [詳解]
|
|
JSON又はmsgpackをプル形式でパースするためのクラスです。
- 説明
- 構文要素ごとにイベントを発生させ、それをユーザー側が処理することでパースを進めていきます。 パース処理は以下のようなコードによって発生したイベントを取得することで進められます。
JsonStreamParser::Token token;
while (parser.HasNext()) {
switch (ev) {
......
......
......
......
token = parser.GetToken();
......
.....
}
}
JsonStreamParser.h の 54 行目に定義があります。
◆ Event
JsonStreamParser::Next()
及びToken
で利用される型で、パーサーが読み込んだデータに対応するイベントです。
列挙値 |
---|
kNone | 何らかのエラーが発生しています。
|
kEventNull | null を読み込みました。
|
kEventTrue | true を読み込みました。
|
kEventFalse | false を読み込みました。
|
kEventString | 連想配列のキー以外の文字列を読み込みました。
|
kEventNumberInt32 | int32_t 型の整数を読み込みました。
|
kEventNumberUint32 | uint32_t 型の整数を読み込みました。
|
kEventNumberInt64 | int64_t 型の整数を読み込みました。
|
kEventNumberUint64 | uint64_t 型の整数を読み込みました。
|
kEventNumberFloat | float 型の浮動小数点数を読み込みました。
|
kEventNumberDouble | double 型の浮動小数点数を読み込みました。
|
kEventStartArray | 配列が開始しました。
|
kEventEndArray | 配列が終了しました。
|
kEventStartMap | 連想配列が開始しました。
|
kEventEndMap | 連想配列が終了しました。
|
kEventKeyName | 連想配列のキーを読み込みました。
|
kEventBinary | バイナリデータを読み込みました(msgpackのみ)。
|
kEventExt | 拡張データを読み込みました(msgpackのみ)。
|
kEventEndDocument | JSON又はmsgpackが終了しました(HasNext() がfalse を返した場合のNext() の戻り値)。
|
JsonStreamParser.h の 56 行目に定義があります。
◆ Close()
nn::nlib::msgpack::JsonStreamParser::Close |
( |
| ) |
|
|
noexcept |
パーサーをクローズして初期化直後の状態に設定します。
- 戻り値
-
- 説明
Open()
で指定したストリームやTextReader
オブジェクトは、クローズされずこのクラスから切り離されます。
◆ GetError()
nn::nlib::msgpack::JsonStreamParser::GetError |
( |
| ) |
const |
|
noexcept |
エラーを取得します。
- 戻り値
JsonStreamParser
が定義するエラー値
- 説明
- 以下の値のどれかを返します。
値 | 説明 |
kOk | エラーは発生していません |
kErrorColon | ':'が見つかりませんでした |
kErrorComma | ','が見つかりませんでした |
kErrorQuote | '"'が見つかりませんでした |
kErrorKeyTooLong | 連想配列のキーが長すぎてトークンを格納するバッファに収まりませんでした |
kErrorNumberTooLong | 数値文字列が長すぎてトークンを格納するバッファに収まりませんでした |
kErrorArrayTooBig | 配列の大きさが指定された制限をオーバーしました |
kErrorMapTooBig | 連想配列の大きさが指定された制限をオーバーしました |
kErrorCharacter | 文字列にUTF-8でない文字が含まれています |
kErrorNumberRange | 数値が大きすぎるか小さすぎます |
kErrorDepth | 配列及び連想配列の深さが指定された制限をオーバーしました |
kErrorToken | その他読み込んだ文字列でエラーが発生しました |
kErrorStream | ストリームでエラーが発生しました |
◆ GetToken()
nn::nlib::msgpack::JsonStreamParser::GetToken |
( |
| ) |
const |
|
inlinenoexcept |
◆ Init()
パーサーの初期化を行います。
- 引数
-
- 戻り値
-
0 | 成功した場合 |
ENOMEM | メモリの確保に失敗した場合 |
EALREADY | 既に初期化済みの場合 |
◆ Next()
nn::nlib::msgpack::JsonStreamParser::Next |
( |
| ) |
|
|
noexcept |
JSON又はmsgpackを読み込みパーサー内の状態を遷移します。
- 戻り値
- 読み込んだデータに対応するイベント
- 説明
◆ Open() [1/2]
nn::nlib::msgpack::JsonStreamParser::Open |
( |
InputStream * |
stream | ) |
|
|
noexcept |
ストリームを指定してパースを開始します。
- 引数
-
[in] | stream | JSON又はmsgpackを読み込むストリーム |
- 戻り値
-
0 | 成功した場合 |
EINVAL | stream がNULL 、又はJsonStreamParser が未初期化な場合 |
ENONEM | メモリの確保に失敗した場合 |
EALREADY | 既にオープンされている場合 |
◆ Open() [2/2]
nn::nlib::msgpack::JsonStreamParser::Open |
( |
TextReader * |
reader | ) |
|
|
noexcept |
◆ Parse() [1/3]
JSON又はmsgpackをパースして、MpObject
を作成します。
- 引数
-
[in] | parser | パーサー |
[out] | obj | パース結果が格納されるMpObject |
[in] | peek | true ならば、最初のトークンに既にNext() で取得済みのトークンを利用 |
- 戻り値
- 0ならば成功
◆ Parse() [2/3]
JSON又はmsgpackをパースして、MpObject
を作成します。
- 引数
-
[out] | obj | パース結果が格納されるMpObject |
[in] | data | JSON又はmsgpackが格納されたデータ列 |
[in] | n | データ列のサイズ |
[in] | settings | パーサーの設定パラーメータ |
- 戻り値
- 0ならば成功
◆ Parse() [3/3]
JSONをパースして、MpObject
を作成します。
- 引数
-
[out] | obj | パース結果が格納されるMpObject |
[in] | str | JSONが格納された文字列 |
[in] | settings | パーサーの設定パラーメータ |
- 戻り値
- 0ならば成功
- 説明
- この関数を用いてmsgpackをパースすることはできません。
settings.format
には、JsonStreamParserSettings::kFormatJson
が指定されているものとして動作します。
JsonStreamParser.h の 153 行目に定義があります。
◆ Skip()
nn::nlib::msgpack::JsonStreamParser::Skip |
( |
| ) |
|
|
noexcept |
値、配列全体、連想配列全体を1つ読み飛ばします。
- 戻り値
- 途中でエラーが発生した場合は
false
を返します。
◆ ToDouble()
nn::nlib::msgpack::JsonStreamParser::ToDouble |
( |
const Token & |
token, |
|
|
double * |
number |
|
) |
| |
|
inlinestaticnoexcept |
数値トークンをdouble
へキャストします。
- 引数
-
[in] | token | GetToken() で得られるトークンへの参照 |
[out] | number | 変換先の数値へのポインタ |
- 戻り値
-
0 | 成功した場合 |
EINVAL | number がNULL の場合 |
ERANGE | トークンの値が整数値で、9007199254740991LLより大きいか-9007199254740991LLより小さかった場合 |
EDOM | 数値以外を変換しようとした場合 |
- 説明
- 0又は
ERANGE
が返り値の場合は、*number
にキャストされた値が格納されています。
JsonStreamParser.h の 398 行目に定義があります。
◆ ToFloat()
nn::nlib::msgpack::JsonStreamParser::ToFloat |
( |
const Token & |
token, |
|
|
float * |
number |
|
) |
| |
|
inlinestaticnoexcept |
数値トークンをfloat
へキャストします。
- 引数
-
[in] | token | GetToken() で得られるトークンへの参照 |
[out] | number | 変換先の数値へのポインタ |
- 戻り値
-
0 | 成功した場合 |
EINVAL | number がNULL であるか、数値以外を変換しようとした場合 |
ERANGE | 値がFLT_MAX より大きいかFLT_MIN よりより小さかった場合 |
EDOM | トークンの値が整数値で、1677215より大きいか-1677215より小さかった場合 |
- 説明
- 0,
ERANGE
又はEDOM
が返り値の場合は、*number
にキャストされた値が格納されています。
JsonStreamParser.h の 359 行目に定義があります。
◆ ToInt32()
nn::nlib::msgpack::JsonStreamParser::ToInt32 |
( |
const Token & |
token, |
|
|
int32_t * |
number |
|
) |
| |
|
inlinestaticnoexcept |
数値トークンをint32_t
へキャストします。
- 引数
-
[in] | token | GetToken() で得られるトークンへの参照 |
[out] | number | 変換先の数値へのポインタ |
- 戻り値
-
0 | 成功した場合 |
EINVAL | number がNULL であるか、数値以外を変換しようとした場合 |
ERANGE | 値がINT32_MAX 又はINT32_MIN より小さかった場合 |
EDOM | 浮動小数点数を変換しようとした場合でERANGE を返さない場合 |
- 説明
- 0,
ERANGE
又はEDOM
が返り値の場合は、*number
にキャストされた値が格納されています。
JsonStreamParser.h の 216 行目に定義があります。
◆ ToInt64()
nn::nlib::msgpack::JsonStreamParser::ToInt64 |
( |
const Token & |
token, |
|
|
int64_t * |
number |
|
) |
| |
|
inlinestaticnoexcept |
数値トークンをint64_t
へキャストします。
- 引数
-
[in] | token | GetToken() で得られるトークンへの参照 |
[out] | number | 変換先の数値へのポインタ |
- 戻り値
-
0 | 成功した場合 |
EINVAL | number がNULL であるか、数値以外を変換しようとした場合 |
ERANGE | 値がINT64_MAX 又はINT64_MIN より小さかった場合 |
EDOM | 浮動小数点数を変換しようとした場合でERANGE を返さない場合 |
- 説明
- 0,
ERANGE
又はEDOM
が返り値の場合は、*number
にキャストされた値が格納されています。
JsonStreamParser.h の 290 行目に定義があります。
◆ ToUint32()
nn::nlib::msgpack::JsonStreamParser::ToUint32 |
( |
const Token & |
token, |
|
|
uint32_t * |
number |
|
) |
| |
|
inlinestaticnoexcept |
数値トークンをuint32_t
へキャストします。
- 引数
-
[in] | token | GetToken() で得られるトークンへの参照 |
[out] | number | 変換先の数値へのポインタ |
- 戻り値
-
0 | 成功した場合 |
EINVAL | number がNULL であるか、数値以外を変換しようとした場合 |
ERANGE | 値がUINT32_MAX より大きいか0より小さかった場合 |
EDOM | 浮動小数点数を変換しようとした場合でERANGE を返さない場合 |
- 説明
- 0,
ERANGE
又はEDOM
が返り値の場合は、*number
にキャストされた値が格納されています。
JsonStreamParser.h の 253 行目に定義があります。
◆ ToUint64()
nn::nlib::msgpack::JsonStreamParser::ToUint64 |
( |
const Token & |
token, |
|
|
uint64_t * |
number |
|
) |
| |
|
inlinestaticnoexcept |
数値トークンをuint64_t
へキャストします。
- 引数
-
[in] | token | GetToken() で得られるトークンへの参照 |
[out] | number | 変換先の数値へのポインタ |
- 戻り値
-
0 | 成功した場合 |
EINVAL | number がNULL であるか、数値以外を変換しようとした場合 |
ERANGE | 値がUINT64_MAX より大きいか0より小さかった場合 |
EDOM | 浮動小数点数を変換しようとした場合でERANGE を返さない場合 |
- 説明
- 0,
ERANGE
又はEDOM
が返り値の場合は、*number
にキャストされた値が格納されています。
JsonStreamParser.h の 324 行目に定義があります。
このクラス詳解は次のファイルから抽出されました: