TNB Library
TnbDntStr.h
[詳解]
1#pragma once
14#include "TnbStrVector.h"
15
16
17
18//T-TestCaseコードカバレッジDisable
19#pragma comment(user,"T-Coverage Disable")
20
21
22
23//TNB Library
24namespace TNB
25{
26
27
28
60class CDoubleNullTerminateStr : public IComparableT<TNB::CDoubleNullTerminateStr>
61{
62 CVectorT<TCHAR> m_vtcText;
63public:
64
69 CDoubleNullTerminateStr(LPCTSTR lpszStr = NULL)
70 {
71 Set(lpszStr);
72 }
73
78 CDoubleNullTerminateStr(const CDoubleNullTerminateStr& d) : m_vtcText(d.m_vtcText)
79 {
80 }
81
89 virtual INT_PTR Compare(const CDoubleNullTerminateStr& t) const
90 {
91 return STRLIB::Compare(ToString(), t.ToString());
92 }
93
97 void Empty(void)
98 {
99 m_vtcText.RemoveAll();
100 m_vtcText.Add(0);
101 m_vtcText.Add(0);
102 }
103
109 void SetDntStr(LPCTSTR lpszzDntStr, TCHAR tcSepaChar = 0)
110 {
111 if ( lpszzDntStr != NULL )
112 {
113 LPCTSTR P = lpszzDntStr;
114 int i = 0;
115 while ( P[i] != tcSepaChar || P[i + 1] != tcSepaChar )
116 {
117 i++;
118 }
119 m_vtcText.SetElements(i + 2, lpszzDntStr);
120 if ( tcSepaChar != 0 )
121 {
122 loop ( i, m_vtcText.GetSize() )
123 {
124 if ( m_vtcText[i] == tcSepaChar )
125 {
126 m_vtcText.Set(i, 0);
127 }
128 }
129 }
130 }
131 else
132 {
133 Empty();
134 }
135 }
136
141 void Set(LPCTSTR lpszStr)
142 {
143 Empty();
144 Add(lpszStr);
145 }
146
152 void Set(const CStrVector& vstr)
153 {
154 Empty();
155 Add(vstr);
156 }
157
163 void Add(LPCTSTR lpszStr)
164 {
165 if ( lpszStr != NULL )
166 {
167 size_t iStrSize = STRLIB::GetLen(lpszStr);
168 if ( iStrSize > 0 )
169 {
170 size_t iVecSize = m_vtcText.GetSize();
171 if ( iVecSize > 2 )
172 {
173 //Emptyじゃない時NULLを一つ残す。
174 m_vtcText.SetSize(iVecSize - 1);
175 m_vtcText.AddElements(iStrSize, lpszStr);
176 }
177 else
178 {
179 m_vtcText.SetElements(iStrSize, lpszStr);
180 }
181 m_vtcText.Add(0);
182 m_vtcText.Add(0);
183 }
184 }
185 }
186
192 void Add(const CStrVector& vstr)
193 {
194 loop ( i, vstr.GetSize() )
195 {
196 Add(vstr[i]);
197 }
198 }
199
204 operator LPCTSTR(void) const
205 {
206 return m_vtcText.ReferBuffer();
207 }
208
213 size_t GetSize(void) const
214 {
215 return m_vtcText.GetSize();
216 }
217
224 {
225 CStrVector vstr;
226 LPCTSTR P = m_vtcText.ReferBuffer();
227 while ( true )
228 {
229 vstr.Add(P);
230 P += STRLIB::GetLen(P) + 1;
231 if ( *P == 0 )
232 {
233 break;
234 }
235 }
236 return vstr;
237 }
238
246 CStr ToString(TCHAR tcSepaChar = '|') const
247 {
248 CStr strResult;
249 CStrVector vstr = ToStrVector();
250 loop ( i, vstr.GetSize() )
251 {
252 strResult += vstr[i];
253 strResult += tcSepaChar;
254 }
255 strResult += tcSepaChar;
256 return strResult;
257 }
258
267 LPTSTR GetBuffer(int iLength)
268 {
269 return m_vtcText.GetBuffer(iLength);
270 }
271
277 void ReleaseBuffer(void)
278 {
279 m_vtcText.ReleaseBuffer();
281 str.SetDntStr(m_vtcText.ReferBuffer());
282 m_vtcText = str.m_vtcText;
283 }
284};
285
286
287
288}; // TNB
289
290
291
292//T-TestCaseコードカバレッジEnable
293#pragma comment(user,"T-Coverage Enable")
#define loop(VAR, CNT)
loop構文.
Definition: TnbDef.h:343
文字列情報配列管理関係のヘッダ
Double Null Terminate(DNT)型文字列管理
Definition: TnbDntStr.h:61
void Set(LPCTSTR lpszStr)
[設定] 代入
Definition: TnbDntStr.h:141
LPTSTR GetBuffer(int iLength)
[操作] 書き込みバッファ要求.
Definition: TnbDntStr.h:267
void Add(LPCTSTR lpszStr)
[設定] 追加.
Definition: TnbDntStr.h:163
CDoubleNullTerminateStr(LPCTSTR lpszStr=NULL)
コンストラクタ
Definition: TnbDntStr.h:69
size_t GetSize(void) const
[取得] DNT型文字列数種特
Definition: TnbDntStr.h:213
void ReleaseBuffer(void)
[操作] 割り当てたバッファを開放.
Definition: TnbDntStr.h:277
void SetDntStr(LPCTSTR lpszzDntStr, TCHAR tcSepaChar=0)
[設定] 代入
Definition: TnbDntStr.h:109
void Add(const CStrVector &vstr)
[設定] 追加.
Definition: TnbDntStr.h:192
CStr ToString(TCHAR tcSepaChar='|') const
[取得] 文字列取得.
Definition: TnbDntStr.h:246
CDoubleNullTerminateStr(const CDoubleNullTerminateStr &d)
コピーコンストラクタ
Definition: TnbDntStr.h:78
void Empty(void)
[設定] 空化
Definition: TnbDntStr.h:97
virtual INT_PTR Compare(const CDoubleNullTerminateStr &t) const
[確認] 比較
Definition: TnbDntStr.h:89
void Set(const CStrVector &vstr)
[設定] 代入
Definition: TnbDntStr.h:152
CStrVector ToStrVector(void) const
[取得] 文字列配列取得.
Definition: TnbDntStr.h:223
virtual size_t GetSize(void) const
[取得] サイズ取得
Definition: TnbVector.h:368
TYP * GetBuffer(size_t size=0)
[操作] データアドレス取得
Definition: TnbVector.h:745
void ReleaseBuffer(void)
[操作] データの管理を元に戻す.
Definition: TnbVector.h:805
virtual bool SetSize(size_t size)
[操作] サイズ指定
Definition: TnbVector.h:618
virtual bool RemoveAll(void)
[削除] 空化
Definition: TnbVector.h:565
virtual size_t AddElements(size_t size, const TYP *P=NULL)
[追加] 複数要素追加.
Definition: TnbVector.h:456
virtual const TYP * ReferBuffer(void) const
[取得] データアドレス取得
Definition: TnbVector.h:664
virtual INDEX Add(const TYP &t)
[追加] 要素一つ追加.
Definition: TnbVector.h:383
virtual bool Set(INDEX index, const TYP &t)
[設定] 要素の設定.
Definition: TnbVector.h:265
virtual size_t SetElements(size_t size, const TYP *P=NULL)
[設定] 複数要素設定.
Definition: TnbVector.h:526
int Compare(LPCSTR P1, LPCSTR P2, INT_PTR len=-1, DWORD dwCmpFlags=0)
[比較] 文字列比較(ASCII/SJIS用)
Definition: TnbStrLib.h:135
size_t GetLen(LPCSTR lpsz)
[計算] 文字列長計算(ASCII/SJIS用)
Definition: TnbStrLib.h:44
TNB Library
Definition: TnbDoxyTitle.txt:2
比較機能インターフェース.
Definition: TnbComparable.h:54