CFx SDK Documentation  2022 SP0
OdString.h
Go to the documentation of this file.
1 // Copyright (C) 2002-2017, Open Design Alliance (the "Alliance").
3 // All rights reserved.
4 //
5 // This software and its documentation and related materials are owned by
6 // the Alliance. The software may only be incorporated into application
7 // programs owned by members of the Alliance, subject to a signed
8 // Membership Agreement and Supplemental Software License Agreement with the
9 // Alliance. The structure and organization of this software are the valuable
10 // trade secrets of the Alliance and its suppliers. The software is also
11 // protected by copyright law and international treaty provisions. Application
12 // programs incorporating this software must include the following statement
13 // with their copyright notices:
14 //
15 // This application incorporates Teigha(R) software pursuant to a license
16 // agreement with Open Design Alliance.
17 // Teigha(R) Copyright (C) 2002-2017 by Open Design Alliance.
18 // All rights reserved.
19 //
20 // By use of this software, its documentation or related materials, you
21 // acknowledge and accept the above terms.
23 
24 
25 
26 
27 
28 #ifndef __ODSTRING_H__
29 #define __ODSTRING_H__
30 
31 #include <stdarg.h>
32 #include <stdio.h>
33 
34 #include "OdMutex.h"
35 #include "OdPlatformSettings.h"
36 #include "OdCodePage.h"
37 #include "OdAnsiString.h"
38 
39 #define odaIsValidString(lpch) (true)
40 
41 #include "TD_PackPush.h"
42 
43 #ifdef sgi
44 #include <string>
45 using namespace std; // va_XXXX items are in std namespace for newest SGI compiler
46 #endif
47 
59 {
64 
69 
74 
79 
83  char* ansiString;
84 };
85 
95 {
96 public:
97 
99 
101  { init(); }
102 
106 
111 
113  OdString(const OdChar* source, int length);
114 #if defined(_MSC_VER) && _MSC_VER >= 1300
115  OdString(const __wchar_t* source);
116  OdString(const __wchar_t* source, int length);
117 #endif
118 
119 
120  OdString(const char* lpch, OdCodePageId codepage = CP_CNT);
121  OdString(const char* lpch, int nLength, OdCodePageId codepage = CP_CNT);
122  OdString(const OdAnsiString&);
123 protected:
124  explicit OdString(OdStringData* pData);
125 public:
126 
130  int getLength() const
131  {
132  if (isUnicodeNotInSync())
133  syncUnicode();
134  return getData()->nDataLength;
135  }
136  int getLengthA() const;
137 
141  bool isEmpty() const
142  {
143  return (getData()->nDataLength == 0 &&
144  (getData()->ansiString == 0 || getAnsiString()->isEmpty()));
145  }
146 
150  void empty();
151 
156  OdChar getAt(int charIndex) const
157  {
158 #ifdef TD_UNICODE
159  if (isUnicodeNotInSync())
160  syncUnicode();
161 #endif
162  ODA_ASSERT(charIndex >= 0);
163  ODA_ASSERT(charIndex < getData()->nDataLength);
164  return getData()->unicodeBuffer[charIndex];
165  }
166 
174  OdChar operator[](int charIndex) const
175  {
176  return getAt(charIndex);
177  }
178 
186  void setAt(int charIndex, OdChar ch);
187 
188 #if defined(_MSC_VER) && defined(_WIN32) && defined(_DEBUG) && defined(ODA_LINT)
189 #define UPDATECONSTSTRINGDIAGNISTIC
190 private:
191  void updateConstStringDiagnostic(const OdChar* pAddr) const;
192 public:
193 #else
194  #define updateConstStringDiagnostic(pAddr)
195 #endif
196 
200  const OdChar* c_str() const
201  {
202  if (isUnicodeNotInSync())
203  syncUnicode();
204  const OdChar* pRet = getData()->unicodeBuffer;
206  return pRet;
207  }
208 
212  inline operator const OdChar*() const
213  {
214  return c_str();
215  }
216 
217 #if defined(_MSC_VER) && _MSC_VER >= 1300
218  operator const __wchar_t*() const
219  {
220  return reinterpret_cast<const __wchar_t*>(c_str());
221  }
222 #endif
223 
224  operator const char*() const;
225 
227 
229 
231 
232 #if defined(_MSC_VER) && _MSC_VER >= 1300
233  OdString& operator=(const __wchar_t* source){ return operator=((const OdChar*)source); }
234 #endif
235 
236  OdString& operator=(const OdAnsiString& source);
237 
238  OdString& operator=(const char* source);
239 
248  OdString& operator+=(const OdString& string);
249 
259 
268  OdString& operator+=(const OdChar* string);
269 
270 #if defined(_MSC_VER) && _MSC_VER >= 1300
279  OdString& operator+=(const __wchar_t* string){ return operator+=((const OdChar*)string); }
280 #endif
281 
290  OdString& operator+=(const char* string);
291 
297  friend FIRSTDLL_EXPORT OdString operator+(const OdString& string1, const OdString& string2);
298  friend FIRSTDLL_EXPORT OdString operator+(const OdString& string, OdChar ch);
299  friend FIRSTDLL_EXPORT OdString operator+(OdChar ch, const OdString& string);
300 
301  friend FIRSTDLL_EXPORT OdString operator+(const OdString& string1, const OdChar* string2);
302  friend FIRSTDLL_EXPORT OdString operator+(const OdChar* string1, const OdString& string2);
303 
319  int compare(const OdChar* otherString) const
320  {
321  if (isUnicodeNotInSync())
322  syncUnicode();
323  return odStrCmp((const wchar_t*)getData()->unicodeBuffer, (const wchar_t*)otherString);
324  }
325 
341  inline int compare(const OdString& otherString) const{ return compare(otherString.c_str());}
342 
343 #if defined(_MSC_VER) && _MSC_VER >= 1300
359  int compare(const __wchar_t* otherString) const { return compare((const OdChar*)otherString);}
360 #endif
361 
377  int compare(const char* otherString) const;
378 
394  int iCompare(const OdChar* otherString) const
395  {
396  if (isUnicodeNotInSync())
397  syncUnicode();
398  return odStrICmp(getData()->unicodeBuffer, otherString);
399  }
400 
416  inline int iCompare(const OdString& otherString) const{ return iCompare(otherString.c_str()); }
417 #if defined(_MSC_VER) && _MSC_VER >= 1300
433  __forceinline int iCompare(const __wchar_t* otherString) const {return iCompare((const OdChar*)otherString);}
434 #endif
435 
442  OdString mid(int startIndex, int length) const;
443 
449  OdString mid(int startIndex) const;
450 
455  OdString left(int length) const;
456 
461  OdString right(int length) const;
462 
474  OdString spanIncluding(const OdChar* charSet) const;
475 
487  inline OdString spanIncluding(const OdString& charSet) const { return spanIncluding(charSet.c_str()); }
488 
489 #if defined(_MSC_VER) && _MSC_VER >= 1300
501  OdString spanIncluding(const __wchar_t* charSet) const{return spanIncluding((const OdChar*)charSet);}
502 #endif
503 
515  OdString spanExcluding(const OdChar* charSet) const;
516 
528  inline OdString spanExcluding(const OdString& charSet) const{ return spanExcluding(charSet.c_str());}
529 
530 #if defined(_MSC_VER) && _MSC_VER >= 1300
542  OdString spanExcluding(const __wchar_t* charSet) const{return spanExcluding((const OdChar*)charSet);}
543 #endif
544 
552 
560 
568 
569 
579 
589 
600  OdString& trimRight(OdChar whiteChar);
601 
612  OdString& trimRight(const OdChar* whiteChars);
613 
624  inline OdString& trimRight(const OdString& whiteChars){ return trimRight(whiteChars.c_str());}
625 
626 #if defined(_MSC_VER) && _MSC_VER >= 1300
637  OdString& trimRight(const __wchar_t* whiteChars){return trimRight((const OdChar*)whiteChars);}
638 #endif
639 
650  OdString& trimLeft(OdChar whiteChar);
651 
662  OdString& trimLeft(const OdChar* whiteChars);
663 
674  inline OdString& trimLeft(const OdString& whiteChars){ return trimLeft(whiteChars.c_str());}
675 
676 #if defined(_MSC_VER) && _MSC_VER >= 1300
687  OdString& trimLeft(const __wchar_t* whiteChars){return trimLeft((const OdChar*)whiteChars);}
688 #endif
698  int replace(OdChar oldChar, OdChar newChar);
699 
709  int replace(const OdChar* oldString, const OdChar* newString);
710 
720  inline int replace(const OdString& oldString, const OdString& newString){ return replace(oldString.c_str(), newString.c_str());}
721 
722 #if defined(_MSC_VER) && _MSC_VER >= 1300
723 
733  int replace(const __wchar_t* oldString, const __wchar_t* newString){return replace((const OdChar*)oldString, (const OdChar*)newString);}
734 #endif
743  int remove(OdChar chRemove);
744 
758  int insert(int insertIndex, OdChar insertChar);
759 
776  int insert(int insertIndex, const OdChar* insertString);
777 
790  int insert(int insertIndex, const OdString& insertString){return insert(insertIndex, insertString.c_str());}
791 
792 #if defined(_MSC_VER) && _MSC_VER >= 1300
805  int insert(int insertIndex, const __wchar_t* insertString){return insert(insertIndex,(const OdChar*)insertString);}
806 #endif
815  int deleteChars(int deleteIndex, int count = 1);
816 
817 
826  int find(OdChar searchChar) const;
827 
836  int reverseFind(OdChar searchChar) const;
837 
847  int reverseFind(OdChar searchChar, int startIndex) const;
848 
860  int find(OdChar searchChar, int startIndex) const;
861 
870  int findOneOf(const OdChar* charSet) const;
871 
880  int find(const OdChar* searchString) const;
881 
891  int find(const OdChar* searchString, int startIndex) const;
892 
893 #if defined(_MSC_VER) && _MSC_VER >= 1300
902  int findOneOf(const __wchar_t* charSet) const{return findOneOf((const OdChar*)charSet);}
903 
912  int findOneOf(const OdString& charSet) const{return findOneOf((const OdChar*)charSet);}
913 
914  int find(const __wchar_t* searchString) const{return find((const OdChar*)searchString);}
915 
916  int find(const OdString& searchString) const{return find((const OdChar*)searchString);}
917 
918  int find(const __wchar_t* searchString, int startIndex) const{return find((const OdChar*)searchString,startIndex);}
919 
920  int find(const OdString& searchString, int startIndex) const{return find((const OdChar*)searchString,startIndex);}
921 #endif
929  OdString& format(const OdChar* formatString, ...);
930 
931 #if defined(_MSC_VER) && _MSC_VER >= 1300
939  OdString& format(const __wchar_t* formatString, ...);
940 #endif
941 
950  OdString& formatV(const OdChar* formatString, va_list argList);
951 
952 #if defined(_MSC_VER) && _MSC_VER >= 1300
961  inline OdString& formatV(const __wchar_t* formatString, va_list argList)
962  {
963  return formatV((const OdChar*)formatString, argList);
964  }
965 #endif
966 
976  OdChar* getBuffer(int minBufLength);
977 
984  void releaseBuffer(int newLength = -1);
985 
996 
1000  void freeExtra();
1001 
1006 
1011 
1012 /* disable wide char functionalities
1013  Constructor. This OdString will receive a copy of the wide character string referenced
1014  by lpsz.
1015  OdString(const OdCharW* lpsz);
1016 
1017  Constructor. This OdString will receive a copy of the first nLength wide characters of
1018  the string referenced by lpch.
1019  OdString(const OdCharW* lpch, int nLength);
1020 
1021  Assignment operator. This OdString is assigned the value of lpsz.
1022  const OdString& operator=(const OdCharW* lpsz);
1023 
1024 */
1025 
1026 #ifdef NOT_IMPLEMENTED
1027 
1044  int collate(const OdChar* otherString) const;
1045 
1062  int iCollate(const OdChar* otherString) const;
1063 
1071  OdString& ODA_CDECL format(unsigned int formatID, ...);
1072 #endif
1073 
1074 
1075 public:
1077 
1081  int getAllocLength() const
1082  { return getData()->nAllocLength; }
1083 
1084 protected:
1086 
1091 
1096  { ODA_ASSERT(m_pData!= NULL); return m_pData; }
1097 
1101  void init();
1102 
1113  void allocCopy(OdString& destString, int copyLength, int copyIndex, int extraLength) const;
1114 
1120  void allocBuffer(int length, bool allocAlways = false);
1121 
1131  void assignCopy(int sourceLength, const OdChar* source);
1132 
1144  void concatCopy(int sourceLength1, const OdChar* source1, int sourceLength2, const OdChar* source2);
1145 
1155  void concatInPlace(int sourceLength, const OdChar* source);
1156 
1165 
1173  void allocBeforeWrite(int newLength);
1174 
1188  void release();
1189 
1190  static void release(OdStringData* pStringData);
1191 
1198  static int safeStrlen(const OdChar* string)
1199  { return (string == NULL) ? (int)0 : (int)odStrLen((const wchar_t*)string); }
1200 
1205  static void freeData(OdStringData* pStringData);
1206 
1207  bool isUnicodeNotInSync() const
1208  {
1209  return !getData()->unicodeBuffer && getData()->ansiString;
1210  }
1211  void syncUnicode() const;
1212  OdAnsiString* getAnsiString() const
1213  {
1214  if (getData()->ansiString)
1215  return reinterpret_cast<OdAnsiString*>(&getData()->ansiString);
1216  else
1217  return 0;
1218  }
1219  void freeAnsiString()const;
1220  friend class OdAnsiString;
1221 };
1222 
1223 typedef OdChar OdCharW;
1225 
1226 
1227 #if defined(_MSC_VER) && _MSC_VER >= 1300
1228 inline OdString operator+(const OdString& string1, const __wchar_t* string2)
1229 {
1230  return operator+(string1, (const OdChar*)string2);
1231 }
1232 inline OdString operator+(const __wchar_t* string1, const OdString& string2)
1233 {
1234  return operator+((const OdChar*)string1, string2);
1235 }
1236 #endif
1237 
1238 inline bool operator==(const OdString& s1, const OdString& s2)
1239  { return s1.compare(s2) == 0; }
1240 
1241 inline bool operator==(const OdString& s1, const OdChar* s2)
1242  { return s1.compare(s2) == 0; }
1243 
1244 inline bool operator==(const OdChar* s1, const OdString& s2)
1245  { return s2.compare(s1) == 0; }
1246 
1247 #if defined(_MSC_VER) && _MSC_VER >= 1300
1248 inline bool operator==(const OdString& s1, const __wchar_t* s2)
1249 { return s1.compare((const OdChar*)s2) == 0; }
1250 
1251 inline bool operator==(const __wchar_t* s1, const OdString& s2)
1252 { return s2.compare((const OdChar*)s1) == 0; }
1253 #endif
1254 
1255 inline bool operator==(const OdString& s1, const char* s2)
1256 { return s1.compare(s2) == 0; }
1257 
1258 inline bool operator==(const char* s1, const OdString& s2)
1259 { return odStrCmpA((const char*)s2, s1) == 0; }
1260 
1261 inline bool operator!=(const OdString& s1, const OdString& s2)
1262  { return s1.compare(s2) != 0; }
1263 
1264 inline bool operator!=(const OdString& s1, const OdChar* s2)
1265  { return s1.compare(s2) != 0; }
1266 
1267 inline bool operator!=(const OdChar* s1, const OdString& s2)
1268  { return s2.compare(s1) != 0; }
1269 
1270 #if defined(_MSC_VER) && _MSC_VER >= 1300
1271 inline bool operator!=(const OdString& s1, const __wchar_t* s2)
1272 { return s1.compare((const OdChar*)s2) != 0; }
1273 
1274 inline bool operator!=(const __wchar_t* s1, const OdString& s2)
1275 { return s2.compare((const OdChar*)s1) != 0; }
1276 #endif
1277 
1278 inline bool operator!=(const OdString& s1, const char* s2)
1279 { return s1.compare(s2) != 0; }
1280 
1281 inline bool operator!=(const char* s1, const OdString& s2)
1282 { return s2.compare(s1) != 0; }
1283 
1284 inline bool operator<(const OdString& s1, const OdString& s2)
1285  { return s1.compare(s2) < 0; }
1286 
1287 inline bool operator<(const OdString& s1, const OdChar* s2)
1288  { return s1.compare(s2) < 0; }
1289 
1290 inline bool operator<(const OdChar* s1, const OdString& s2)
1291  { return s2.compare(s1) > 0; }
1292 
1293 #if defined(_MSC_VER) && _MSC_VER >= 1300
1294 inline bool operator<(const OdString& s1, const __wchar_t* s2)
1295 { return s1.compare((const OdChar*)s2) < 0; }
1296 
1297 inline bool operator<(const __wchar_t* s1, const OdString& s2)
1298 { return s2.compare((const OdChar*)s1) > 0; }
1299 #endif
1300 
1301 inline bool operator<(const OdString& s1, const char* s2)
1302 { return s1.compare(s2) < 0; }
1303 
1304 inline bool operator<(const char* s1, const OdString& s2)
1305 { return s2.compare(s1) > 0; }
1306 
1307 inline bool operator>(const OdString& s1, const OdString& s2)
1308  { return s1.compare(s2) > 0; }
1309 
1310 inline bool operator>(const OdString& s1, const OdChar* s2)
1311  { return s1.compare(s2) > 0; }
1312 
1313 inline bool operator>(const OdChar* s1, const OdString& s2)
1314  { return s2.compare(s1) < 0; }
1315 
1316 #if defined(_MSC_VER) && _MSC_VER >= 1300
1317 inline bool operator>(const OdString& s1, const __wchar_t* s2)
1318 { return s1.compare((const OdChar*)s2) > 0; }
1319 inline bool operator>(const __wchar_t* s1, const OdString& s2)
1320 { return s2.compare((const OdChar*)s1) < 0; }
1321 #endif
1322 
1323 inline bool operator>(const OdString& s1, const char* s2)
1324 { return s1.compare(s2) > 0; }
1325 
1326 inline bool operator>(const char* s1, const OdString& s2)
1327 { return s2.compare(s1) < 0; }
1328 
1329 inline bool operator<=(const OdString& s1, const OdString& s2)
1330  { return s1.compare(s2) <= 0; }
1331 
1332 inline bool operator<=(const OdString& s1, const OdChar* s2)
1333  { return s1.compare(s2) <= 0; }
1334 
1335 inline bool operator<=(const OdChar* s1, const OdString& s2)
1336  { return s2.compare(s1) >= 0; }
1337 
1338 #if defined(_MSC_VER) && _MSC_VER >= 1300
1339 inline bool operator<=(const OdString& s1, const __wchar_t* s2)
1340 { return s1.compare((const OdChar*)s2) <= 0; }
1341 inline bool operator<=(const __wchar_t* s1, const OdString& s2)
1342 { return s2.compare((const OdChar*)s1) >= 0; }
1343 #endif
1344 
1345 inline bool operator<=(const OdString& s1, const char* s2)
1346 { return s1.compare(s2) <= 0; }
1347 
1348 inline bool operator<=(const char* s1, const OdString& s2)
1349 { return s2.compare(s1) >= 0; }
1350 
1351 inline bool operator>=(const OdString& s1, const OdString& s2)
1352  { return s1.compare(s2) >= 0; }
1353 
1354 inline bool operator>=(const OdString& s1, const OdChar* s2)
1355  { return s1.compare(s2) >= 0; }
1356 
1357 inline bool operator>=(const OdChar* s1, const OdString& s2)
1358  { return s2.compare(s1) <= 0; }
1359 
1360 #if defined(_MSC_VER) && _MSC_VER >= 1300
1361 inline bool operator>=(const OdString& s1, const __wchar_t* s2)
1362 { return s1.compare((const OdChar*)s2) >= 0; }
1363 
1364 inline bool operator>=(const __wchar_t* s1, const OdString& s2)
1365 { return s2.compare((const OdChar*)s1) <= 0; }
1366 #endif
1367 
1368 inline bool operator>=(const OdString& s1, const char* s2)
1369 { return s1.compare(s2) >= 0; }
1370 
1371 inline bool operator>=(const char* s1, const OdString& s2)
1372 { return s2.compare(s1) <= 0; }
1373 
1374 #if defined(ODA_UNIXOS)
1377 class OdW2US
1378 {
1379  OdUInt16* _buf;
1380 public:
1381  OdW2US(const wchar_t* pStr)
1382  {
1383  size_t len = Od_wcslen(pStr);
1384  _buf = new OdUInt16[len+1];
1385  for (size_t i = 0; i < len; i++)
1386  {
1387  _buf[i] = (OdUInt16)pStr[i];
1388  }
1389  _buf[len] = 0;
1390  }
1391  ~OdW2US()
1392  {
1393  delete _buf;
1394  }
1395  operator const OdUInt16*() const { return _buf; }
1396 };
1397 
1401 class OdUS2W
1402 {
1403  wchar_t* _buf;
1404 public:
1405  OdUS2W(const OdUInt16* pStr)
1406  {
1407  size_t len = 0;
1408  if (const OdUInt16* p = pStr)
1409  {
1410  while (*p++)
1411  len++;
1412  }
1413  _buf = new wchar_t[len+1];
1414  for (size_t i = 0; i < len; i++)
1415  {
1416  _buf[i] = (wchar_t)pStr[i];
1417  }
1418  _buf[len] = 0;
1419  }
1420  ~OdUS2W()
1421  {
1422  delete _buf;
1423  }
1424  operator const wchar_t*() const { return _buf; }
1425 };
1426 
1427 #else
1428 
1429 #define OdUS2W(a) (const wchar_t*)(a)
1430 #define OdW2US(a) (const OdUInt16*)(a)
1431 
1432 #endif
1433 
1435 
1440 {
1441 public:
1442  OdConstString(const OdChar* pSource = NULL);
1443  // Destructor of base class OdString is not virtual (critical for performance).
1444  // Therefore ~OdConstString is missing
1445 
1447  OdString& operator=(const OdString& pSource);
1449  OdString& operator=(const OdChar* pSource);
1450  OdString& operator=(const OdAnsiString& pSource);
1451  OdString& operator=(const char* pSource);
1452  operator const OdChar*() const;
1453 
1454 protected:
1456 };
1457 
1459 
1460 #include "TD_PackPop.h"
1461 
1462 #endif // __ODSTRING_H__
1463 
1464 
#define ODA_ASSERT(exp)
Definition: DebugStuff.h:49
#define NULL
Definition: GsProperties.h:177
OdCodePageId
Definition: OdCodePage.h:31
@ CP_CNT
Definition: OdCodePage.h:78
int OdRefCounter
Definition: OdMutex.h:436
#define odStrICmp
Definition: OdPlatform.h:369
#define odStrLen(str)
Definition: OdPlatform.h:240
#define odStrCmp(str, str2)
Definition: OdPlatform.h:248
#define odStrCmpA(str, str2)
Definition: OdPlatform.h:252
#define Od_wcslen
Definition: OdPlatform.h:144
unsigned short OdUInt16
wchar_t OdChar
bool operator>=(const OdString &s1, const OdString &s2)
Definition: OdString.h:1351
#define OdW2US(a)
Definition: OdString.h:1430
bool operator!=(const OdString &s1, const OdString &s2)
Definition: OdString.h:1261
bool operator==(const OdString &s1, const OdString &s2)
Definition: OdString.h:1238
bool operator<=(const OdString &s1, const OdString &s2)
Definition: OdString.h:1329
OdChar OdCharW
Definition: OdString.h:1223
#define OdUS2W(a)
Definition: OdString.h:1429
bool operator<(const OdString &s1, const OdString &s2)
Definition: OdString.h:1284
bool operator>(const OdString &s1, const OdString &s2)
Definition: OdString.h:1307
OdString OdString
Definition: OdString.h:1224
#define updateConstStringDiagnostic(pAddr)
Definition: OdString.h:194
#define FIRSTDLL_EXPORT
Definition: RootExport.h:39
#define FIRSTDLL_EXPORT_STATIC
Definition: RootExport.h:40
OdConstString(const OdChar *pSource=NULL)
OdString & operator=(const OdAnsiString &pSource)
OdString & operator=(const char *pSource)
OdString & operator=(const OdString &pSource)
OdStringData m_data
Definition: OdString.h:1455
OdString & operator=(OdChar ch)
OdString & operator=(const OdChar *pSource)
OdConstString & operator=(const OdConstString &pSource)
OdString & trimLeft(const OdChar *whiteChars)
int replace(OdChar oldChar, OdChar newChar)
int compare(const OdString &otherString) const
Definition: OdString.h:341
static void release(OdStringData *pStringData)
const OdChar * c_str() const
Definition: OdString.h:200
void assignCopy(int sourceLength, const OdChar *source)
OdString(const OdChar *source)
int compare(const char *otherString) const
OdString & trimRight(const OdString &whiteChars)
Definition: OdString.h:624
void copyBeforeWrite()
OdString mid(int startIndex, int length) const
OdString & operator=(OdChar ch)
int compare(const OdChar *otherString) const
Definition: OdString.h:319
int iCompare(const OdChar *otherString) const
Definition: OdString.h:394
OdString & formatV(const OdChar *formatString, va_list argList)
int insert(int insertIndex, const OdString &insertString)
Definition: OdString.h:790
OdChar * getBufferSetLength(int length)
int find(const OdChar *searchString) const
int replace(const OdChar *oldString, const OdChar *newString)
void syncUnicode() const
OdString & operator=(const OdAnsiString &source)
OdString(OdStringData *pData)
OdString & trimLeft(OdChar whiteChar)
void empty()
OdChar * lockBuffer()
OdString()
Definition: OdString.h:100
OdChar getAt(int charIndex) const
Definition: OdString.h:156
int remove(OdChar chRemove)
void init()
int find(const OdChar *searchString, int startIndex) const
OdString & trimRight(const OdChar *whiteChars)
OdChar * getBuffer(int minBufLength)
friend FIRSTDLL_EXPORT OdString operator+(const OdString &string1, const OdString &string2)
int iCompare(const OdString &otherString) const
Definition: OdString.h:416
OdString & operator=(const OdChar *source)
int find(OdChar searchChar, int startIndex) const
void concatInPlace(int sourceLength, const OdChar *source)
OdStringData * getData() const
Definition: OdString.h:1095
bool isEmpty() const
Definition: OdString.h:141
OdString mid(int startIndex) const
OdString & operator+=(const char *string)
OdString(OdChar ch, int length)
void concatCopy(int sourceLength1, const OdChar *source1, int sourceLength2, const OdChar *source2)
void unlockBuffer()
OdString & operator+=(const OdString &string)
OdString(const OdString &source)
friend FIRSTDLL_EXPORT OdString operator+(OdChar ch, const OdString &string)
OdString & format(const OdChar *formatString,...)
OdString & operator=(const OdString &source)
int reverseFind(OdChar searchChar) const
OdString(const char *lpch, int nLength, OdCodePageId codepage=CP_CNT)
void allocCopy(OdString &destString, int copyLength, int copyIndex, int extraLength) const
OdString & trimRight(OdChar whiteChar)
void release()
void allocBuffer(int length, bool allocAlways=false)
OdString & trimLeft(const OdString &whiteChars)
Definition: OdString.h:674
void setAt(int charIndex, OdChar ch)
OdString left(int length) const
OdString spanExcluding(const OdChar *charSet) const
OdString & makeUpper()
OdAnsiString * getAnsiString() const
Definition: OdString.h:1212
OdString & operator+=(const OdChar *string)
friend FIRSTDLL_EXPORT OdString operator+(const OdString &string1, const OdChar *string2)
OdString & trimRight()
static void freeData(OdStringData *pStringData)
int getLengthA() const
FIRSTDLL_EXPORT_STATIC static const OdString kEmpty
Definition: OdString.h:98
OdString right(int length) const
void freeExtra()
OdString spanIncluding(const OdString &charSet) const
Definition: OdString.h:487
void releaseBuffer(int newLength=-1)
int replace(const OdString &oldString, const OdString &newString)
Definition: OdString.h:720
OdString spanIncluding(const OdChar *charSet) const
void allocBeforeWrite(int newLength)
int reverseFind(OdChar searchChar, int startIndex) const
OdString(const char *lpch, OdCodePageId codepage=CP_CNT)
OdString & operator=(const char *source)
friend FIRSTDLL_EXPORT OdString operator+(const OdString &string, OdChar ch)
int insert(int insertIndex, OdChar insertChar)
OdString & makeLower()
OdString(const OdChar *source, int length)
OdString(const OdAnsiString &)
OdString & trimLeft()
int getAllocLength() const
Definition: OdString.h:1081
static FIRSTDLL_EXPORT_STATIC OdStringData kEmptyData
Definition: OdString.h:1085
bool isUnicodeNotInSync() const
Definition: OdString.h:1207
friend FIRSTDLL_EXPORT OdString operator+(const OdChar *string1, const OdString &string2)
OdString spanExcluding(const OdString &charSet) const
Definition: OdString.h:528
OdStringData * m_pData
Definition: OdString.h:1090
int deleteChars(int deleteIndex, int count=1)
static int safeStrlen(const OdChar *string)
Definition: OdString.h:1198
int insert(int insertIndex, const OdChar *insertString)
OdChar operator[](int charIndex) const
Definition: OdString.h:174
int find(OdChar searchChar) const
OdString & operator+=(OdChar ch)
int findOneOf(const OdChar *charSet) const
int getLength() const
Definition: OdString.h:130
void freeAnsiString() const
OdString & makeReverse()
GLsizei GLsizei * count
Definition: gles2_ext.h:276
GLsizei GLsizei GLchar * source
Definition: gles2_ext.h:282
GLuint GLsizei GLsizei * length
Definition: gles2_ext.h:274
GLint GLint GLint GLsizei GLsizei GLenum format
Definition: gles2_ext.h:111
int nAllocLength
Definition: OdString.h:73
OdChar * unicodeBuffer
Definition: OdString.h:78
int nDataLength
Definition: OdString.h:68
OdRefCounter nRefs
Definition: OdString.h:63
char * ansiString
Definition: OdString.h:83