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

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で利用される型で、パーサーが読み込んだデータに対応するイベントです。 [詳解]
 

公開メンバ関数

bool HasNext () const noexcept
 次に遷移する状態がある(読み込んでいるJSON又はmsgpackが終了していない)場合はtrueを返します。
 
Event Next () noexcept
 JSON又はmsgpackを読み込みパーサー内の状態を遷移します。 [詳解]
 
bool Skip () noexcept
 値、配列全体、連想配列全体を1つ読み飛ばします。 [詳解]
 
int GetLine () const noexcept
 JSONを読み込んでいる場合は現在の行数を返します。
 
int GetColumn () const noexcept
 JSONを読み込んでいる場合は現在の桁数を返します。
 
const TokenGetToken () const noexcept
 トークンを取得します。 [詳解]
 
基本的なメンバ関数
 JsonStreamParser () noexcept
 デフォルトコンストラクタです。
 
 ~JsonStreamParser () noexcept
 デストラクタです。
 
初期化と終了
errno_t Init (const JsonStreamParserSettings &settings) noexcept
 パーサーの初期化を行います。 [詳解]
 
errno_t Init () noexcept
 デフォルト設定でパーサーの初期化を行います。
 
errno_t Open (InputStream *stream) noexcept
 ストリームを指定してパースを開始します。 [詳解]
 
errno_t Open (TextReader *reader) noexcept
 TextReaderオブジェクトを指定Tしてパースを開始します。 [詳解]
 
errno_t Close () noexcept
 パーサーをクローズして初期化直後の状態に設定します。 [詳解]
 
エラーチェック
Error GetError () const noexcept
 エラーを取得します。 [詳解]
 
 operator bool () const
 エラーが発生していなければtrueを返します。
 

静的公開メンバ関数

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;
if (nlib_is_error(parser.Init())) { ERROR }
if (nlib_is_error(parser.Open(stream))) { ERROR }
while (parser.HasNext()) {
JsonStreamParser::Event ev = parser.Next();
switch (ev) {
......
......
......
......
token = parser.GetToken();
......
.....
}
}
if (!nlib_is_error(parser)) { ERROR }

JsonStreamParser.h37 行目に定義があります。

列挙型メンバ詳解

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

関数詳解

§ Close()

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

パーサーをクローズして初期化直後の状態に設定します。

戻り値
0成功した場合
説明
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

トークンを取得します。

戻り値
直前のNext()で取得したトークン

JsonStreamParser.h143 行目に定義があります。

§ Init()

nn::nlib::msgpack::JsonStreamParser::Init ( const JsonStreamParserSettings settings)
noexcept

パーサーの初期化を行います。

引数
[in]settings動作オプション
戻り値
0成功した場合
ENOMEMメモリの確保に失敗した場合
EALREADY既に初期化済みの場合

§ Next()

nn::nlib::msgpack::JsonStreamParser::Next ( )
noexcept

JSON又はmsgpackを読み込みパーサー内の状態を遷移します。

戻り値
読み込んだデータに対応するイベント
説明

§ Open() [1/2]

nn::nlib::msgpack::JsonStreamParser::Open ( InputStream stream)
noexcept

ストリームを指定してパースを開始します。

引数
[in]streamJSON又はmsgpackを読み込むストリーム
戻り値
0成功した場合
EINVALstreamNULL、又はJsonStreamParserが未初期化な場合
ENONEMメモリの確保に失敗した場合
EALREADY既にオープンされている場合

§ Open() [2/2]

nn::nlib::msgpack::JsonStreamParser::Open ( TextReader reader)
noexcept

TextReaderオブジェクトを指定Tしてパースを開始します。

引数
[in]readerJSONを読み込むTextReaderオブジェクト
戻り値
0成功した場合
EINVALreaderNULLであったり未初期化な場合、又はJsonStreamParserが未初期化な場合
EALREADY既にオープンされている場合

§ Parse() [1/3]

nn::nlib::msgpack::JsonStreamParser::Parse ( JsonStreamParser parser,
UniquePtr< MpObject > &  obj,
bool  peek 
)
staticnoexcept

JSON又はmsgpackをパースして、MpObjectを作成します。

引数
[in]parserパーサー
[out]objパース結果が格納されるMpObject
[in]peektrueならば、最初のトークンに既にNext()で取得済みのトークンを利用
戻り値
0ならば成功

§ Parse() [2/3]

nn::nlib::msgpack::JsonStreamParser::Parse ( UniquePtr< MpObject > &  obj,
const void *  data,
size_t  n,
const JsonStreamParserSettings settings 
)
staticnoexcept

JSON又はmsgpackをパースして、MpObjectを作成します。

引数
[out]objパース結果が格納されるMpObject
[in]dataJSON又はmsgpackが格納されたデータ列
[in]nデータ列のサイズ
[in]settingsパーサーの設定パラーメータ
戻り値
0ならば成功

§ Parse() [3/3]

nn::nlib::msgpack::JsonStreamParser::Parse ( UniquePtr< MpObject > &  obj,
const char *  str,
const JsonStreamParserSettings settings 
)
inlinestaticnoexcept

