16 #include "config_vtdata.h"
23 # define WIN_UNIX_CDECL __cdecl
26 # define WIN_UNIX_CDECL
30 # define stricmp _stricmp // MBCS/Unicode aware
32 # define stricmp strcasecmp
37 typedef const char *pcchar;
38 typedef const uchar *pcuchar;
47 {
return (
char*)(
this+1); }
73 int GetLength()
const;
80 char GetAt(
int nIndex)
const;
82 char operator[](
int nIndex)
const;
84 void SetAt(
int nIndex,
char ch);
86 operator pcchar()
const;
93 const vtString& operator=(pcchar lpsz);
95 const vtString& operator=(
const uchar* psz);
100 const vtString& operator+=(pcchar lpsz);
104 const vtString& operator+=(
char ch);
106 void Concat(pcchar buffer,
size_t length);
117 int Compare(pcchar lpsz)
const;
119 int CompareNoCase(pcchar lpsz)
const;
121 bool IsNumber()
const;
123 bool Matches(pcchar lpsz)
const;
128 vtString Mid(
int nFirst,
int nCount)
const;
155 int Find(
char ch)
const;
157 int ReverseFind(
char ch)
const;
159 int Find(
char ch,
int nStart)
const;
161 int FindOneOf(pcchar lpszCharSet)
const;
163 int Find(pcchar szSub)
const;
165 int Find(pcchar szSub,
int nStart)
const;
170 int Replace(
char chOld,
char chNew);
172 int Replace(
const char *strOld,
const char *strNew,
bool bReplaceAll =
false);
175 int Remove(
char chRemove);
178 int Insert(
int nIndex,
char ch);
181 int Insert(
int nIndex, pcchar pstr);
183 int Delete(
int nIndex,
int nCount = 1);
187 void WIN_UNIX_CDECL Format(pcchar lpszFormat, ...);
189 void FormatV(pcchar lpszFormat, va_list argList);
191 void FormatForURL(
const char *szInput);
196 void WIN_UNIX_CDECL FormatMessage(pcchar lpszFormat, ...);
200 pchar GetBuffer(
int nMinBufLength);
202 void ReleaseBuffer(
int nNewLength = -1);
204 pchar GetBufferSetLength(
int nNewLength);
223 int GetAllocLength()
const;
231 void AllocCopy(
vtString& dest,
int nCopyLen,
int nCopyIndex,
int nExtraLen)
const;
232 void AllocBuffer(
int nLen);
233 void AssignCopy(
int nSrcLen, pcchar szSrcData);
234 void ConcatCopy(
int nSrc1Len, pcchar szSrc1Data,
int nSrc2Len, pcchar szSrc2Data);
235 void ConcatInPlace(
int nSrcLen, pcchar szSrcData);
236 void CopyBeforeWrite();
237 void AllocBeforeWrite(
int nLen);
240 static size_t SafeStrlen(pcchar lpsz);
246 bool operator==(
const vtString& s1, pcchar s2);
247 bool operator==(pcchar s1,
const vtString& s2);
249 bool operator!=(
const vtString& s1, pcchar s2);
250 bool operator!=(pcchar s1,
const vtString& s2);
252 bool operator<(
const vtString& s1, pcchar s2);
253 bool operator<(pcchar s1,
const vtString& s2);
255 bool operator>(
const vtString& s1, pcchar s2);
256 bool operator>(pcchar s1,
const vtString& s2);
258 bool operator<=(
const vtString& s1, pcchar s2);
259 bool operator<=(pcchar s1,
const vtString& s2);
261 bool operator>=(
const vtString& s1, pcchar s2);
262 bool operator>=(pcchar s1,
const vtString& s2);
265 extern pcchar _vtPchNil;
266 #define vtEmptyString ((vtString&)*(vtString*)&_vtPchNil)
273 inline void vtString::Init()
274 { m_pchData = vtEmptyString.m_pchData; }
275 inline vtString::vtString()
276 { m_pchData = vtEmptyString.m_pchData; }
277 inline vtString::vtString(
const uchar* lpsz)
278 { Init(); *
this = (pcchar)lpsz; }
279 inline const vtString& vtString::operator=(
const uchar* lpsz)
280 { *
this = (pcchar)lpsz;
return *
this; }
282 inline int vtString::GetLength()
const
283 {
return GetData()->nDataLength; }
284 inline int vtString::GetAllocLength()
const
285 {
return GetData()->nAllocLength; }
286 inline bool vtString::IsEmpty()
const
287 {
return GetData()->nDataLength == 0; }
288 inline vtString::operator pcchar()
const
289 {
return m_pchData; }
290 inline size_t vtString::SafeStrlen(pcchar lpsz)
291 {
return (lpsz == NULL) ? 0 : strlen(lpsz); }
294 inline int vtString::Compare(pcchar lpsz)
const
295 {
return strcmp(m_pchData, lpsz); }
296 inline int vtString::CompareNoCase(pcchar lpsz)
const
297 {
return stricmp(m_pchData, lpsz); }
299 inline char vtString::GetAt(
int nIndex)
const
301 return m_pchData[nIndex];
303 inline char vtString::operator[](
int nIndex)
const
306 return m_pchData[nIndex];
309 {
return s1.Compare(s2) == 0; }
310 inline bool operator==(
const vtString& s1, pcchar s2)
311 {
return s1.Compare(s2) == 0; }
312 inline bool operator==(pcchar s1,
const vtString& s2)
313 {
return s2.Compare(s1) == 0; }
315 {
return s1.Compare(s2) != 0; }
316 inline bool operator!=(
const vtString& s1, pcchar s2)
317 {
return s1.Compare(s2) != 0; }
318 inline bool operator!=(pcchar s1,
const vtString& s2)
319 {
return s2.Compare(s1) != 0; }
321 {
return s1.Compare(s2) < 0; }
322 inline bool operator<(
const vtString& s1, pcchar s2)
323 {
return s1.Compare(s2) < 0; }
324 inline bool operator<(pcchar s1,
const vtString& s2)
325 {
return s2.Compare(s1) > 0; }
327 {
return s1.Compare(s2) > 0; }
328 inline bool operator>(
const vtString& s1, pcchar s2)
329 {
return s1.Compare(s2) > 0; }
330 inline bool operator>(pcchar s1,
const vtString& s2)
331 {
return s2.Compare(s1) < 0; }
333 {
return s1.Compare(s2) <= 0; }
334 inline bool operator<=(
const vtString& s1, pcchar s2)
335 {
return s1.Compare(s2) <= 0; }
336 inline bool operator<=(pcchar s1,
const vtString& s2)
337 {
return s2.Compare(s1) >= 0; }
339 {
return s1.Compare(s2) >= 0; }
340 inline bool operator>=(
const vtString& s1, pcchar s2)
341 {
return s1.Compare(s2) >= 0; }
342 inline bool operator>=(pcchar s1,
const vtString& s2)
343 {
return s2.Compare(s1) <= 0; }
346 vtString EscapeStringForXML(
const char *input);
347 void EscapeStringForXML(
const std::string &input, std::string &output);
350 void EscapeStringForXML(
const std::wstring &input, std::string &output);
351 void EscapeStringForXML(
const std::wstring &input, std::wstring &output);
354 vtString UTF8ToLocal(
const char *string_utf8);
362 #define MAX_WSTRING2_SIZE 4096
385 const char *mb_str()
const;
387 size_t from_utf8(
const char *in);
388 const char *to_utf8()
const;
391 static char s_buffer[MAX_WSTRING2_SIZE];
394 #endif // SUPPORT_WSTRING
400 #define vtStringArray std::vector<vtString>
403 void vtTokenize(
char *buf,
const char *delim, vtStringArray &tokens);
406 int vtFindString(
const vtStringArray &arr,
const char *find);
409 vtString vtConcatArray(
const vtStringArray &arr,
const char delim);
412 void vtExtractArray(
const vtString &input, vtStringArray &arr,
const char delim);