TNB Library
TnbTmlVariableManager.h
[詳解]
1#pragma once
13#include "TnbTmlValue.h"
14
15
16
17//TNB Library
18namespace TNB
19{
20
21
22
36{
37public:
38
40 struct TVarValue
41 {
44 };
45
48
51
54 {
57 };
58
61
64
65
66 //-----------------------------
67
68
71 {
72 }
73
78 CTmlVariableManager(const CTmlVariableManager& other) : m_aVava(other.m_aVava), m_aArva(other.m_aArva)
79 {
80 }
81
88 {
89 return m_aVava;
90 }
91
98 {
99 return m_aArva;
100 }
101
106 INT_PTR GetLevel(void) const
107 {
108 return m_aVava.GetSize();
109 }
110
118 CTmlValue* FindValue(LPCSTR lpszName)
119 {
120 INT_PTR iDim1 = m_aVava.GetSize();
121 for( INT_PTR i = iDim1 - 1; i >= 0; i-- )
122 {
123 CVaVaVector& va = m_aVava.Ref(i);
124 INT_PTR iDim2 = va.GetSize();
125 for( INT_PTR j = 0; j < iDim2; j++ )
126 {
127 TVarValue& T = va.Ref(j);
128 if ( T.name.Compare(lpszName) == 0 )
129 {
130 return &T.value;
131 }
132 }
133 }
134 return NULL;
135 }
136
144 CTmlValuesVector* FindArray(LPCSTR lpszName)
145 {
146 INT_PTR iDim1 = m_aArva.GetSize();
147 for( INT_PTR i = iDim1 - 1; i >= 0; i-- )
148 {
149 CArVaVector& va = m_aArva.Ref(i);
150 INT_PTR iDim2 = va.GetSize();
151 for( INT_PTR j = 0; j < iDim2; j++ )
152 {
153 TArrayValue& T = va.Ref(j);
154 if ( T.name.Compare(lpszName) == 0 )
155 {
156 return &T.values;
157 }
158 }
159 }
160 return NULL;
161 }
162
166 void Empty(void)
167 {
168 m_aVava.RemoveAll();
169 m_aArva.RemoveAll();
170 }
171
175 void IncLevel(void)
176 {
177 m_aVava.Add(CVaVaVector());
178 m_aArva.Add(CArVaVector());
179 //
180 TTRACE1("CTmlVariableManager::レベル++ NowLvl=%d\n", GetLevel());
181 }
182
188 bool DecLevel(void)
189 {
190 INT_PTR l = m_aVava.GetSize();
191 if ( l <= 0 )
192 {
193 return false;
194 }
195 #ifdef _DEBUG
196 CAscii s;
197 {
198 CVaVaVector& va = m_aVava.Ref(l - 1);
199 INT_PTR iDim = va.GetSize();
200 for( INT_PTR i = 0; i < iDim; i++ )
201 {
202 s.Format( " del-> 変数 %s (=%s)\n",
203 va[i].name,
204 va[i].value.GetString()
205 );
206 ::OutputDebugStringA( s );
207 }
208 }
209 //
210 {
211 CArVaVector& va = m_aArva.Ref(l - 1);
212 INT_PTR iDim = va.GetSize();
213 for( INT_PTR i = 0; i < iDim; i++ )
214 {
215 s.Format( " del-> 配列 %s(%d)\n",
216 va[i].name,
217 va[i].values.GetSize()
218 );
219 ::OutputDebugStringA( s );
220 }
221 }
222
223 #endif
224 //
225 m_aVava.SetSize(l - 1);
226 m_aArva.SetSize(l - 1);
227 TTRACE1( "CTmlVariableManager::レベル-- NowLvl=%d\n", GetLevel() );
228 return true;
229 }
230
238 bool DecLevels(INT_PTR level)
239 {
240 while( level < GetLevel() )
241 {
242 if ( ! DecLevel() )
243 {
244 return false;
245 }
246 }
247 return true;
248 }
249
257 bool HasNameInNowLevel(LPCSTR lpszName) const
258 {
259 size_t l = m_aVava.GetSize();
260 if ( l > 0 )
261 {
262 const CVaVaVector& va = m_aVava.At(l - 1);
263 loop ( i, va.GetSize() )
264 {
265 if ( va[i].name.Compare(lpszName) == 0 )
266 {
267 return true;
268 }
269 }
270 const CArVaVector& aa = m_aArva.At(l - 1);
271 loop ( i, aa.GetSize() )
272 {
273 if ( aa[i].name.Compare(lpszName) == 0 )
274 {
275 return true;
276 }
277 }
278 }
279 return false;
280 }
281
290 bool AddValue(LPCSTR lpszName, const CTmlValue& v)
291 {
292 size_t l = m_aVava.GetSize();
293 if ( l == 0 )
294 {
295 return false;
296 }
297 TVarValue vv;
298 vv.name = lpszName;
299 vv.value = v;
300 m_aVava.Ref(l - 1).Add(vv);
301 return true;
302 }
303
312 bool AddArray(LPCSTR lpszName, size_t size)
313 {
314 size_t l = m_aArva.GetSize();
315 if ( l == 0 || size == 0 )
316 {
317 return false;
318 }
319 TArrayValue d;
320 d.name = lpszName;
321 d.values.SetSize(size);
322 m_aArva.Ref(l - 1).Add(d);
323 return true;
324 }
325
326private:
327 CVaVaVectors m_aVava;
328 CArVaVectors m_aArva;
329};
330
331
332
333}; // TNB
334
#define loop(VAR, CNT)
loop構文.
Definition: TnbDef.h:343
TinyMacroLang 値関係のヘッダ
int Compare(const TYP *lpszSubject) const
[確認] 文字列比較
Definition: TnbStr.h:658
void Format(const TYP *lpszFormat,...)
[代入] 書式付き文字列代入.
Definition: TnbStr.h:359
TinyMacroLang 値管理
Definition: TnbTmlValue.h:43
TinyMacroLang 変数管理
CVectorT< TVarValue > CVaVaVector
変数名と内容の配列型
CTmlValue * FindValue(LPCSTR lpszName)
[検索] 変数名の検索 変数名に対になる値管理のポインタを返します。
bool DecLevel(void)
[設定] レベル−1.
bool AddArray(LPCSTR lpszName, size_t size)
[追加] 配列情報追加.
void IncLevel(void)
[設定] レベル+1.
CVectorT< CArVaVector > CArVaVectors
配列名と内容の二次元配列型
CArVaVectors & ReferArrayArrays(void)
[取得] 配列情報参照.
void Empty(void)
[設定] Empty
CTmlVariableManager(const CTmlVariableManager &other)
コピーコンストラクタ.
bool HasNameInNowLevel(LPCSTR lpszName) const
[検索] 現レベルに指定名あるか.
CTmlVariableManager(void)
コンストラクタ
CVaVaVectors & ReferVarArrays(void)
[取得] 変数情報参照.
INT_PTR GetLevel(void) const
[取得] 現在のレベル取得.
CVectorT< TArrayValue > CArVaVector
配列名と内容の配列型
bool DecLevels(INT_PTR level)
[設定] レベル指定.
CVectorT< CVaVaVector > CVaVaVectors
変数名と内容の二次元配列型
CTmlValuesVector * FindArray(LPCSTR lpszName)
[検索] 配列名の検索 配列名に対になる配列管理のポインタを返します。
bool AddValue(LPCSTR lpszName, const CTmlValue &v)
[追加] 変数情報追加.
配列型情報管理テンプレート
Definition: TnbVector.h:75
virtual size_t GetSize(void) const
[取得] サイズ取得
Definition: TnbVector.h:368
virtual const TYP & At(INDEX index) const
[取得] 要素の参照取得.
Definition: TnbVector.h:233
virtual bool SetSize(size_t size)
[操作] サイズ指定
Definition: TnbVector.h:618
virtual TYP & Ref(INDEX index)
[取得] 要素の参照取得.
Definition: TnbVector.h:246
virtual bool RemoveAll(void)
[削除] 空化
Definition: TnbVector.h:565
virtual INDEX Add(const TYP &t)
[追加] 要素一つ追加.
Definition: TnbVector.h:383
TNB Library
Definition: TnbDoxyTitle.txt:2
TinyMacroLang 配列名と内容型
TinyMacroLang 変数名と内容の型
virtual INT_PTR Compare(const IConstCollectionT< TYP > &c) const
[確認] 比較.