1baa3858d3f5d128a5c8466b700098109edcad5f2repo sync// Common/String.h 2baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 3baa3858d3f5d128a5c8466b700098109edcad5f2repo sync#ifndef __COMMON_STRING_H 4baa3858d3f5d128a5c8466b700098109edcad5f2repo sync#define __COMMON_STRING_H 5baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 6baa3858d3f5d128a5c8466b700098109edcad5f2repo sync#include <string.h> 7baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 8cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky#ifndef _WIN32 9cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky#include <wctype.h> 10cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky#include <wchar.h> 11cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky#endif 12cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 13cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky#include "MyTypes.h" 14baa3858d3f5d128a5c8466b700098109edcad5f2repo sync#include "MyVector.h" 15baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 16cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckyinline unsigned MyStringLen(const char *s) 17baa3858d3f5d128a5c8466b700098109edcad5f2repo sync{ 18cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky unsigned i; 19cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky for (i = 0; s[i] != 0; i++); 20baa3858d3f5d128a5c8466b700098109edcad5f2repo sync return i; 21baa3858d3f5d128a5c8466b700098109edcad5f2repo sync} 22baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 23cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckyinline void MyStringCopy(char *dest, const char *src) 24baa3858d3f5d128a5c8466b700098109edcad5f2repo sync{ 25baa3858d3f5d128a5c8466b700098109edcad5f2repo sync while ((*dest++ = *src++) != 0); 26baa3858d3f5d128a5c8466b700098109edcad5f2repo sync} 27baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 28cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckyinline char *MyStpCpy(char *dest, const char *src) 29cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky{ 30cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky for (;;) 31cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky { 32cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky char c = *src; 33cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky *dest = c; 34cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky if (c == 0) 35cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky return dest; 36cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky src++; 37cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky dest++; 38cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky } 39cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky} 40baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 41cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckyinline unsigned MyStringLen(const wchar_t *s) 42cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky{ 43cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky unsigned i; 44cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky for (i = 0; s[i] != 0; i++); 45cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky return i; 46cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky} 47baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 48cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckyinline void MyStringCopy(wchar_t *dest, const wchar_t *src) 49baa3858d3f5d128a5c8466b700098109edcad5f2repo sync{ 50cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky while ((*dest++ = *src++) != 0); 51baa3858d3f5d128a5c8466b700098109edcad5f2repo sync} 52baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 53cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckyint FindCharPosInString(const char *s, char c) throw(); 54cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckyint FindCharPosInString(const wchar_t *s, wchar_t c) throw(); 55baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 56cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky#ifdef _WIN32 57cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky #ifndef _UNICODE 58cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky #define STRING_UNICODE_THROW 59cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky #endif 60baa3858d3f5d128a5c8466b700098109edcad5f2repo sync#endif 61baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 62cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky#ifndef STRING_UNICODE_THROW 63cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky #define STRING_UNICODE_THROW throw() 64baa3858d3f5d128a5c8466b700098109edcad5f2repo sync#endif 65baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 66cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky/* 67cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckyinline char MyCharUpper_Ascii(char c) 68cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky{ 69cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky if (c >= 'a' && c <= 'z') 70cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky return (char)(c - 0x20); 71cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky return c; 72cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky} 73cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckyinline wchar_t MyCharUpper_Ascii(wchar_t c) 74cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky{ 75cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky if (c >= 'a' && c <= 'z') 76cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky return (wchar_t)(c - 0x20); 77cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky return c; 78cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky} 79cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky*/ 80baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 81cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckyinline char MyCharLower_Ascii(char c) 82cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky{ 83cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky if (c >= 'A' && c <= 'Z') 84cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky return (char)(c + 0x20); 85cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky return c; 86cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky} 87baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 88cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckyinline wchar_t MyCharLower_Ascii(wchar_t c) 89cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky{ 90cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky if (c >= 'A' && c <= 'Z') 91cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky return (wchar_t)(c + 0x20); 92cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky return c; 93cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky} 94baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 95cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckywchar_t MyCharUpper_WIN(wchar_t c) throw(); 96baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 97cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckyinline wchar_t MyCharUpper(wchar_t c) throw() 98cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky{ 99cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky if (c < 'a') return c; 100cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky if (c <= 'z') return (wchar_t)(c - 0x20); 101cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky if (c <= 0x7F) return c; 102cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky #ifdef _WIN32 103cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky #ifdef _UNICODE 104cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky return (wchar_t)(unsigned)(UINT_PTR)CharUpperW((LPWSTR)(UINT_PTR)(unsigned)c); 105cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky #else 106cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky return (wchar_t)MyCharUpper_WIN(c); 107cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky #endif 108cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky #else 109cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky return (wchar_t)towupper(c); 110cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky #endif 111cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky} 112baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 113baa3858d3f5d128a5c8466b700098109edcad5f2repo sync/* 114cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckywchar_t MyCharLower_WIN(wchar_t c) throw(); 115cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 116cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckyinline wchar_t MyCharLower(wchar_t c) throw() 117cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky{ 118cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky if (c < 'A') return c; 119cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky if (c <= 'Z') return (wchar_t)(c + 0x20); 120cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky if (c <= 0x7F) return c; 121cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky #ifdef _WIN32 122cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky #ifdef _UNICODE 123cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky return (wchar_t)(unsigned)(UINT_PTR)CharLowerW((LPWSTR)(UINT_PTR)(unsigned)c); 124cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky #else 125cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky return (wchar_t)MyCharLower_WIN(c); 126cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky #endif 127cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky #else 128cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky return (wchar_t)tolower(c); 129cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky #endif 130cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky} 131baa3858d3f5d128a5c8466b700098109edcad5f2repo sync*/ 132baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 133cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky// char *MyStringUpper(char *s) throw(); 134cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky// char *MyStringLower(char *s) throw(); 135cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 136cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky// void MyStringUpper_Ascii(wchar_t *s) throw(); 137cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckyvoid MyStringLower_Ascii(wchar_t *s) throw(); 138cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky// wchar_t *MyStringUpper(wchar_t *s) STRING_UNICODE_THROW; 139cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky// wchar_t *MyStringLower(wchar_t *s) STRING_UNICODE_THROW; 140cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 141cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckybool StringsAreEqualNoCase(const wchar_t *s1, const wchar_t *s2) throw(); 142cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 143cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckybool IsString1PrefixedByString2(const char *s1, const char *s2) throw(); 144cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckybool IsString1PrefixedByString2(const wchar_t *s1, const wchar_t *s2) throw(); 145cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 146cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckyint MyStringCompareNoCase(const wchar_t *s1, const wchar_t *s2) throw(); 147cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckyint MyStringCompareNoCase_N(const wchar_t *s1, const wchar_t *s2, unsigned num) throw(); 148baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 149cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky// ---------- ASCII ---------- 150cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky// char values in ASCII strings must be less then 128 151cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckybool StringsAreEqual_Ascii(const wchar_t *u, const char *a) throw(); 152cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckybool StringsAreEqualNoCase_Ascii(const char *s1, const char *s2) throw(); 153cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckybool StringsAreEqualNoCase_Ascii(const wchar_t *s1, const char *s2) throw(); 154cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckybool StringsAreEqualNoCase_Ascii(const wchar_t *s1, const wchar_t *s2) throw(); 155baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 156cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky#define MY_STRING_DELETE(_p_) delete []_p_; 157cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky// #define MY_STRING_DELETE(_p_) my_delete(_p_); 158cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 159cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckyclass AString 160baa3858d3f5d128a5c8466b700098109edcad5f2repo sync{ 161cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky char *_chars; 162cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky unsigned _len; 163cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky unsigned _limit; 164baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 165cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky void MoveItems(unsigned dest, unsigned src) 166baa3858d3f5d128a5c8466b700098109edcad5f2repo sync { 167cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky memmove(_chars + dest, _chars + src, (size_t)(_len - src + 1) * sizeof(char)); 168baa3858d3f5d128a5c8466b700098109edcad5f2repo sync } 169baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 170cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky void InsertSpace(unsigned &index, unsigned size); 171baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 172cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky void ReAlloc(unsigned newLimit); 173cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky void SetStartLen(unsigned len); 174cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky void Grow_1(); 175cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky void Grow(unsigned n); 176baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 177cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky // AString(unsigned num, const char *s); 178cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky AString(unsigned num, const AString &s); 179cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky AString(const AString &s, char c); // it's for String + char 180cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky AString(const char *s1, unsigned num1, const char *s2, unsigned num2); 181baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 182cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky friend AString operator+(const AString &s, char c) { return AString(s, c); } ; 183cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky // friend AString operator+(char c, const AString &s); // is not supported 184cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 185cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky friend AString operator+(const AString &s1, const AString &s2); 186cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky friend AString operator+(const AString &s1, const char *s2); 187cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky friend AString operator+(const char *s1, const AString &s2); 188baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 189baa3858d3f5d128a5c8466b700098109edcad5f2repo syncpublic: 190cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky AString(); 191cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky AString(char c); 192cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky AString(const char *s); 193cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky AString(const AString &s); 194cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky ~AString() { MY_STRING_DELETE(_chars); } 195cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 196cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky unsigned Len() const { return _len; } 197cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky bool IsEmpty() const { return _len == 0; } 198cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky void Empty() { _len = 0; _chars[0] = 0; } 199baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 200cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky operator const char *() const { return _chars; } 201cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky const char *Ptr() const { return _chars; } 202cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky const char *Ptr(unsigned pos) const { return _chars + pos; } 203cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky const char *RightPtr(unsigned num) const { return _chars + _len - num; } 204cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky char Back() const { return _chars[_len - 1]; } 205baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 206cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky void ReplaceOneCharAtPos(unsigned pos, char c) { _chars[pos] = c; } 207baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 208baa3858d3f5d128a5c8466b700098109edcad5f2repo sync // The minimum size of the character buffer in characters. 209baa3858d3f5d128a5c8466b700098109edcad5f2repo sync // This value does not include space for a null terminator. 210cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky char *GetBuffer(unsigned minBufLen) 211baa3858d3f5d128a5c8466b700098109edcad5f2repo sync { 212cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky if (minBufLen > _limit) 213cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky ReAlloc(minBufLen); 214baa3858d3f5d128a5c8466b700098109edcad5f2repo sync return _chars; 215baa3858d3f5d128a5c8466b700098109edcad5f2repo sync } 216baa3858d3f5d128a5c8466b700098109edcad5f2repo sync void ReleaseBuffer() { ReleaseBuffer(MyStringLen(_chars)); } 217cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky void ReleaseBuffer(unsigned newLen) { _len = newLen; _chars[newLen] = 0; } 218baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 219cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky AString &operator=(char c); 220cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky AString &operator=(const char *s); 221cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky AString &operator=(const AString &s); 222cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 223cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky AString &operator+=(char c) 224baa3858d3f5d128a5c8466b700098109edcad5f2repo sync { 225cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky if (_limit == _len) 226cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky Grow_1(); 227cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky unsigned len = _len; 228cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky char *chars = _chars; 229cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky chars[len++] = c; 230cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky chars[len] = 0; 231cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky _len = len; 232baa3858d3f5d128a5c8466b700098109edcad5f2repo sync return *this; 233baa3858d3f5d128a5c8466b700098109edcad5f2repo sync } 234cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 235cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky AString &operator+=(const char *s); 236cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky AString &operator+=(const AString &s); 237cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 238cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky void SetFrom(const char *s, unsigned len); // no check 239cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky // AString Mid(unsigned startIndex, unsigned count) const { return AString(count, _chars + startIndex); } 240cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky AString Left(unsigned count) const { return AString(count, *this); } 241cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 242cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky // void MakeUpper() { MyStringUpper(_chars); } 243cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky // void MakeLower() { MyStringLower(_chars); } 244cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 245cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 246cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky // int Compare(const char *s) const { return MyStringCompare(_chars, s); } 247cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky // int Compare(const AString &s) const { return MyStringCompare(_chars, s._chars); } 248cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky // int CompareNoCase(const char *s) const { return MyStringCompareNoCase(_chars, s); } 249cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky // int CompareNoCase(const AString &s) const { return MyStringCompareNoCase(_chars, s._chars); } 250cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky bool IsPrefixedBy(const char *s) const { return IsString1PrefixedByString2(_chars, s); } 251cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky bool IsPrefixedBy_Ascii_NoCase(const char *s) const throw(); 252cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 253cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky int Find(char c) const { return FindCharPosInString(_chars, c); } 254cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky int Find(char c, unsigned startIndex) const 255baa3858d3f5d128a5c8466b700098109edcad5f2repo sync { 256cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky int pos = FindCharPosInString(_chars + startIndex, c); 257cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky return pos < 0 ? -1 : (int)startIndex + pos; 258baa3858d3f5d128a5c8466b700098109edcad5f2repo sync } 259cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky int ReverseFind(char c) const throw(); 260cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky int Find(const AString &s) const { return Find(s, 0); } 261cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky int Find(const AString &s, unsigned startIndex) const throw(); 262cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 263cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky void TrimLeft() throw(); 264cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky void TrimRight() throw(); 265cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky void Trim() 266baa3858d3f5d128a5c8466b700098109edcad5f2repo sync { 267cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky TrimRight(); 268cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky TrimLeft(); 269baa3858d3f5d128a5c8466b700098109edcad5f2repo sync } 270cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 271cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky void InsertAtFront(char c); 272cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky // void Insert(unsigned index, char c); 273cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky void Insert(unsigned index, const char *s); 274cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky void Insert(unsigned index, const AString &s); 275cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 276cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky void RemoveChar(char ch) throw(); 277cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky void Replace(char oldChar, char newChar) throw(); 278cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky void Replace(const AString &oldString, const AString &newString); 279baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 280cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky void Delete(unsigned index) throw(); 281cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky void Delete(unsigned index, unsigned count) throw(); 282cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky void DeleteFrontal(unsigned num) throw(); 283cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky void DeleteBack() { _chars[--_len] = 0; } 284cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky void DeleteFrom(unsigned index) 285baa3858d3f5d128a5c8466b700098109edcad5f2repo sync { 286cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky if (index < _len) 287cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky { 288cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky _len = index; 289cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky _chars[index] = 0; 290cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky } 291baa3858d3f5d128a5c8466b700098109edcad5f2repo sync } 292cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky}; 293baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 294cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckybool operator<(const AString &s1, const AString &s2); 295cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckybool operator>(const AString &s1, const AString &s2); 296baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 297cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky/* 298cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckybool operator==(const AString &s1, const AString &s2); 299cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckybool operator==(const AString &s1, const char *s2); 300cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckybool operator==(const char *s1, const AString &s2); 301baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 302cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckybool operator!=(const AString &s1, const AString &s2); 303cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckybool operator!=(const AString &s1, const char *s2); 304cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckybool operator!=(const char *s1, const AString &s2); 305cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky*/ 306baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 307cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckyinline bool operator==(const AString &s1, const AString &s2) { return s1.Len() == s2.Len() && strcmp(s1, s2) == 0; } 308cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckyinline bool operator==(const AString &s1, const char *s2) { return strcmp(s1, s2) == 0; } 309cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckyinline bool operator==(const char *s1, const AString &s2) { return strcmp(s1, s2) == 0; } 310baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 311cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckyinline bool operator!=(const AString &s1, const AString &s2) { return s1.Len() != s2.Len() || strcmp(s1, s2) != 0; } 312cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckyinline bool operator!=(const AString &s1, const char *s2) { return strcmp(s1, s2) != 0; } 313cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckyinline bool operator!=(const char *s1, const AString &s2) { return strcmp(s1, s2) != 0; } 314baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 315baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 316baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 317cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckyclass UString 318cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky{ 319cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky wchar_t *_chars; 320cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky unsigned _len; 321cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky unsigned _limit; 322baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 323cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky void MoveItems(unsigned dest, unsigned src) 324baa3858d3f5d128a5c8466b700098109edcad5f2repo sync { 325cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky memmove(_chars + dest, _chars + src, (size_t)(_len - src + 1) * sizeof(wchar_t)); 326baa3858d3f5d128a5c8466b700098109edcad5f2repo sync } 327cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 328cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky void InsertSpace(unsigned index, unsigned size); 329cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 330cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky void ReAlloc(unsigned newLimit); 331cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky void SetStartLen(unsigned len); 332cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky void Grow_1(); 333cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky void Grow(unsigned n); 334cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 335cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky UString(unsigned num, const wchar_t *s); // for Mid 336cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky UString(unsigned num, const UString &s); // for Left 337cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky UString(const UString &s, wchar_t c); // it's for String + char 338cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky UString(const wchar_t *s1, unsigned num1, const wchar_t *s2, unsigned num2); 339cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 340cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky friend UString operator+(const UString &s, wchar_t c) { return UString(s, c); } ; 341cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky // friend UString operator+(wchar_t c, const UString &s); // is not supported 342cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 343cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky friend UString operator+(const UString &s1, const UString &s2); 344cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky friend UString operator+(const UString &s1, const wchar_t *s2); 345cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky friend UString operator+(const wchar_t *s1, const UString &s2); 346baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 347cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckypublic: 348cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky UString(); 349cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky UString(wchar_t c); 350cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky UString(const wchar_t *s); 351cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky UString(const UString &s); 352cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky ~UString() { MY_STRING_DELETE(_chars); } 353cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 354cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky unsigned Len() const { return _len; } 355cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky bool IsEmpty() const { return _len == 0; } 356cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky void Empty() { _len = 0; _chars[0] = 0; } 357cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 358cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky operator const wchar_t *() const { return _chars; } 359cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky const wchar_t *Ptr() const { return _chars; } 360cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky const wchar_t *Ptr(unsigned pos) const { return _chars + pos; } 361cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky const wchar_t *RightPtr(unsigned num) const { return _chars + _len - num; } 362cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky wchar_t Back() const { return _chars[_len - 1]; } 363cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 364cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky void ReplaceOneCharAtPos(unsigned pos, wchar_t c) { _chars[pos] = c; } 365cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 366cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky // The minimum size of the character buffer in characters. 367cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky // This value does not include space for a null terminator. 368cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky wchar_t *GetBuffer(unsigned minBufLen) 369baa3858d3f5d128a5c8466b700098109edcad5f2repo sync { 370cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky if (minBufLen > _limit) 371cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky ReAlloc(minBufLen); 372cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky return _chars; 373baa3858d3f5d128a5c8466b700098109edcad5f2repo sync } 374cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky void ReleaseBuffer() { ReleaseBuffer(MyStringLen(_chars)); } 375cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky void ReleaseBuffer(unsigned newLen) { _len = newLen; _chars[newLen] = 0; } 376cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 377cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky UString &operator=(wchar_t c); 378cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky UString &operator=(const wchar_t *s); 379cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky UString &operator=(const UString &s); 380cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 381cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky UString &operator+=(wchar_t c) 382baa3858d3f5d128a5c8466b700098109edcad5f2repo sync { 383cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky if (_limit == _len) 384cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky Grow_1(); 385cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky unsigned len = _len; 386cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky wchar_t *chars = _chars; 387cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky chars[len++] = c; 388cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky chars[len] = 0; 389cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky _len = len; 390cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky return *this; 391baa3858d3f5d128a5c8466b700098109edcad5f2repo sync } 392cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 393cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky UString &operator+=(const wchar_t *s); 394cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky UString &operator+=(const UString &s); 395cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 396cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky void SetFrom(const wchar_t *s, unsigned len); // no check 397cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 398cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky void SetFromAscii(const char *s); 399cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky void AddAsciiStr(const char *s); 400cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 401cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky UString Mid(unsigned startIndex, unsigned count) const { return UString(count, _chars + startIndex); } 402cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky UString Left(unsigned count) const { return UString(count, *this); } 403cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 404cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky // void MakeUpper() { MyStringUpper(_chars); } 405cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky // void MakeUpper() { MyStringUpper_Ascii(_chars); } 406cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky // void MakeUpper_Ascii() { MyStringUpper_Ascii(_chars); } 407cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky void MakeLower_Ascii() { MyStringLower_Ascii(_chars); } 408cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 409cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky bool IsEqualTo(const char *s) const { return StringsAreEqual_Ascii(_chars, s); } 410cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky bool IsEqualToNoCase(const wchar_t *s) const { return StringsAreEqualNoCase(_chars, s); } 411cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky int Compare(const wchar_t *s) const { return wcscmp(_chars, s); } 412cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky // int Compare(const UString &s) const { return MyStringCompare(_chars, s._chars); } 413cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky // int CompareNoCase(const wchar_t *s) const { return MyStringCompareNoCase(_chars, s); } 414cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky // int CompareNoCase(const UString &s) const { return MyStringCompareNoCase(_chars, s._chars); } 415cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky bool IsPrefixedBy(const wchar_t *s) const { return IsString1PrefixedByString2(_chars, s); }; 416cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky bool IsPrefixedBy_Ascii_NoCase(const char *s) const throw(); 417cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 418cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky int Find(wchar_t c) const { return FindCharPosInString(_chars, c); } 419cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky int Find(wchar_t c, unsigned startIndex) const 420baa3858d3f5d128a5c8466b700098109edcad5f2repo sync { 421cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky int pos = FindCharPosInString(_chars + startIndex, c); 422cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky return pos < 0 ? -1 : (int)startIndex + pos; 423baa3858d3f5d128a5c8466b700098109edcad5f2repo sync } 424cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky int Find(const UString &s) const { return Find(s, 0); } 425cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky int Find(const UString &s, unsigned startIndex) const throw(); 426cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky int ReverseFind(wchar_t c) const throw(); 427cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 428cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky void TrimLeft() throw(); 429cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky void TrimRight() throw(); 430baa3858d3f5d128a5c8466b700098109edcad5f2repo sync void Trim() 431baa3858d3f5d128a5c8466b700098109edcad5f2repo sync { 432baa3858d3f5d128a5c8466b700098109edcad5f2repo sync TrimRight(); 433baa3858d3f5d128a5c8466b700098109edcad5f2repo sync TrimLeft(); 434baa3858d3f5d128a5c8466b700098109edcad5f2repo sync } 435baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 436cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky void InsertAtFront(wchar_t c); 437cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky // void Insert(unsigned index, wchar_t c); 438cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky void Insert(unsigned index, const wchar_t *s); 439cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky void Insert(unsigned index, const UString &s); 440baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 441cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky void RemoveChar(wchar_t ch) throw(); 442cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky void Replace(wchar_t oldChar, wchar_t newChar) throw(); 443cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky void Replace(const UString &oldString, const UString &newString); 444cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 445cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky void Delete(unsigned index) throw(); 446cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky void Delete(unsigned index, unsigned count) throw(); 447cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky void DeleteFrontal(unsigned num) throw(); 448cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky void DeleteBack() { _chars[--_len] = 0; } 449cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky void DeleteFrom(unsigned index) 450baa3858d3f5d128a5c8466b700098109edcad5f2repo sync { 451cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky if (index < _len) 452baa3858d3f5d128a5c8466b700098109edcad5f2repo sync { 453cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky _len = index; 454cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky _chars[index] = 0; 455baa3858d3f5d128a5c8466b700098109edcad5f2repo sync } 456baa3858d3f5d128a5c8466b700098109edcad5f2repo sync } 457baa3858d3f5d128a5c8466b700098109edcad5f2repo sync}; 458baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 459cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckybool operator<(const UString &s1, const UString &s2); 460cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckybool operator>(const UString &s1, const UString &s2); 461baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 462cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckyinline bool operator==(const UString &s1, const UString &s2) { return s1.Len() == s2.Len() && wcscmp(s1, s2) == 0; } 463cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckyinline bool operator==(const UString &s1, const wchar_t *s2) { return wcscmp(s1, s2) == 0; } 464cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckyinline bool operator==(const wchar_t *s1, const UString &s2) { return wcscmp(s1, s2) == 0; } 465baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 466cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckyinline bool operator!=(const UString &s1, const UString &s2) { return s1.Len() != s2.Len() || wcscmp(s1, s2) != 0; } 467cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckyinline bool operator!=(const UString &s1, const wchar_t *s2) { return wcscmp(s1, s2) != 0; } 468cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckyinline bool operator!=(const wchar_t *s1, const UString &s2) { return wcscmp(s1, s2) != 0; } 469baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 470baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 471cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckytypedef CObjectVector<AString> AStringVector; 472cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckytypedef CObjectVector<UString> UStringVector; 473baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 474cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky#ifdef _UNICODE 475cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky typedef UString CSysString; 476cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky#else 477cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky typedef AString CSysString; 478cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky#endif 479baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 480cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckytypedef CObjectVector<CSysString> CSysStringVector; 481baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 482baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 483cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky// ---------- FString ---------- 484baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 485cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky#ifdef _WIN32 486cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky #define USE_UNICODE_FSTRING 487cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky#endif 488baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 489cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky#ifdef USE_UNICODE_FSTRING 490baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 491cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky #define __FTEXT(quote) L##quote 492baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 493cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky typedef wchar_t FChar; 494cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky typedef UString FString; 495baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 496cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky #define fs2us(_x_) (_x_) 497cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky #define us2fs(_x_) (_x_) 498cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky FString fas2fs(const AString &s); 499cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky AString fs2fas(const FChar *s); 500baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 501baa3858d3f5d128a5c8466b700098109edcad5f2repo sync#else 502cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 503cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky #define __FTEXT(quote) quote 504cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 505cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky typedef char FChar; 506cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky typedef AString FString; 507cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 508cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky UString fs2us(const FString &s); 509cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky FString us2fs(const wchar_t *s); 510cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky #define fas2fs(_x_) (_x_) 511cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky #define fs2fas(_x_) (_x_) 512cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 513baa3858d3f5d128a5c8466b700098109edcad5f2repo sync#endif 514baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 515cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky#define FTEXT(quote) __FTEXT(quote) 516cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 517cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky#define FCHAR_PATH_SEPARATOR FTEXT(CHAR_PATH_SEPARATOR) 518cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky#define FSTRING_PATH_SEPARATOR FTEXT(STRING_PATH_SEPARATOR) 519cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky#define FCHAR_ANY_MASK FTEXT('*') 520cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky#define FSTRING_ANY_MASK FTEXT("*") 521cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckytypedef const FChar *CFSTR; 522cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbecky 523cd66d540cead3f8200b0c73bad9c276d67896c3dDavid Srbeckytypedef CObjectVector<FString> FStringVector; 524baa3858d3f5d128a5c8466b700098109edcad5f2repo sync 525baa3858d3f5d128a5c8466b700098109edcad5f2repo sync#endif 526