Solution46
CJson.h
[詳解]
1 //=============================================================================
2 /// @file
3 /// JSONクラスヘッダファイル
4 ///
5 /// JSONクラスヘッダファイルです。
6 ///
7 /// $Id: CJson.h 245 2019-03-20 15:03:41Z admin $
8 /// $Date: 2019-03-21 00:03:41 +0900 (2019/03/21 (木)) $
9 /// $Author: admin $
10 ///
11 /// @attention なし
12 
13 #pragma once
14 #pragma managed( push, off )
15 
16 //=============================================================================
17 // インクルードファイル
18 #include <LibJsonDef.h>
19 #include <CStream.h>
20 #include <CArray.h>
21 
22 //=============================================================================
23 // JSONライブラリ名前空間
24 namespace LibJson {
25  //=========================================================================
26  // 前方宣言
27  class CJsonObject; // JSONオブジェクトクラス
28  class CJsonArray; // JSON配列クラス
29  class CJsonString; // JSON文字列クラス
30  class CJsonNumber; // JSON数値クラス
31  class CJsonFixed; // JSON固定値クラス
32  class CJsonPair; // JSONペアクラス
33  class CJsonValue; // JSONバリュークラス
34  class CJsonContainer; // JSONコンテナクラス
35  class CJsonToken; // JSONトークンクラス
36 
37  //=========================================================================
38  /// JSONクラス
39  ///
40  /// JSONクラスです。
41  ///
42  /// @attention なし
43  ///
45  //=====================================================================
46  // 公開型定義
47  public:
48  //---------------------------------------------------------------------
49  /// JSONクラス種別列挙体
50  ///
51  /// JSONクラス種別列挙体です。
52  ///
53  /// @attention なし
54  ///
55  enum class EJsonClass {
56  Invalid, ///< 無効値
57  JsonObject, ///< JSONオブジェクトクラス
58  JsonArray, ///< JSON配列クラス
59  JsonString, ///< JSON文字列クラス
60  JsonNumber, ///< JSON数値クラス
61  JsonFixed, ///< JSON固定値クラス
62  JsonPair, ///< JSONペアクラス
63  JsonValue, ///< JSONバリュークラス
64  JsonContainer, ///< JSONコンテナクラス
65  JsonToken, ///< JSONトークンクラス
66  Size ///< 列挙体サイズ
67  };
68 
69  //=====================================================================
70  // 構築子と解体子
71  public:
72  //---------------------------------------------------------------------
73  /// コンストラクタ
74  ///
75  /// コンストラクタです。
76  ///
77  /// @param[in] pcParent 親JSONクラスポインタ
78  /// @return なし
79  /// @attention なし
80  ///
81  explicit CJson( CJson* pcParent ) noexcept;
82 
83  //---------------------------------------------------------------------
84  /// デストラクタ
85  ///
86  /// デストラクタです。
87  ///
88  /// @param なし
89  /// @return なし
90  /// @attention なし
91  ///
92  virtual ~CJson() noexcept;
93 
94  //=====================================================================
95  // インライン公開関数
96  public:
97  //---------------------------------------------------------------------
98  /// 親JSONクラス取得関数
99  ///
100  /// 親JSONクラス取得関数です。
101  ///
102  /// @param なし
103  /// @return JSONクラスポインタ
104  /// @attention なし
105  ///
106  inline virtual CJson* GetJsonParent() noexcept { return m_pcParent; }
107 
108  //---------------------------------------------------------------------
109  /// 親JSONクラス設定関数
110  ///
111  /// 親JSONクラス設定関数です。
112  ///
113  /// @param[in] pcParent 親JSONクラスポインタ
114  /// @return なし
115  /// @attention なし
116  ///
117  inline virtual void SetJsonParent( CJson* pcParent ) noexcept { m_pcParent = pcParent; }
118 
119  //---------------------------------------------------------------------
120  /// JSONクラス種別取得関数
121  ///
122  /// JSONクラス種別取得関数です。
123  ///
124  /// @param なし
125  /// @return JSONクラス種別
126  /// @attention なし
127  ///
128  inline virtual EJsonClass GetJsonClass() noexcept { return EJsonClass::Invalid; }
129 
130  //---------------------------------------------------------------------
131  /// JSONクラス種別判定関数
132  ///
133  /// JSONクラス種別判定関数です。
134  ///
135  /// @param なし
136  /// @return 実行結果
137  /// - true 成功
138  /// - false 失敗
139  /// @attention なし
140  ///
141  inline virtual bool IsJsonObject() noexcept { return false; } // JSONオブジェクトクラス種別判定関数
142  inline virtual bool IsJsonArray() noexcept { return false; } // JSON配列クラス種別判定関数
143  inline virtual bool IsJsonString() noexcept { return false; } // JSON文字列クラス種別判定関数
144  inline virtual bool IsJsonNumber() noexcept { return false; } // JSON数値クラス種別判定関数
145  inline virtual bool IsJsonFixed() noexcept { return false; } // JSON固定値クラス種別判定関数
146  inline virtual bool IsJsonPair() noexcept { return false; } // JSONペアクラス種別判定関数
147  inline virtual bool IsJsonValue() noexcept { return false; } // JSONバリュークラス種別判定関数
148  inline virtual bool IsJsonContainer() noexcept { return false; } // JSONコンテナクラス種別判定関数
149  inline virtual bool IsJsonToken() noexcept { return false; } // JSONトークンクラス種別判定関数
150 
151  //---------------------------------------------------------------------
152  /// JSONクラスインスタンス取得関数
153  ///
154  /// JSONクラスインスタンス取得関数です。
155  ///
156  /// @param なし
157  /// @return JSONクラスインスタンスポインタ
158  /// @attention なし
159  ///
160  inline virtual CJsonObject* GetJsonObject() noexcept { return nullptr; } // JSONオブジェクトクラスインスタンス取得関数
161  inline virtual CJsonArray* GetJsonArray() noexcept { return nullptr; } // JSON配列クラスインスタンス取得関数
162  inline virtual CJsonString* GetJsonString() noexcept { return nullptr; } // JSON文字列クラスインスタンス取得関数
163  inline virtual CJsonNumber* GetJsonNumber() noexcept { return nullptr; } // JSON数値クラスインスタンス取得関数
164  inline virtual CJsonFixed* GetJsonFixed() noexcept { return nullptr; } // JSON固定値クラスインスタンス取得関数
165  inline virtual CJsonPair* GetJsonPair() noexcept { return nullptr; } // JSONペアクラスインスタンス取得関数
166  inline virtual CJsonValue* GetJsonValue() noexcept { return nullptr; } // JSONバリュークラスインスタンス取得関数
167  inline virtual CJsonContainer* GetJsonContainer() noexcept { return nullptr; } // JSONコンテナクラスインスタンス取得関数
168  inline virtual CJsonToken* GetJsonToken() noexcept { return nullptr; } // JSONトークンクラスインスタンス取得関数
169 
170  //=====================================================================
171  // 公開関数
172  public:
173  //---------------------------------------------------------------------
174  /// ルートJSONクラス取得関数
175  ///
176  /// ルートJSONクラス取得関数です。
177  ///
178  /// @param なし
179  /// @return JSONクラスポインタ
180  /// @attention なし
181  ///
182  virtual CJson* GetJsonRoot() noexcept;
183 
184  //---------------------------------------------------------------------
185  /// JSONクラスクリア関数
186  ///
187  /// JSONクラスクリア関数です。
188  ///
189  /// @param なし
190  /// @return なし
191  /// @attention なし
192  ///
193  virtual void ClearJson() noexcept;
194 
195  //---------------------------------------------------------------------
196  /// JSONクラスコンパクト化関数
197  ///
198  /// JSONクラスコンパクト化関数です。
199  ///
200  /// @param なし
201  /// @return 実行結果
202  /// - true 成功
203  /// - false 失敗
204  /// @attention なし
205  ///
206  virtual bool CompactJson() noexcept;
207 
208  //---------------------------------------------------------------------
209  /// JSONクラス入力関数
210  ///
211  /// JSONクラス入力関数です。
212  ///
213  /// @param[in] rcStream 入力ストリーム参照
214  /// @return 実行結果
215  /// - true 成功
216  /// - false 失敗
217  /// @attention なし
218  ///
219  virtual bool InputJson( CStream& rcStream ) noexcept { return false; }
220 
221  //---------------------------------------------------------------------
222  /// JSONクラス出力関数
223  ///
224  /// JSONクラス出力関数です。
225  ///
226  /// @param[in] rcStreamOut 出力ストリーム参照
227  /// @return 実行結果
228  /// - true 成功
229  /// - false 失敗
230  /// @attention なし
231  ///
232  virtual bool OutputJson( CStreamOut& rcStreamOut ) noexcept { return false; }
233 
234  //=====================================================================
235  // 限定公開変数
236  protected:
237  CJson* m_pcParent; ///< 親JSONクラスポインタ
238  CArray< int >* m_pcInputPointerList; ///< 入力ストリームポインタリストポインタ
239 
240  //=====================================================================
241  // 削除関数
242  private:
243  CJson( CJson const& ) = delete;
244  CJson& operator=( CJson const& ) = delete;
245  };
246 }
247 
248 #pragma managed( pop )
JSONペアクラス
Definition: CJsonPair.h:32
JSONオブジェクトクラス
Definition: CJsonObject.h:31
virtual bool OutputJson(CStreamOut &rcStreamOut) noexcept
JSONクラス出力関数
Definition: CJson.h:232
virtual CJsonValue * GetJsonValue() noexcept
Definition: CJson.h:166
virtual CJsonContainer * GetJsonContainer() noexcept
Definition: CJson.h:167
virtual bool IsJsonToken() noexcept
Definition: CJson.h:149
EJsonClass
JSONクラス種別列挙体
Definition: CJson.h:55
virtual CJson * GetJsonParent() noexcept
親JSONクラス取得関数
Definition: CJson.h:106
配列クラスヘッダファイル
JSONライブラリ名前空間
Definition: CJson.h:24
virtual bool InputJson(CStream &rcStream) noexcept
JSONクラス入力関数
Definition: CJson.h:219
JSON配列クラス
Definition: CJsonArray.h:31
virtual bool IsJsonFixed() noexcept
Definition: CJson.h:145
JSONバリュークラス
Definition: CJsonValue.h:30
JSONコンテナクラス
virtual EJsonClass GetJsonClass() noexcept
JSONクラス種別取得関数
Definition: CJson.h:128
virtual bool IsJsonString() noexcept
Definition: CJson.h:143
ストリームクラス
Definition: CStream.h:31
JSONライブラリ定義ヘッダファイル
JSONクラス
Definition: CJson.h:44
ストリーム出力クラス
Definition: CStreamOut.h:30
CArray< int > * m_pcInputPointerList
入力ストリームポインタリストポインタ
Definition: CJson.h:238
virtual CJsonToken * GetJsonToken() noexcept
Definition: CJson.h:168
JSON数値クラス
Definition: CJsonNumber.h:30
virtual void SetJsonParent(CJson *pcParent) noexcept
親JSONクラス設定関数
Definition: CJson.h:117
JSONトークンクラス
Definition: CJsonToken.h:32
virtual bool IsJsonValue() noexcept
Definition: CJson.h:147
CJson * m_pcParent
親JSONクラスポインタ
Definition: CJson.h:237
virtual CJsonString * GetJsonString() noexcept
Definition: CJson.h:162
virtual bool IsJsonObject() noexcept
JSONクラス種別判定関数
Definition: CJson.h:141
JSON固定値クラス
Definition: CJsonFixed.h:30
virtual CJsonFixed * GetJsonFixed() noexcept
Definition: CJson.h:164
virtual bool IsJsonPair() noexcept
Definition: CJson.h:146
virtual CJsonArray * GetJsonArray() noexcept
Definition: CJson.h:161
virtual bool IsJsonNumber() noexcept
Definition: CJson.h:144
ストリームクラスヘッダファイル
virtual bool IsJsonContainer() noexcept
Definition: CJson.h:148
#define LIB_JSON_API
ダイナミックライブラリインポート宣言
Definition: LibJsonDef.h:29
virtual CJsonPair * GetJsonPair() noexcept
Definition: CJson.h:165
virtual bool IsJsonArray() noexcept
Definition: CJson.h:142
virtual CJsonNumber * GetJsonNumber() noexcept
Definition: CJson.h:163
JSON文字列クラス
Definition: CJsonString.h:30
virtual CJsonObject * GetJsonObject() noexcept
JSONクラスインスタンス取得関数
Definition: CJson.h:160