JSONをパースして、MpObjectを作成します。

引数
[out]objパース結果が格納されるMpObject
[in]strJSONが格納された文字列
[in]settingsパーサーの設定パラーメータ
戻り値
0ならば成功
説明
この関数を用いてmsgpackをパースすることはできません。 settings.formatには、JsonStreamParserSettings::FORMAT_JSONが指定されているものとして動作します。

JsonStreamParser.h104 行目に定義があります。

§ Skip()

nn::nlib::msgpack::JsonStreamParser::Skip ( )
noexcept

値、配列全体、連想配列全体を1つ読み飛ばします。

戻り値
途中でエラーが発生した場合はfalseを返します。

§ ToDouble()

nn::nlib::msgpack::JsonStreamParser::ToDouble ( const Token token,
double *  number 
)
inlinestaticnoexcept

数値トークンをdoubleへキャストします。

引数
[in]tokenGetToken()で得られるトークンへの参照
[out]number変換先の数値へのポインタ
戻り値
0成功した場合
EINVALnumberNULLの場合
ERANGEトークンの値が整数値で、9007199254740991LLより大きいか-9007199254740991LLより小さかった場合
EDOM数値以外を変換しようとした場合
説明
0又はERANGEが返り値の場合は、*numberにキャストされた値が格納されています。

JsonStreamParser.h341 行目に定義があります。

§ ToFloat()

nn::nlib::msgpack::JsonStreamParser::ToFloat ( const Token token,
float *  number 
)
inlinestaticnoexcept

数値トークンをfloatへキャストします。

引数
[in]tokenGetToken()で得られるトークンへの参照
[out]number変換先の数値へのポインタ
戻り値
0成功した場合
EINVALnumberNULLであるか、数値以外を変換しようとした場合
ERANGE値がFLT_MAXより大きいかFLT_MINよりより小さかった場合
EDOMトークンの値が整数値で、1677215より大きいか-1677215より小さかった場合
説明
0, ERANGE又はEDOMが返り値の場合は、*numberにキャストされた値が格納されています。

JsonStreamParser.h302 行目に定義があります。

§ ToInt32()

nn::nlib::msgpack::JsonStreamParser::ToInt32 ( const Token token,
int32_t *  number 
)
inlinestaticnoexcept

数値トークンをint32_tへキャストします。

引数
[in]tokenGetToken()で得られるトークンへの参照
[out]number変換先の数値へのポインタ
戻り値
0成功した場合
EINVALnumberNULLであるか、数値以外を変換しようとした場合
ERANGE値がINT32_MAX又はINT32_MINより小さかった場合
EDOM浮動小数点数を変換しようとした場合でERANGEを返さない場合
説明
0, ERANGE又はEDOMが返り値の場合は、*numberにキャストされた値が格納されています。

JsonStreamParser.h159 行目に定義があります。

§ ToInt64()

nn::nlib::msgpack::JsonStreamParser::ToInt64 ( const Token token,
int64_t *  number 
)
inlinestaticnoexcept

数値トークンをint64_tへキャストします。

引数
[in]tokenGetToken()で得られるトークンへの参照
[out]number変換先の数値へのポインタ
戻り値
0成功した場合
EINVALnumberNULLであるか、数値以外を変換しようとした場合
ERANGE値がINT64_MAX又はINT64_MINより小さかった場合
EDOM浮動小数点数を変換しようとした場合でERANGEを返さない場合
説明
0, ERANGE又はEDOMが返り値の場合は、*numberにキャストされた値が格納されています。

JsonStreamParser.h233 行目に定義があります。

§ ToUint32()

nn::nlib::msgpack::JsonStreamParser::ToUint32 ( const Token token,
uint32_t *  number 
)
inlinestaticnoexcept

数値トークンをuint32_tへキャストします。

引数
[in]tokenGetToken()で得られるトークンへの参照
[out]number変換先の数値へのポインタ
戻り値
0成功した場合
EINVALnumberNULLであるか、数値以外を変換しようとした場合
ERANGE値がUINT32_MAXより大きいか0より小さかった場合
EDOM浮動小数点数を変換しようとした場合でERANGEを返さない場合
説明
0, ERANGE又はEDOMが返り値の場合は、*numberにキャストされた値が格納されています。

JsonStreamParser.h196 行目に定義があります。

§ ToUint64()

nn::nlib::msgpack::JsonStreamParser::ToUint64 ( const Token token,
uint64_t *  number 
)
inlinestaticnoexcept

数値トークンをuint64_tへキャストします。

引数
[in]tokenGetToken()で得られるトークンへの参照
[out]number変換先の数値へのポインタ
戻り値
0成功した場合
EINVALnumberNULLであるか、数値以外を変換しようとした場合
ERANGE値がUINT64_MAXより大きいか0より小さかった場合
EDOM浮動小数点数を変換しようとした場合でERANGEを返さない場合
説明
0, ERANGE又はEDOMが返り値の場合は、*numberにキャストされた値が格納されています。

JsonStreamParser.h267 行目に定義があります。


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