nlib
JsonStreamGenerator.h
1 
2 /*---------------------------------------------------------------------------*
3 
4  Project: CrossRoad
5  Copyright (C)2012-2016 Nintendo. All rights reserved.
6 
7  These coded instructions, statements, and computer programs contain
8  proprietary information of Nintendo of America Inc. and/or Nintendo
9  Company Ltd., and are protected by Federal copyright law. They may
10  not be disclosed to third parties or copied or duplicated in any form,
11  in whole or in part, without the prior written consent of Nintendo.
12 
13  *---------------------------------------------------------------------------*/
14 
15 #pragma once
16 #ifndef INCLUDE_NN_NLIB_MSGPACK_JSONSTREAMGENERATOR_H_
17 #define INCLUDE_NN_NLIB_MSGPACK_JSONSTREAMGENERATOR_H_
18 
20 
21 #if defined(_MSC_VER) && defined(nx_msgpack_EXPORTS)
22 #undef NLIB_VIS_PUBLIC
23 #define NLIB_VIS_PUBLIC NLIB_WINEXPORT
24 #endif
25 NLIB_NAMESPACE_BEGIN
26 class OutputStream;
27 namespace msgpack {
28 
30  bool msgpack;
33  bool strict;
35  : msgpack(false), pretty_print(false),
36  omit_utf8_checking(false), strict(false) {}
37 };
38 
40  public:
41  enum Error {
42  ERROR_OK = 0,
43  ERROR_KEY_REQUIRED,
44  ERROR_KEY_FORBIDDEN,
45  ERROR_ENDARRAY_REQUIRED,
46  ERROR_ENDARRAY_FORBIDDEN,
47  ERROR_ENDMAP_REQUIRED,
48  ERROR_ENDMAP_FORBIDDEN,
49  ERROR_STRING_UTF8,
50  ERROR_STREAM,
51  ERROR_ENOMEM,
52  ERROR_ARRAY_OR_MAP_REQUIRED,
53  ERROR_DOCUMENT_END,
54  ERROR_BINARY_NOT_AVAILABLE,
55  ERROR_EXT_NOT_AVAILABLE,
56  ERROR_EINVAL
57  };
58 
59  public:
60  static errno_t Generate(size_t* written, char* str, size_t n, const MpObject& obj,
61  const JsonStreamGeneratorSettings& settings)
63  static errno_t Generate(size_t* written, char* str, size_t n, const MpObject& obj)
66  return Generate(written, str, n, obj, settings);
67  }
68  template<size_t N>
69  static errno_t Generate(size_t* written, char(&str)[N], const MpObject& obj,
71  return Generate(written, str, N, obj, settings);
72  }
73  template<size_t N>
74  static errno_t Generate(size_t* written, char (&str)[N], const MpObject& obj) NLIB_NOEXCEPT {
76  return Generate(written, str, N, obj, settings);
77  }
78 
79  JsonStreamGenerator() NLIB_NOEXCEPT : prv_(NULL), error_(ERROR_OK) {}
82  errno_t Init() NLIB_NOEXCEPT {
84  return Init(settings);
85  }
86  errno_t Open(OutputStream* stream) NLIB_NOEXCEPT NLIB_NONNULL;
87  bool Flush() NLIB_NOEXCEPT;
88  errno_t Close() NLIB_NOEXCEPT;
89 
90  JsonStreamGenerator& StartArray(size_t count) NLIB_NOEXCEPT;
91  JsonStreamGenerator& StartMap(size_t count) NLIB_NOEXCEPT;
92  JsonStreamGenerator& Key(const char* key) NLIB_NOEXCEPT NLIB_NONNULL;
96  JsonStreamGenerator& Boolean(bool value) NLIB_NOEXCEPT;
97  JsonStreamGenerator& Int8(int8_t num) NLIB_NOEXCEPT;
98  JsonStreamGenerator& Uint8(uint8_t num) NLIB_NOEXCEPT;
99  JsonStreamGenerator& Int16(int16_t num) NLIB_NOEXCEPT;
100  JsonStreamGenerator& Uint16(uint16_t num) NLIB_NOEXCEPT;
101  JsonStreamGenerator& Int32(int32_t num) NLIB_NOEXCEPT;
102  JsonStreamGenerator& Uint32(uint32_t num) NLIB_NOEXCEPT;
103  JsonStreamGenerator& Int64(int64_t num) NLIB_NOEXCEPT;
104  JsonStreamGenerator& Uint64(uint64_t num) NLIB_NOEXCEPT;
105  JsonStreamGenerator& Float(float num) NLIB_NOEXCEPT;
106  JsonStreamGenerator& Double(double num) NLIB_NOEXCEPT;
107  JsonStreamGenerator& String(const char* str) NLIB_NOEXCEPT NLIB_NONNULL;
108  JsonStreamGenerator& Binary(const void* bin, size_t n) NLIB_NOEXCEPT NLIB_NONNULL;
109  JsonStreamGenerator& Ext(int8_t tp, const void* bin, size_t n) NLIB_NOEXCEPT NLIB_NONNULL;
110  JsonStreamGenerator& Object(const MpObject& obj) NLIB_NOEXCEPT;
111 
112  template<class STDSTRING>
113  JsonStreamGenerator& String(const STDSTRING& str) NLIB_NOEXCEPT {
114  return String(str.c_str());
115  }
116  JsonStreamGenerator& EmptyArray() NLIB_NOEXCEPT { return StartArray(0).EndArray(); }
117  JsonStreamGenerator& EmptyMap() NLIB_NOEXCEPT { return StartMap(0).EndMap(); }
118  JsonStreamGenerator& Int8Array(const int8_t* p, size_t count) NLIB_NOEXCEPT NLIB_NONNULL;
119  JsonStreamGenerator& Uint8Array(const uint8_t* p, size_t count) NLIB_NOEXCEPT NLIB_NONNULL;
120  JsonStreamGenerator& Int16Array(const int16_t* p, size_t count) NLIB_NOEXCEPT NLIB_NONNULL;
121  JsonStreamGenerator& Uint16Array(const uint16_t* p, size_t count) NLIB_NOEXCEPT NLIB_NONNULL;
122  JsonStreamGenerator& Int32Array(const int32_t* p, size_t count) NLIB_NOEXCEPT NLIB_NONNULL;
123  JsonStreamGenerator& Uint32Array(const uint32_t* p, size_t count) NLIB_NOEXCEPT NLIB_NONNULL;
124  JsonStreamGenerator& Int64Array(const int64_t* p, size_t count) NLIB_NOEXCEPT NLIB_NONNULL;
125  JsonStreamGenerator& Uint64Array(const uint64_t* p, size_t count) NLIB_NOEXCEPT NLIB_NONNULL;
126  JsonStreamGenerator& FloatArray(const float* p, size_t count) NLIB_NOEXCEPT NLIB_NONNULL;
127  JsonStreamGenerator& DoubleArray(const double* p, size_t count) NLIB_NOEXCEPT NLIB_NONNULL;
128  Error GetError() const NLIB_NOEXCEPT { return error_; }
129  NLIB_SAFE_BOOL(JsonStreamGenerator, error_ == ERROR_OK);
130 
131  private:
132  struct State;
133  NLIB_VIS_HIDDEN State* WriteStartSeq_(size_t count) NLIB_NOEXCEPT;
134  NLIB_VIS_HIDDEN bool JsonIndent_(size_t level) NLIB_NOEXCEPT;
135  NLIB_VIS_HIDDEN bool CheckAndStateChange_() NLIB_NOEXCEPT;
136  NLIB_VIS_HIDDEN bool WriteJsonString_(const char* str, size_t n) NLIB_NOEXCEPT NLIB_NONNULL;
137  NLIB_VIS_HIDDEN bool WriteMsgpackString_(const char* str, size_t n) NLIB_NOEXCEPT NLIB_NONNULL;
138  NLIB_VIS_HIDDEN void String_(const char* str, size_t n) NLIB_NOEXCEPT NLIB_NONNULL;
139  NLIB_VIS_HIDDEN void Key_(const char* key, size_t n) NLIB_NOEXCEPT NLIB_NONNULL;
140 
141  struct JsonStreamGeneratorPrivate;
142  JsonStreamGeneratorPrivate* prv_;
143  Error error_;
144 };
145 
146 } // namespace msgpack
147 NLIB_NAMESPACE_END
148 
149 #if defined(_MSC_VER) && defined(nx_msgpack_EXPORTS)
150 #undef NLIB_VIS_PUBLIC
151 #define NLIB_VIS_PUBLIC NLIB_WINIMPORT
152 #endif
153 
154 #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:173
JsonStreamGenerator & EndArray() noexcept
配列を終了します。
Error GetError() const noexcept
エラーを取得します。
JsonStreamGenerator() noexcept
デフォルトコンストラクタです。
#define NLIB_VIS_HIDDEN
関数やクラス等のシンボルをライブラリの外部に公開しません。
Definition: Platform_unix.h:86
#define NLIB_VIS_PUBLIC
関数やクラス等のシンボルをライブラリの外部に公開します。
Definition: Platform_unix.h:87
bool omit_utf8_checking
trueの場合は文字列の出力時にUTF-8であるかどうかのチェックを省略します。
MessagePack又はJSONを読み込むことで作成されるオブジェクトです。
Definition: MpObject.h:95
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を指定することができないことを示します。
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:99
#define NLIB_CEXPR
利用可能であればconstexprが定義されます。そうでない場合は空文字列です。
Definition: Config.h:93
bool pretty_print
trueの場合はJSON出力時に整形されたJSONを出力します。
#define NLIB_FINAL
利用可能であればfinalが定義されます。そうでない場合は空文字列です。
Definition: Config.h:224
JsonStreamGeneratorの設定パラメータ群を格納する構造体です。
JsonStreamGenerator & EndMap() noexcept
マップを終了します。
JsonStreamGenerator & EmptyMap() noexcept
空のマップを出力します。
JSON又はmsgpackを出力するためのクラスです。
#define NLIB_NONNULL
全ての引数にNULLを指定することができないことを示します。
出力ストリームの基底クラスです。このクラスを実体化することはできません。
Definition: OutputStream.h:30
int errno_t
intのtypedefで、戻り値としてPOSIXのエラー値を返すことを示します。
Definition: NMalloc.h:37