Solution46
CJsonString.cpp
[詳解]
1 //=============================================================================
2 /// @file
3 /// JSON文字列クラス実装ファイル
4 ///
5 /// JSON文字列クラス実装ファイルです。
6 ///
7 /// $Id: CJsonString.cpp 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 managed( push, off )
14 
15 //=============================================================================
16 // インクルードファイル
17 #include <CJsonString.h>
18 
19 //=============================================================================
20 // JSONライブラリ名前空間
21 namespace LibJson {
22  //=========================================================================
23  // JSON文字列クラス
24  //=========================================================================
25  // 構築子と解体子
26  //-------------------------------------------------------------------------
27  // コンストラクタ
28  CJsonString::CJsonString( CJson* pcParent, wchar_t const* pszString ) noexcept
29  // 基底クラスコンストラクタ
30  : CJsonToken( pcParent, pszString )
31  {}
32 
33  //=========================================================================
34  // 公開関数
35  //-------------------------------------------------------------------------
36  // JSONクラス入力関数
37  bool CJsonString::InputJson( CStream& rcStream ) noexcept {
38  // 処理ブロック
39  bool result = false;
40  do {
41  // クリアする
42  ClearJson();
43 
44  // ストリームポインタをプッシュする
45  if ( !PushStreamPoints( rcStream ) ) {
46  // 失敗!
47  break;
48  }
49  // 処理ブロック
50  else do {
51  // 空白をスキップする
52  rcStream.SkipSpace();
53 
54  // 1文字スキップする
55  if ( !rcStream.SkipChar( L'\"' ) ) {
56  // 失敗!
57  break;
58  }
59  // JSON文字集合を入力する
60  else if ( !InputJsonChars( rcStream ) ) {
61  // 失敗!
62  break;
63  }
64  // 1文字スキップする
65  else if ( !rcStream.SkipChar( L'\"' ) ) {
66  // 失敗!
67  break;
68  }
69  // コンパクト化する
70  else if ( !CString::CompactBuffer() ) {
71  // 失敗!
72  break;
73  }
74 
75  // 成功!
76  result = true;
77  } while ( false );
78 
79  // ストリームポインタをポップする
80  PopStreamPoints( rcStream, !result );
81  } while ( false );
82 
83  // 実行結果を返す
84  return result;
85  }
86 
87  //-------------------------------------------------------------------------
88  // JSONクラス出力関数
89  bool CJsonString::OutputJson( CStreamOut& rcStreamOut ) noexcept {
90  // 処理ブロック
91  bool result = false;
92  do {
93  // 1文字出力する
94  if ( !rcStreamOut.OutputChar( L'\"' ) ) {
95  // 失敗!
96  break;
97  }
98 
99  // 文字列バッファを調べる
100  if ( nullptr != GetBuffer() ) {
101  // 文字列を出力する
102  if ( !rcStreamOut.OutputString( GetBuffer() ) ) {
103  // 失敗!
104  break;
105  }
106  }
107 
108  // 1文字出力する
109  if ( !rcStreamOut.OutputChar( L'\"' ) ) {
110  // 失敗!
111  break;
112  }
113 
114  // 成功!
115  result = true;
116  } while ( false );
117 
118  // 実行結果を返す
119  return result;
120  }
121 
122  //=========================================================================
123  // 静的公開関数
124  //-------------------------------------------------------------------------
125  // JSON文字列入力作成関数
126  CJsonString* CJsonString::CreateInputJson( CStream& rcStream, CJson* pcParent ) noexcept {
127  // 処理ブロック
128  CJsonString* result = nullptr;
129  do {
130  // JSON文字列を作成する
131  CJsonString* pcJsonString = new CJsonString( pcParent );
132  if ( nullptr == pcJsonString ) {
133  // 失敗!
134  break;
135  }
136  // JSON文字列を入力する
137  else if ( !pcJsonString->InputJson( rcStream ) ) {
138  // JSON文字列を削除する
139  delete pcJsonString;
140 
141  // 失敗!
142  break;
143  }
144 
145  // 成功!
146  result = pcJsonString;
147  } while ( false );
148 
149  // 実行結果を返す
150  return result;
151  }
152 }
153 
154 #pragma managed( pop )
JSONライブラリ名前空間
Definition: CJson.h:24
ストリームクラス
Definition: CStream.h:31
JSONクラス
Definition: CJson.h:44
ストリーム出力クラス
Definition: CStreamOut.h:30
JSONトークンクラス
Definition: CJsonToken.h:32
static CJsonString * CreateInputJson(CStream &rcStream, CJson *pcParent) noexcept
JSON文字列入力作成関数
virtual bool CompactBuffer() noexcept
バッファサイズコンパクト化関数
Definition: CString.cpp:348
CJsonString(CJson *pcParent, wchar_t const *pszString=nullptr) noexcept
コンストラクタ
Definition: CJsonString.cpp:28
virtual bool OutputJson(CStreamOut &rcStreamOut) noexcept override
JSONクラス出力関数
Definition: CJsonString.cpp:89
virtual bool InputJson(CStream &rcStream) noexcept override
JSONクラス入力関数
Definition: CJsonString.cpp:37
JSON文字列クラスヘッダファイル
JSON文字列クラス
Definition: CJsonString.h:30