Solution46
CJsonConfigAuto.cpp
[詳解]
1 //=============================================================================
2 /// @file
3 /// JSON構成情報自動セクションブロッククラス実装ファイル
4 ///
5 /// JSON構成情報自動セクションブロッククラス実装ファイルです。
6 ///
7 /// $Id: CJsonConfigAuto.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 <CJsonConfigAuto.h>
18 
19 //=============================================================================
20 // JSONライブラリ名前空間
21 namespace LibJson {
22  //=========================================================================
23  // JSON構成情報自動セクションブロッククラス
24  //=========================================================================
25  // 構築子と解体子
26  //-------------------------------------------------------------------------
27  // コンストラクタ
28  CJsonConfigAuto::CJsonConfigAuto( CJsonConfig& rcConfig, wchar_t const* pszSection, int nIndex, wchar_t const* pszPath, bool bClear ) noexcept
29  // メンバ変数初期化
30  : m_rcConfig( rcConfig )
31  , m_cCurrPath()
32  , m_bResult( false )
33  {
34  // 処理ブロック
35  do {
36  // 空か調べる
37  if ( m_rcConfig.IsEmpty() ) {
38  // JSONドキュメントを初期化する
39  if ( !m_rcConfig.SetCurrentSetValue( L"{}" ) ) {
40  // 失敗!
41  break;
42  }
43  }
44 
45  // カレントJSONパスを取得する
46  if ( !m_rcConfig.GetCurrentPath( m_cCurrPath ) ) {
47  // 失敗!
48  break;
49  }
50  // JSONパス文字列ポインタを調べる
51  else if ( nullptr != pszPath ) {
52  // カレントJSONパスを設定する
53  if ( !m_rcConfig.SetCurrentPath( pszPath ) ) {
54  // JSONパスを作成する
55  if ( !m_rcConfig.CreatePath( pszPath ) ) {
56  // 失敗!
57  break;
58  }
59  // カレントJSONパスを設定する
60  else if ( !m_rcConfig.SetCurrentPath( pszPath ) ) {
61  // 失敗!
62  break;
63  }
64  }
65  }
66 
67  // セクションインデックスを調べる
68  CString cSection( pszSection );
69  if ( 0 <= nIndex ) {
70  // インデックスを追加する
71  cSection += CString().Format( L"[%d]", nIndex );
72  }
73 
74  // JSONパスを検索する
75  CJson* pcJson = m_rcConfig.FindJsonPath( cSection, m_rcConfig.GetCurrentJson() );
76  if ( nullptr == pcJson ) {
77  // JSONパスを作成する
78  if ( !m_rcConfig.CreatePath( cSection ) ) {
79  // 失敗!
80  break;
81  }
82  }
83 
84  // カレントパスを設定する
85  if ( !m_rcConfig.SetCurrentPath( cSection ) ) {
86  // 失敗!
87  break;
88  }
89  // セクションクリアフラグを調べる
90  else if ( bClear ) {
91  // セクションデータを初期化する
92  if ( !m_rcConfig.SetCurrentSetValue( L"null" ) ) {
93  // 失敗!
94  break;
95  }
96  }
97 
98  // 成功!
99  m_bResult = true;
100  } while ( false );
101  }
102 
103  //-------------------------------------------------------------------------
104  // デストラクタ
106  // 実行結果を調べる
107  if ( m_bResult ) {
108  // カレントJSON設定値を取得する
109  CString cValue;
110  if ( m_rcConfig.GetCurrentSetValue( cValue ) ) {
111  // カレントJSON設定値を調べる
112  if ( ( 0 == ::wcscmp( L"null", cValue ) ) || ( 0 == ::wcscmp( L"{}", cValue ) ) ) {
113  // カレントJSONクラスを削除する
115  }
116  }
117 
118  // カレントJSONパスを復元する
120  }
121  }
122 }
123 
124 #pragma managed( pop )
virtual bool GetCurrentSetValue(CString &rcValue, bool bClassName=false, bool bQuotes=true) noexcept
カレント設定値文字列取得関数
CString m_cCurrPath
JSONカレントパス
bool m_bResult
実行結果
virtual bool DeleteCurrentJson() noexcept
カレントJSONクラス削除関数
JSONライブラリ名前空間
Definition: CJson.h:24
JSON構成情報クラス
Definition: CJsonConfig.h:31
CJsonConfigAuto(CJsonConfig &rcConfig, wchar_t const *pszSection, int nIndex, wchar_t const *pszPath, bool bClear=false) noexcept
コンストラクタ
JSONクラス
Definition: CJson.h:44
virtual wchar_t const * Format(wchar_t const *pszFormat,...) noexcept
書式設定文字列代入関数
Definition: CString.cpp:930
CJsonConfig & m_rcConfig
JSON構成情報参照
文字列クラス
Definition: CString.h:31
virtual bool SetCurrentPath(wchar_t const *pszPath) noexcept
カレントパス設定関数
virtual ~CJsonConfigAuto() noexcept
デストラクタ
JSON構成情報自動セクションブロッククラスヘッダファイル