TNB Library
TnbUtf8Str.h
[詳解]
1#pragma once
11#include "TnbStr.h"
12#include "TnbVector.h"
13
14
15
16//T-TestCaseコードカバレッジDisable
17#pragma comment(user,"T-Coverage Disable")
18
19
20
21//TNB Library
22namespace TNB
23{
24
25
26
42class CUtf8Str : public IComparableT<TNB::CUtf8Str>
43{
44 CVectorT<char> m_vtcText;
45public:
46
49 {
50 Empty();
51 }
52
57 CUtf8Str(const CUtf8Str& uft8) : m_vtcText(uft8.m_vtcText)
58 {
59 }
60
65 CUtf8Str(LPCSTR lpszUtf8)
66 {
67 SetOfUtf8(lpszUtf8);
68 }
69
74 CUtf8Str(const CAscii& ascii)
75 {
76 SetOfAscii(ascii);
77 }
78
83 CUtf8Str(const CUnicode& unicode)
84 {
85 SetOfUnicode(unicode);
86 }
87
94 {
95 m_vtcText = other.m_vtcText;
96 return *this;
97 }
98
106 virtual INT_PTR Compare(const CUtf8Str& t) const
107 {
109 }
110
114 void Empty(void)
115 {
116 m_vtcText.RemoveAll();
117 m_vtcText.Add(0);
118 }
119
125 bool IsEmpty(void) const
126 {
127 return GetLength() == 0;
128 }
129
134 void SetOfUtf8(LPCSTR lpszUtf8)
135 {
136 if ( lpszUtf8 == NULL )
137 {
138 Empty();
139 }
140 else
141 {
142 size_t iSize = STRLIB::GetLen(lpszUtf8);
143 MemCopy(m_vtcText.GetBuffer(iSize + 1), lpszUtf8, iSize + 1);
144 m_vtcText.ReleaseBuffer();
145 }
146 }
147
152 void SetOfUnicode(LPCWSTR lpszUnicode)
153 {
154 TTRACE0("UNICODE 文字列を UTF8 文字列に変換\n");
155 if ( lpszUnicode != NULL )
156 {
157 size_t iSize = STRLIB::GetLen(lpszUnicode);
158 if ( iSize > 0 )
159 {
160 int nLen = ::WideCharToMultiByte(CP_UTF8, 0, lpszUnicode, -1, NULL, 0, NULL, NULL);
161 ::WideCharToMultiByte(CP_UTF8, 0, lpszUnicode, -1, m_vtcText.GetBuffer(nLen), nLen, NULL, NULL);
162 m_vtcText.ReleaseBuffer();
163 return;
164 }
165 }
166 Empty();
167 }
168
173 void SetOfAscii(LPCSTR lpszAscii)
174 {
175 SetOfUnicode(CUnicode(lpszAscii));
176 }
177
185 {
186 m_vtcText.SetSize(GetLength());
187 m_vtcText += uft8.m_vtcText;
188 return *this;
189 }
190
197 CUtf8Str operator+(const CUtf8Str& uft8) const
198 {
199 CUtf8Str newUTF8 = *this;
200 newUTF8 += uft8;
201 return newUTF8;
202 }
203
208 size_t GetLength(void) const
209 {
210 return STRLIB::GetLen(ReferBuffer());
211 }
212
217 CUnicode ToUnicode(void) const
218 {
219 TTRACE0("UTF8 文字列を UNICODE 文字列に変換\n");
220 LPCSTR P = m_vtcText.ReferBuffer();
221 int nLen = ::MultiByteToWideChar(CP_UTF8, 0, P, -1, NULL, 0);
222 CUnicode uni;
223 ::MultiByteToWideChar(CP_UTF8, 0, P, -1, uni.GetBuffer(nLen), nLen);
224 uni.ReleaseBuffer();
225 return uni;
226 }
227
232 CAscii ToAscii(void) const
233 {
234 return CAscii(ToUnicode());
235 }
236
241 CStr ToStr(void) const
242 {
243 return CStr(ToUnicode());
244 }
245
250 LPCSTR ReferBuffer(void) const
251 {
252 return m_vtcText.ReferBuffer();
253 }
254
259 operator LPCSTR (void) const
260 {
261 return ReferBuffer();
262 }
263
272 LPSTR GetBuffer(int iLength)
273 {
274 return m_vtcText.GetBuffer(iLength);
275 }
276
282 void ReleaseBuffer(void)
283 {
284 m_vtcText.ReleaseBuffer();
285 CUtf8Str s;
286 s.SetOfUtf8(m_vtcText.ReferBuffer());
287 m_vtcText = s.m_vtcText;
288 }
289};
290
291
292
293}; // TNB
294
295
296
297//T-TestCaseコードカバレッジEnable
298#pragma comment(user,"T-Coverage Enable")
文字列管理関係のヘッダ
配列型情報管理関係のヘッダ
void ReleaseBuffer(void)
[操作] 割り当てたバッファを開放.
Definition: TnbStr.h:954
TYP * GetBuffer(size_t iLength=0)
[操作] 書き込みバッファ要求.
Definition: TnbStr.h:914
Unicode-Translation-Format-8(UTF8)型文字列管理
Definition: TnbUtf8Str.h:43
void SetOfUtf8(LPCSTR lpszUtf8)
[設定] 代入(UTF8用)
Definition: TnbUtf8Str.h:134
void SetOfUnicode(LPCWSTR lpszUnicode)
[設定] 代入(UNICODE用)
Definition: TnbUtf8Str.h:152
bool IsEmpty(void) const
[確認] 空か
Definition: TnbUtf8Str.h:125
void ReleaseBuffer(void)
[操作] 割り当てたバッファを開放.
Definition: TnbUtf8Str.h:282
virtual INT_PTR Compare(const CUtf8Str &t) const
[確認] 比較
Definition: TnbUtf8Str.h:106
size_t GetLength(void) const
[取得] UTF8文字列長さ
Definition: TnbUtf8Str.h:208
CUnicode ToUnicode(void) const
[取得] UNICODE文字列取得
Definition: TnbUtf8Str.h:217
CUtf8Str & operator+=(const CUtf8Str &uft8)
[追加] 追加オペレータ
Definition: TnbUtf8Str.h:184
CUtf8Str(LPCSTR lpszUtf8)
代入コンストラクタ(UTF8用)
Definition: TnbUtf8Str.h:65
CStr ToStr(void) const
[取得] 文字列取得
Definition: TnbUtf8Str.h:241
void SetOfAscii(LPCSTR lpszAscii)
[設定] 代入(ASCII用)
Definition: TnbUtf8Str.h:173
void Empty(void)
[設定] 空化
Definition: TnbUtf8Str.h:114
CUtf8Str & operator=(const CUtf8Str &other)
[代入] コピーオペレータ
Definition: TnbUtf8Str.h:93
CUtf8Str(const CUtf8Str &uft8)
コピーコンストラクタ
Definition: TnbUtf8Str.h:57
CAscii ToAscii(void) const
[取得] ASCII文字列取得
Definition: TnbUtf8Str.h:232
CUtf8Str operator+(const CUtf8Str &uft8) const
[作成] 加算オペレータ
Definition: TnbUtf8Str.h:197
CUtf8Str(void)
コンストラクタ
Definition: TnbUtf8Str.h:48
CUtf8Str(const CUnicode &unicode)
代入コンストラクタ(UNICODE用)
Definition: TnbUtf8Str.h:83
CUtf8Str(const CAscii &ascii)
代入コンストラクタ(ASCII用)
Definition: TnbUtf8Str.h:74
LPSTR GetBuffer(int iLength)
[操作] 書き込みバッファ要求
Definition: TnbUtf8Str.h:272
LPCSTR ReferBuffer(void) const
[取得] UTF8文字列参照取得
Definition: TnbUtf8Str.h:250
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 const TYP * ReferBuffer(void) const
[取得] データアドレス取得
Definition: TnbVector.h:664
virtual INDEX Add(const TYP &t)
[追加] 要素一つ追加.
Definition: TnbVector.h:383
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::CStrT< char > CAscii
ASCII文字列クラス
Definition: TnbStr.h:1758
TNB::CStrT< WCHAR > CUnicode
UNICODE文字列クラス
Definition: TnbStr.h:1771
TNB::CStrT< TCHAR > CStr
文字列クラス
Definition: TnbStr.h:1785
TNB Library
Definition: TnbDoxyTitle.txt:2
void MemCopy(T *_pDst, const void *pSrc, size_t len)
[複製] メモリコピー
Definition: TnbDef.h:376
比較機能インターフェース.
Definition: TnbComparable.h:54