JSON又はmsgpackをプル形式でパースするためのクラスです。
[詳解]
#include "nn/nlib/msgpack/JsonStreamParser.h"
|
struct | Token |
| パーサーが取得したトークンに関するデータが格納されています。 [詳解]
|
|
|
enum | Event {
NONE = -1,
EVENT_NULL = 1,
EVENT_TRUE,
EVENT_FALSE,
EVENT_STRING,
EVENT_NUMBER_INT32,
EVENT_NUMBER_UINT32,
EVENT_NUMBER_INT64,
EVENT_NUMBER_UINT64,
EVENT_NUMBER_FLOAT,
EVENT_NUMBER_DOUBLE,
EVENT_START_ARRAY,
EVENT_END_ARRAY,
EVENT_START_MAP,
EVENT_END_MAP,
EVENT_KEY_NAME,
EVENT_BINARY,
EVENT_EXT,
EVENT_END_DOCUMENT
} |
| 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 char *str, const JsonStreamParserSettings &settings) noexcept |
| JSONをパースして、MpObject を作成します。 [詳解]
|
|
static errno_t | Parse (UniquePtr< MpObject > &obj, const char *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 の 37 行目に定義があります。
§ Event
JsonStreamParser::Next()
及びToken
で利用される型で、パーサーが読み込んだデータに対応するイベントです。
列挙値 |
---|
NONE | 何らかのエラーが発生しています。
|
EVENT_NULL | null を読み込みました。
|
EVENT_TRUE | true を読み込みました。
|
EVENT_FALSE | false を読み込みました。
|
EVENT_STRING | 連想配列のキー以外の文字列を読み込みました。
|
EVENT_NUMBER_INT32 | int32_t 型の整数を読み込みました。
|
EVENT_NUMBER_UINT32 | uint32_t 型の整数を読み込みました。
|
EVENT_NUMBER_INT64 | int64_t 型の整数を読み込みました。
|
EVENT_NUMBER_UINT64 | uint64_t 型の整数を読み込みました。
|
EVENT_NUMBER_FLOAT | float 型の浮動小数点数を読み込みました。
|
EVENT_NUMBER_DOUBLE | double 型の浮動小数点数を読み込みました。
|
EVENT_START_ARRAY | 配列が開始しました。
|
EVENT_END_ARRAY | 配列が終了しました。
|
EVENT_START_MAP | 連想配列が開始しました。
|
EVENT_END_MAP | 連想配列が終了しました。
|
EVENT_KEY_NAME | 連想配列のキーを読み込みました。
|
EVENT_BINARY | バイナリデータを読み込みました(msgpackのみ)。
|
EVENT_EXT | 拡張データを読み込みました(msgpackのみ)。
|
EVENT_END_DOCUMENT | JSON又はmsgpackが終了しました(HasNext() がfalse を返した場合のNext() の戻り値)。
|
JsonStreamParser.h の 39 行目に定義があります。
§ Close()
nn::nlib::msgpack::JsonStreamParser::Close |
( |
| ) |
|
|
noexcept |
パーサーをクローズして初期化直後の状態に設定します。
- 戻り値
-
- 説明
Open()
で指定したストリームやTextReader
オブジェクトは、クローズされずこのクラスから切り離されます。
§ GetError()
nn::nlib::msgpack::JsonStreamParser::GetError |
( |
| ) |
const |
|
noexcept |
エラーを取得します。
- 戻り値
JsonStreamParser
が定義するエラー値
- 説明
- 以下の値のどれかを返します。
値 | 説明 |
ERROR_OK | エラーは発生していません |
ERROR_COLON | ':'が見つかりませんでした |
ERROR_COMMA | ','が見つかりませんでした |
ERROR_QUOTE | '"'が見つかりませんでした |
ERROR_KEY_TOOLONG | 連想配列のキーが長すぎてトークンを格納するバッファに収まりませんでした |
ERROR_NUMBER_TOOLONG | 数値文字列が長すぎてトークンを格納するバッファに収まりませんでした |
ERROR_ARRAY_TOOBIG | 配列の大きさが指定された制限をオーバーしました |
ERROR_MAP_TOOBIG | 連想配列の大きさが指定された制限をオーバーしました |
ERROR_CHARACTER | 文字列にUTF-8でない文字が含まれています |
ERROR_NUMBER_RANGE | 数値が大きすぎるか小さすぎます |
ERROR_DEPTH | 配列及び連想配列の深さが指定された制限をオーバーしました |
ERROR_TOKEN | その他読み込んだ文字列でエラーが発生しました |
ERROR_STREAM | ストリームでエラーが発生しました |
§ 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::FORMAT_JSON
が指定されているものとして動作します。
JsonStreamParser.h の 104 行目に定義があります。
§ 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 の 341 行目に定義があります。
§ 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 の 302 行目に定義があります。
§ 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 の 159 行目に定義があります。
§ 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 の 233 行目に定義があります。
§ 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 の 196 行目に定義があります。
§ 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 の 267 行目に定義があります。
このクラス詳解は次のファイルから抽出されました: