nlib
JsonReader.h
[詳解]
1 
2 #pragma once
3 #ifndef INCLUDE_NN_NLIB_MSGPACK_JSONREADER_H_
4 #define INCLUDE_NN_NLIB_MSGPACK_JSONREADER_H_
5 
6 #include "nn/nlib/UniquePtr.h"
7 #include "nn/nlib/TextReader.h"
8 
9 #if defined(_MSC_VER) && defined(nx_msgpack_EXPORTS)
10 #undef NLIB_VIS_PUBLIC
11 #define NLIB_VIS_PUBLIC NLIB_WINEXPORT
12 #endif
13 
14 NLIB_NAMESPACE_BEGIN
15 class InputStream;
16 namespace msgpack {
17 class MpObject;
18 
20  size_t maxArraySize;
21  size_t maxMapSize;
22  size_t maxStrLen;
23  size_t maxDepth;
24 
25  public:
26  NLIB_CEXPR JsonReaderSettings(size_t max_array_size_, size_t max_map_size_,
27  size_t max_str_len_, size_t max_depth_) NLIB_NOEXCEPT
28  : maxArraySize(max_array_size_),
29  maxMapSize(max_map_size_),
30  maxStrLen(max_str_len_),
31  maxDepth(max_depth_) {}
33  maxMapSize(256),
34  maxStrLen(2047),
35  maxDepth(7) {}
36 };
37 
39  public:
40  enum Option {
41  OPTION_DEFAULT = 0x00000000,
42  OPTION_RELAXED = 0x00000001
43  };
46  NLIB_VIS_PUBLIC bool Init(InputStream* stream,
47  const JsonReaderSettings& settings) NLIB_NOEXCEPT NLIB_NONNULL;
48  bool Init(InputStream* stream) NLIB_NOEXCEPT NLIB_NONNULL {
50  return this->Init(stream, settings);
51  }
52  bool Close() NLIB_NOEXCEPT { return true; }
53  errno_t GetErrorValue() const NLIB_NOEXCEPT { return m_ErrorValue; }
54  InputStream* GetStream() NLIB_NOEXCEPT { return m_Reader.GetStream(); }
55  int GetLine() const NLIB_NOEXCEPT { return m_Reader.GetLine(); }
56  int GetColumn() const NLIB_NOEXCEPT { return m_Reader.GetColumn(); }
57 
58  public:
59  NLIB_VIS_PUBLIC static errno_t ReadEx(MpObject* obj, const void* jsontext, uint32_t option = 0,
61  static bool Read(MpObject* obj, const char* jsontext,
62  uint32_t option = 0) NLIB_NOEXCEPT NLIB_NONNULL {
63  // This can be used if jsontext is NULL terminated.
64  return ReadEx(obj, jsontext, option, RSIZE_MAX) == 0;
65  }
66  NLIB_VIS_PUBLIC bool Read(MpObject* obj, uint32_t option = 0) NLIB_NOEXCEPT NLIB_NONNULL;
67  NLIB_SAFE_BOOL(JsonReader, GetErrorValue() == 0);
68 
69  private:
70  void SetError(errno_t e) NLIB_NOEXCEPT {
71  if (m_ErrorValue == 0) m_ErrorValue = e;
72  }
73  NLIB_VIS_HIDDEN bool GetValue(MpObject* obj) NLIB_NOEXCEPT;
74  NLIB_VIS_HIDDEN bool GetString(MpObject* obj) NLIB_NOEXCEPT;
75  NLIB_VIS_HIDDEN bool GetNumber(MpObject* obj) NLIB_NOEXCEPT;
76 
77  private:
78  errno_t m_ErrorValue;
79  size_t m_MaxArraySize;
80  size_t m_MaxMapSize;
81  size_t m_MaxStrLen;
82  size_t m_MaxDepth;
83  UniquePtr<char[]> m_StrBuf;
84  size_t m_Depth;
85  TextReader m_Reader;
87 };
88 
89 } // namespace msgpack
90 NLIB_NAMESPACE_END
91 
92 #if defined(_MSC_VER) && defined(nx_msgpack_EXPORTS)
93 #undef NLIB_VIS_PUBLIC
94 #define NLIB_VIS_PUBLIC NLIB_WINIMPORT
95 #endif
96 
97 #endif // INCLUDE_NN_NLIB_MSGPACK_JSONREADER_H_
#define NLIB_NOEXCEPT
環境に合わせてnoexcept 又は同等の定義がされます。
Definition: Platform.h:2151
int GetLine() const noexcept
(エラーが発生した付近の)行番号を取得します。
Definition: JsonReader.h:55
Option
Read()に渡すことのできるオプション値が定義されています。
Definition: JsonReader.h:40
#define NLIB_FINAL
利用可能であればfinalが定義されます。そうでない場合は空文字列です。
#define NLIB_NONNULL
全ての引数にNULLを指定することができないことを示します。
Definition: Platform_unix.h:66
#define NLIB_DISALLOW_COPY_AND_ASSIGN(TypeName)
TypeName で指定されたクラスのコピーコンストラクタと代入演算子を禁止します。
Definition: Config.h:126
#define NLIB_SAFE_BOOL(class_name, exp)
クラス内に安全なoperator bool()を定義します。 可能であればC++11のexplicit boolを利用します。 ...
Definition: Config.h:141
bool Close() noexcept
JsonReaderをクローズします。
Definition: JsonReader.h:52
#define NLIB_VIS_HIDDEN
関数やクラス等のシンボルをライブラリの外部に公開しません。
Definition: Platform_unix.h:50
JsonReaderの設定パラメータ群を格納する構造体です。
Definition: JsonReader.h:19
constexpr JsonReaderSettings() noexcept
デフォルトコンストラクタです。各データメンバにデフォルト値を設定します。
Definition: JsonReader.h:32
size_t maxArraySize
読み込むJSON配列の最大サイズを指定します。デフォルトは8192です。
Definition: JsonReader.h:20
constexpr JsonReaderSettings(size_t max_array_size_, size_t max_map_size_, size_t max_str_len_, size_t max_depth_) noexcept
コンストラクタです。それぞれのデータメンバを設定します。
Definition: JsonReader.h:26
std::unique_ptrに相当するクラスが定義されています。
MessagePack又はJSONを読み込むことで作成されるオブジェクトです。
Definition: MpObject.h:83
#define RSIZE_MAX
size_tの最大値よりいくらか小さい値が定義されています。
Definition: Platform.h:295
#define NLIB_CEXPR
利用可能であればconstexprが定義されます。そうでない場合は空文字列です。
size_t maxMapSize
読み込むJSON連想配列の最大サイズを指定します。デフォルトは256です。
Definition: JsonReader.h:21
ストリームからテキストを読み込むクラスを定義しています。
int GetColumn() const noexcept
(エラーが発生した付近の)桁番号を取得します。
Definition: JsonReader.h:56
JSONパーサーです。ストリームからJSON文字列を読み込んでパースします。
Definition: JsonReader.h:38
ストリームからテキストを読み込むクラスです。
Definition: TextReader.h:20
入力ストリームの基底クラスです。このクラスを実体化することはできません。
Definition: InputStream.h:15
size_t maxStrLen
読み込む文字列の最大長(バイト単位)を指定します。デフォルトは2047です。
Definition: JsonReader.h:22
#define NLIB_VIS_PUBLIC
関数やクラス等のシンボルをライブラリの外部に公開します。
Definition: Platform_unix.h:51
bool Read(BinaryReader *r, T *x)
この関数テンプレートを特殊化することで、ユーザー定義クラスに読み込むことができます。 ...
Definition: BinaryReader.h:158
size_t maxDepth
JSONの深さ(再帰構造)の最大値を指定します。デフォルトは7です。
Definition: JsonReader.h:23
InputStream * GetStream() noexcept
Init()で設定したベースストリームを取得します。
Definition: JsonReader.h:54
errno_t GetErrorValue() const noexcept
発生したエラーを取得します。
Definition: JsonReader.h:53
int errno_t
intのtypedefで、戻り値としてPOSIXのエラー値を返すことを示します。
Definition: NMalloc.h:24