Solution46
CJsonNumber.cpp
[詳解]
1 //=============================================================================
2 /// @file
3 /// JSON数値クラス実装ファイル
4 ///
5 /// JSON数値クラス実装ファイルです。
6 ///
7 /// $Id: CJsonNumber.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 <CJsonNumber.h>
18 
19 //=============================================================================
20 // JSONライブラリ名前空間
21 namespace LibJson {
22  //=========================================================================
23  // JSON数値クラス
24  //=========================================================================
25  // 構築子と解体子
26  //-------------------------------------------------------------------------
27  // コンストラクタ
28  CJsonNumber::CJsonNumber( CJson* pcParent, wchar_t const* pszString ) noexcept
29  // 基底クラスコンストラクタ
30  : CJsonToken( pcParent, pszString )
31  {}
32 
33  //=========================================================================
34  // 公開関数
35  //-------------------------------------------------------------------------
36  // JSONクラス入力関数
37  bool CJsonNumber::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  // JSON整数部を入力する
55  if ( !InputJsonInt( rcStream ) ) {
56  // 失敗!
57  break;
58  }
59 
60  // JSON小数部を入力する
61  InputJsonFrac( rcStream );
62 
63  // JSON指数部を入力する
64  InputJsonExp( rcStream );
65 
66  // コンパクト化する
67  if ( !CString::CompactBuffer() ) {
68  // 失敗!
69  break;
70  }
71 
72  // 成功!
73  result = true;
74  } while ( false );
75 
76  // ストリームポインタをポップする
77  PopStreamPoints( rcStream, !result );
78  } while ( false );
79 
80  // 実行結果を返す
81  return result;
82  }
83 
84  //=========================================================================
85  // 静的公開関数
86  //-------------------------------------------------------------------------
87  // JSON数値入力作成関数
88  CJsonNumber* CJsonNumber::CreateInputJson( CStream& rcStream, CJson* pcParent ) noexcept {
89  // 処理ブロック
90  CJsonNumber* result = nullptr;
91  do {
92  // JSON数値を作成する
93  CJsonNumber* pcJsonNumber = new CJsonNumber( pcParent );
94  if ( nullptr == pcJsonNumber ) {
95  // 失敗!
96  break;
97  }
98  // JSON数値を入力する
99  else if ( !pcJsonNumber->InputJson( rcStream ) ) {
100  // JSON数値を削除する
101  delete pcJsonNumber;
102 
103  // 失敗!
104  break;
105  }
106 
107  // 成功!
108  result = pcJsonNumber;
109  } while ( false );
110 
111  // 実行結果を返す
112  return result;
113  }
114 }
115 
116 #pragma managed( pop )
CJsonNumber(CJson *pcParent, wchar_t const *pszString=nullptr) noexcept
コンストラクタ
Definition: CJsonNumber.cpp:28
JSONライブラリ名前空間
Definition: CJson.h:24
JSON数値クラスヘッダファイル
ストリームクラス
Definition: CStream.h:31
JSONクラス
Definition: CJson.h:44
JSON数値クラス
Definition: CJsonNumber.h:30
JSONトークンクラス
Definition: CJsonToken.h:32
virtual bool CompactBuffer() noexcept
バッファサイズコンパクト化関数
Definition: CString.cpp:348
virtual bool InputJson(CStream &rcStream) noexcept override
JSONクラス入力関数
Definition: CJsonNumber.cpp:37
static CJsonNumber * CreateInputJson(CStream &rcStream, CJson *pcParent) noexcept
JSON数値入力作成関数
Definition: CJsonNumber.cpp:88