Solution46
CJsonContainer.h
[詳解]
1 //=============================================================================
2 /// @file
3 /// JSONコンテナクラスヘッダファイル
4 ///
5 /// JSONコンテナクラスヘッダファイルです。
6 ///
7 /// $Id: CJsonContainer.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 <CJsonValue.h>
19 #include <CArray.h>
20 
21 //=============================================================================
22 // JSONライブラリ名前空間
23 namespace LibJson {
24  //=========================================================================
25  /// JSONコンテナクラス
26  ///
27  /// JSONコンテナクラスです。
28  ///
29  /// @attention 抽象クラスです。
30  ///
31  class LIB_JSON_API CJsonContainer abstract: public CJsonValue, public CArray< CJson* > {
32  //=====================================================================
33  // 構築子と解体子
34  public:
35  //---------------------------------------------------------------------
36  /// コンストラクタ
37  ///
38  /// コンストラクタです。
39  ///
40  /// @param[in] pcParent 親JSONクラスポインタ
41  /// @return なし
42  /// @attention なし
43  ///
44  explicit CJsonContainer( CJson* pcParent ) noexcept;
45 
46  //---------------------------------------------------------------------
47  /// デストラクタ
48  ///
49  /// デストラクタです。
50  ///
51  /// @param なし
52  /// @return なし
53  /// @attention なし
54  ///
55  virtual ~CJsonContainer() noexcept;
56 
57  //=====================================================================
58  // インライン公開関数
59  public:
60  //---------------------------------------------------------------------
61  /// JSONクラス種別取得関数
62  ///
63  /// JSONクラス種別取得関数です。
64  ///
65  /// @param なし
66  /// @return JSONクラス種別
67  /// @attention オーバライド関数です。
68  ///
69  inline virtual EJsonClass GetJsonClass() noexcept override { return EJsonClass::JsonContainer; }
70 
71  //---------------------------------------------------------------------
72  /// JSONクラス種別判定関数
73  ///
74  /// JSONクラス種別判定関数です。
75  ///
76  /// @param なし
77  /// @return 実行結果
78  /// - true 成功
79  /// - false 失敗
80  /// @attention オーバライド関数です。
81  ///
82  inline virtual bool IsJsonContainer() noexcept override { return true; }
83 
84  //---------------------------------------------------------------------
85  /// JSONクラスインスタンス取得関数
86  ///
87  /// JSONクラスインスタンス取得関数です。
88  ///
89  /// @param なし
90  /// @return JSONクラスインスタンスポインタ
91  /// @attention オーバライド関数です。
92  ///
93  inline virtual CJsonContainer* GetJsonContainer() noexcept override { return this; }
94 
95  //---------------------------------------------------------------------
96  /// オープン文字取得関数
97  ///
98  /// オープン文字取得関数です。
99  ///
100  /// @param なし
101  /// @return 文字コード
102  /// @attention 純粋仮想関数です。
103  ///
104  inline virtual wchar_t GetOpenChar() noexcept = 0;
105 
106  //---------------------------------------------------------------------
107  /// クローズ文字取得関数
108  ///
109  /// クローズ文字取得関数です。
110  ///
111  /// @param なし
112  /// @return 文字コード
113  /// @attention 純粋仮想関数です。
114  ///
115  inline virtual wchar_t GetCloseChar() noexcept = 0;
116 
117  //---------------------------------------------------------------------
118  /// JSONエレメント入力作成関数
119  ///
120  /// JSONエレメント入力作成関数です。
121  ///
122  /// @param[in] rcStream 入力ストリーム参照
123  /// @param[in] pcParent 親JSONクラスポインタ
124  /// @return JSON派生クラスポインタ
125  /// @attention 純粋仮想関数です。
126  ///
127  inline virtual CJson* CreateInputJsonElement( CStream& rcStream, CJson* pcParent ) noexcept = 0;
128 
129  //=====================================================================
130  // 公開関数
131  public:
132  //---------------------------------------------------------------------
133  /// JSONクラスクリア関数
134  ///
135  /// JSONクラスクリア関数です。
136  ///
137  /// @param なし
138  /// @return なし
139  /// @attention オーバライド関数です。
140  ///
141  virtual void ClearJson() noexcept override;
142 
143  //---------------------------------------------------------------------
144  /// JSONクラスコンパクト化関数
145  ///
146  /// JSONクラスコンパクト化関数です。
147  ///
148  /// @param なし
149  /// @return 実行結果
150  /// - true 成功
151  /// - false 失敗
152  /// @attention オーバライド関数です。
153  ///
154  virtual bool CompactJson() noexcept override;
155 
156  //---------------------------------------------------------------------
157  /// JSONクラス入力関数
158  ///
159  /// JSONクラス入力関数です。
160  ///
161  /// @param[in] rcStream 入力ストリーム参照
162  /// @return 実行結果
163  /// - true 成功
164  /// - false 失敗
165  /// @attention オーバライド関数です。
166  ///
167  virtual bool InputJson( CStream& rcStream ) noexcept override;
168 
169  //---------------------------------------------------------------------
170  /// JSONクラス出力関数
171  ///
172  /// JSONクラス出力関数です。
173  ///
174  /// @param[in] rcStreamOut 出力ストリーム参照
175  /// @return 実行結果
176  /// - true 成功
177  /// - false 失敗
178  /// @attention オーバライド関数です。
179  ///
180  virtual bool OutputJson( CStreamOut& rcStreamOut ) noexcept override;
181 
182  //---------------------------------------------------------------------
183  /// JSONエレメント取得関数
184  ///
185  /// JSONエレメント取得関数です。
186  ///
187  /// @param[in] nIndex インデックス
188  /// @return JSONクラスポインタ
189  /// @attention なし
190  ///
191  virtual CJson* GetJsonElement( int nIndex ) noexcept;
192 
193  //---------------------------------------------------------------------
194  /// JSONエレメント設定関数
195  ///
196  /// JSONエレメント設定関数です。
197  ///
198  /// @param[in] nIndex インデックス
199  /// @param[in] pcJson JSONクラスポインタ
200  /// @return 実行結果
201  /// - true 成功
202  /// - false 失敗
203  /// @attention なし
204  ///
205  virtual bool SetJsonElement( int nIndex, CJson* pcJson ) noexcept;
206 
207  //---------------------------------------------------------------------
208  /// JSONエレメント数拡張関数
209  ///
210  /// JSONエレメント数拡張関数です。
211  ///
212  /// @param[in] nCount エレメント数
213  /// @return 実行結果
214  /// - true 成功
215  /// - false 失敗
216  /// @attention なし
217  ///
218  virtual bool ExtendJsonElementCount( int nCount ) noexcept;
219 
220  //=====================================================================
221  // 削除関数
222  private:
223  CJsonContainer( CJsonContainer const& ) = delete;
224  CJsonContainer& operator=( CJsonContainer const& ) = delete;
225  };
226 }
227 
228 #pragma managed( pop )
virtual CJsonContainer * GetJsonContainer() noexcept override
JSONクラスインスタンス取得関数
EJsonClass
JSONクラス種別列挙体
Definition: CJson.h:55
配列クラスヘッダファイル
配列クラス
Definition: CArray.h:33
JSONライブラリ名前空間
Definition: CJson.h:24
JSONバリュークラス
Definition: CJsonValue.h:30
JSONコンテナクラス
ストリームクラス
Definition: CStream.h:31
JSONクラス
Definition: CJson.h:44
ストリーム出力クラス
Definition: CStreamOut.h:30
virtual EJsonClass GetJsonClass() noexcept override
JSONクラス種別取得関数
JSONバリュークラスヘッダファイル
#define LIB_JSON_API
ダイナミックライブラリインポート宣言
Definition: LibJsonDef.h:29
virtual bool IsJsonContainer() noexcept override
JSONクラス種別判定関数