nlib
JsonStreamGenerator.h
1 
2 #pragma once
3 #ifndef INCLUDE_NN_NLIB_MSGPACK_JSONSTREAMGENERATOR_H_
4 #define INCLUDE_NN_NLIB_MSGPACK_JSONSTREAMGENERATOR_H_
5 
7 
8 #if defined(_MSC_VER) && defined(nx_msgpack_EXPORTS)
9 #undef NLIB_VIS_PUBLIC
10 #define NLIB_VIS_PUBLIC NLIB_WINEXPORT
11 #endif
12 NLIB_NAMESPACE_BEGIN
13 class OutputStream;
14 namespace msgpack {
15 
17  bool msgpack;
20  bool strict;
22  : msgpack(false), pretty_print(false),
23  omit_utf8_checking(false), strict(false) {}
24 };
25 
27  public:
28  enum Error {
29  ERROR_OK = 0,
30  ERROR_KEY_REQUIRED,
31  ERROR_KEY_FORBIDDEN,
32  ERROR_ENDARRAY_REQUIRED,
33  ERROR_ENDARRAY_FORBIDDEN,
34  ERROR_ENDMAP_REQUIRED,
35  ERROR_ENDMAP_FORBIDDEN,
36  ERROR_STRING_UTF8,
37  ERROR_STREAM,
38  ERROR_ENOMEM,
39  ERROR_ARRAY_OR_MAP_REQUIRED,
40  ERROR_DOCUMENT_END,
41  ERROR_BINARY_NOT_AVAILABLE,
42  ERROR_EXT_NOT_AVAILABLE,
43  ERROR_EINVAL
44  };
45 
46  public:
47  static errno_t Generate(size_t* written, char* str, size_t n, const MpObject& obj,
48  const JsonStreamGeneratorSettings& settings)
50  static errno_t Generate(size_t* written, char* str, size_t n, const MpObject& obj)
53  return Generate(written, str, n, obj, settings);
54  }
55  template<size_t N>
56  static errno_t Generate(size_t* written, char(&str)[N], const MpObject& obj,
58  return Generate(written, str, N, obj, settings);
59  }
60  template<size_t N>
61  static errno_t Generate(size_t* written, char (&str)[N], const MpObject& obj) NLIB_NOEXCEPT {
63  return Generate(written, str, N, obj, settings);
64  }
65 
66  JsonStreamGenerator() NLIB_NOEXCEPT : prv_(NULL), error_(ERROR_OK) {}
69  errno_t Init() NLIB_NOEXCEPT {
71  return Init(settings);
72  }
73  errno_t Open(OutputStream* stream) NLIB_NOEXCEPT NLIB_NONNULL;
74  bool Flush() NLIB_NOEXCEPT;
75  errno_t Close() NLIB_NOEXCEPT;
76 
77  JsonStreamGenerator& StartArray(size_t count) NLIB_NOEXCEPT;
78  JsonStreamGenerator& StartMap(size_t count) NLIB_NOEXCEPT;
79  JsonStreamGenerator& Key(const char* key) NLIB_NOEXCEPT NLIB_NONNULL;
83  JsonStreamGenerator& Boolean(bool value) NLIB_NOEXCEPT;
84  JsonStreamGenerator& Int8(int8_t num) NLIB_NOEXCEPT;
85  JsonStreamGenerator& Uint8(uint8_t num) NLIB_NOEXCEPT;
86  JsonStreamGenerator& Int16(int16_t num) NLIB_NOEXCEPT;
87  JsonStreamGenerator& Uint16(uint16_t num) NLIB_NOEXCEPT;
88  JsonStreamGenerator& Int32(int32_t num) NLIB_NOEXCEPT;
89  JsonStreamGenerator& Uint32(uint32_t num) NLIB_NOEXCEPT;
90  JsonStreamGenerator& Int64(int64_t num) NLIB_NOEXCEPT;
91  JsonStreamGenerator& Uint64(uint64_t num) NLIB_NOEXCEPT;
92  JsonStreamGenerator& Float(float num) NLIB_NOEXCEPT;
93  JsonStreamGenerator& Double(double num) NLIB_NOEXCEPT;
94  JsonStreamGenerator& String(const char* str) NLIB_NOEXCEPT NLIB_NONNULL;
95  JsonStreamGenerator& Binary(const void* bin, size_t n) NLIB_NOEXCEPT NLIB_NONNULL;
96  JsonStreamGenerator& Ext(int8_t tp, const void* bin, size_t n) NLIB_NOEXCEPT NLIB_NONNULL;
97  JsonStreamGenerator& Object(const MpObject& obj) NLIB_NOEXCEPT;
98 
99  template<class STDSTRING>
100  JsonStreamGenerator& String(const STDSTRING& str) NLIB_NOEXCEPT {
101  return String(str.c_str());
102  }
103  JsonStreamGenerator& EmptyArray() NLIB_NOEXCEPT { return StartArray(0).EndArray(); }
104  JsonStreamGenerator& EmptyMap() NLIB_NOEXCEPT { return StartMap(0).EndMap(); }
105  JsonStreamGenerator& Int8Array(const int8_t* p, size_t count) NLIB_NOEXCEPT NLIB_NONNULL;
106  JsonStreamGenerator& Uint8Array(const uint8_t* p, size_t count) NLIB_NOEXCEPT NLIB_NONNULL;
107  JsonStreamGenerator& Int16Array(const int16_t* p, size_t count) NLIB_NOEXCEPT NLIB_NONNULL;
108  JsonStreamGenerator& Uint16Array(const uint16_t* p, size_t count) NLIB_NOEXCEPT NLIB_NONNULL;
109  JsonStreamGenerator& Int32Array(const int32_t* p, size_t count) NLIB_NOEXCEPT NLIB_NONNULL;
110  JsonStreamGenerator& Uint32Array(const uint32_t* p, size_t count) NLIB_NOEXCEPT NLIB_NONNULL;
111  JsonStreamGenerator& Int64Array(const int64_t* p, size_t count) NLIB_NOEXCEPT NLIB_NONNULL;
112  JsonStreamGenerator& Uint64Array(const uint64_t* p, size_t count) NLIB_NOEXCEPT NLIB_NONNULL;
113  JsonStreamGenerator& FloatArray(const float* p, size_t count) NLIB_NOEXCEPT NLIB_NONNULL;
114  JsonStreamGenerator& DoubleArray(const double* p, size_t count) NLIB_NOEXCEPT NLIB_NONNULL;
115  Error GetError() const NLIB_NOEXCEPT { return error_; }
116  NLIB_SAFE_BOOL(JsonStreamGenerator, error_ == ERROR_OK);
117 
118  private:
119  struct State;
120  NLIB_VIS_HIDDEN State* WriteStartSeq_(size_t count) NLIB_NOEXCEPT;
121  NLIB_VIS_HIDDEN bool JsonIndent_(size_t level) NLIB_NOEXCEPT;
122  NLIB_VIS_HIDDEN bool CheckAndStateChange_() NLIB_NOEXCEPT;
123  NLIB_VIS_HIDDEN bool WriteJsonString_(const char* str, size_t n) NLIB_NOEXCEPT NLIB_NONNULL;
124  NLIB_VIS_HIDDEN bool WriteMsgpackString_(const char* str, size_t n) NLIB_NOEXCEPT NLIB_NONNULL;
125  NLIB_VIS_HIDDEN void String_(const char* str, size_t n) NLIB_NOEXCEPT NLIB_NONNULL;
126  NLIB_VIS_HIDDEN void Key_(const char* key, size_t n) NLIB_NOEXCEPT NLIB_NONNULL;
127 
128  struct JsonStreamGeneratorPrivate;
129  JsonStreamGeneratorPrivate* prv_;
130  Error error_;
131 };
132 
133 } // namespace msgpack
134 NLIB_NAMESPACE_END
135 
136 #if defined(_MSC_VER) && defined(nx_msgpack_EXPORTS)
137 #undef NLIB_VIS_PUBLIC
138 #define NLIB_VIS_PUBLIC NLIB_WINIMPORT
139 #endif
140 
141 #endif // INCLUDE_NN_NLIB_MSGPACK_JSONSTREAMGENERATOR_H_
static errno_t Generate(size_t *written, char(&str)[N], const MpObject &obj) noexcept
JsonStreamGeneratorSettingsのデフォルト設定でGenerate(written, str, N, obj, settings)を実行します。 ...
errno_t Init() noexcept
デフォルト設定でパーサーの初期化を行います。
bool strict
trueの場合は最初の出力が、配列かマップでない場合にエラーを発生させます。
JsonStreamGenerator & EmptyArray() noexcept
空の配列を出力します。
#define NLIB_SAFE_BOOL(class_name, exp)
クラス内に安全なoperator bool()を定義します。 可能であればC++11のexplicit boolを利用します。 ...
Definition: Config.h:160
JsonStreamGenerator & EndArray() noexcept
配列を終了します。
Error GetError() const noexcept
エラーを取得します。
JsonStreamGenerator() noexcept
デフォルトコンストラクタです。
#define NLIB_VIS_HIDDEN
関数やクラス等のシンボルをライブラリの外部に公開しません。
Definition: Platform_unix.h:60
#define NLIB_VIS_PUBLIC
関数やクラス等のシンボルをライブラリの外部に公開します。
Definition: Platform_unix.h:61
bool omit_utf8_checking
trueの場合は文字列の出力時にUTF-8であるかどうかのチェックを省略します。
MessagePack又はJSONを読み込むことで作成されるオブジェクトです。
Definition: MpObject.h:82
static errno_t Generate(size_t *written, char(&str)[N], const MpObject &obj, const JsonStreamGeneratorSettings &settings) noexcept
Generate(written, str, N, obj, settings)を実行します。
static errno_t Generate(size_t *written, char *str, size_t n, const MpObject &obj) noexcept
JsonStreamGeneratorSettingsのデフォルト設定でGenerate(written, str, n, obj, settings)を実行します。 ...
#define NLIB_NONNULL_2
2番目の引数にNULLを指定することができないことを示します。
Definition: Platform_unix.h:78
JsonStreamGenerator & String(const STDSTRING &str) noexcept
文字列を出力します。
bool msgpack
trueの場合はJsonStreamGeneratorはJSONを出力し、falseの場合はmsgpackを出力します。 ...
MessagePack, JSON及びCSVを読み込むと作成されるオブジェクトです。
constexpr JsonStreamGeneratorSettings() noexcept
デフォルトコンストラクタです。各データメンバにデフォルト値を設定します。
#define NLIB_NOEXCEPT
環境に合わせてnoexcept 又は同等の定義がされます。
Definition: Config.h:86
#define NLIB_CEXPR
利用可能であればconstexprが定義されます。そうでない場合は空文字列です。
Definition: Config.h:80
bool pretty_print
trueの場合はJSON出力時に整形されたJSONを出力します。
#define NLIB_FINAL
利用可能であればfinalが定義されます。そうでない場合は空文字列です。
Definition: Config.h:211
JsonStreamGeneratorの設定パラメータ群を格納する構造体です。
JsonStreamGenerator & EndMap() noexcept
マップを終了します。
JsonStreamGenerator & EmptyMap() noexcept
空のマップを出力します。
JSON又はmsgpackを出力するためのクラスです。
#define NLIB_NONNULL
全ての引数にNULLを指定することができないことを示します。
Definition: Platform_unix.h:76
出力ストリームの基底クラスです。このクラスを実体化することはできません。
Definition: OutputStream.h:17
int errno_t
intのtypedefで、戻り値としてPOSIXのエラー値を返すことを示します。
Definition: NMalloc.h:24