00001
00002
00003
00004
00005
00006
00007
00008
00009 #ifndef __TOOLBOX_STRING_H
00010 #define __TOOLBOX_STRING_H
00011
00012
00013
00014
00015
00016
00021 #define _TB_ST_SIZEINCREMENT 16
00022
00023
00024
00025
00026 #define CLONE_STRING(attribute, value) \
00027 { \
00028 if ((attribute = new char[strlen(value) + 1]) == NULL) \
00029 throw EOutOfMemory::Get(); \
00030 strcpy(attribute, (value)); \
00031 }
00032
00033 #define UPDATE_STRING(attribute, value) \
00034 { \
00035 if (attribute != NULL) {delete attribute;} \
00036 if ((attribute = new char[strlen(value) + 1]) == NULL) \
00037 throw EOutOfMemory::Get(); \
00038 strcpy(attribute, (value)); \
00039 }
00040
00041
00042 namespace toolbox
00043 {
00052 #if defined(_DEBUG) && (defined(_AFX) || defined(_AFXDLL))
00053 class String : public CObject
00054 #else
00055 class String
00056 #endif
00057 {
00058 private:
00059
00067 char * Data;
00068
00069 #ifdef _TOOLBOX_TEST
00070
00073 static int InstanceCount;
00074 #endif
00075
00079 unsigned int Size;
00080
00089 void Allocate(unsigned int minimumSize);
00090
00091 public:
00092
00096 String();
00097
00102 String(const class String & String);
00103
00108 String(const class String * String);
00109
00114 String(const char * string);
00115
00124 String(const class String & String, unsigned int fromIndex, unsigned int length);
00125
00134 String(const class String * String, unsigned int fromIndex, unsigned int length);
00135
00144 String(const char * string, unsigned int fromIndex, unsigned int length);
00145
00150 String(char character);
00151
00156 String(int number);
00157
00162 inline String(unsigned int number);
00163
00168 String(long number);
00169
00174 String(unsigned long number);
00175
00180 String(bool boolean);
00181
00187 ~String();
00188
00196 inline String operator +(const class String & String) const;
00197
00205 inline String operator +(const class String * String) const;
00206
00214 inline String operator +(const char * string) const;
00215
00223 inline String operator +(char character) const;
00224
00232 inline String operator +(int number) const;
00233
00241 inline String operator +(unsigned int number) const;
00242
00250 inline String operator +(long number) const;
00251
00259 inline String operator +(unsigned long number) const;
00260
00268 inline String operator +(bool boolean) const;
00269
00274 inline void operator +=(const class String & String);
00275
00280 inline void operator +=(const class String * String);
00281
00286 inline void operator +=(const char * string);
00287
00292 inline void operator +=(char character);
00293
00298 inline void operator +=(int number);
00299
00304 inline void operator +=(unsigned int number);
00305
00310 inline void operator +=(long number);
00311
00316 inline void operator +=(unsigned long number);
00317
00322 inline void operator +=(bool boolean);
00323
00328 inline void operator =(const class String & String);
00329
00334 inline void operator =(const class String * String);
00335
00340 void operator =(const char * string);
00341
00346 void operator =(char character);
00347
00352 void operator =(int number);
00353
00358 inline void operator =(unsigned int number);
00359
00364 void operator =(long number);
00365
00370 void operator =(unsigned long number);
00371
00376 void operator =(bool boolean);
00377
00384 inline bool operator <(const class String & String) const;
00385
00392 inline bool operator <(const class String * String) const;
00393
00400 inline bool operator <(const char * string) const;
00401
00408 inline bool operator <=(const class String & String) const;
00409
00416 inline bool operator <=(const class String * String) const;
00417
00424 inline bool operator <=(const char * string) const;
00425
00432 inline bool operator >(const class String & String) const;
00433
00440 inline bool operator >(const class String * String) const;
00441
00448 inline bool operator >(const char * string) const;
00449
00456 inline bool operator >=(const class String & String) const;
00457
00464 inline bool operator >=(const class String * String) const;
00465
00472 inline bool operator >=(const char * string) const;
00473
00483 inline bool operator ==(const class String & String) const;
00484
00494 inline bool operator ==(const class String * String) const;
00495
00505 inline bool operator ==(const char * string) const;
00506
00515 inline bool operator !=(const class String & String) const;
00516
00525 inline bool operator !=(const class String * String) const;
00526
00535 inline bool operator !=(const char * string) const;
00536
00544 inline char operator [](int index) const;
00545
00550 inline operator const char *() const;
00551
00556 inline void Append(const class String & String);
00557
00562 inline void Append(const class String * String);
00563
00568 void Append(const char * string);
00569
00574 void Append(char character);
00575
00580 void Append(int number);
00581
00586 inline void Append(unsigned int number);
00587
00592 void Append(long number);
00593
00598 void Append(unsigned long number);
00599
00604 void Append(bool boolean);
00605
00609 inline void Clear();
00610
00615 inline String Clone() const;
00616
00626 static inline int Compare(const String & String1, const String & String2);
00627
00637 static inline int Compare(const String * String1, const String * String2);
00638
00649 static int Compare(const char * string1, const char * string2);
00650
00660 static inline int CompareIC(const String & String1, const String & String2);
00661
00671 static inline int CompareIC(const String * String1, const String * String2);
00672
00683 static int CompareIC(const char * string1, const char * string2);
00684
00694 inline int CompareTo(const String & String) const;
00695
00705 inline int CompareTo(const String * String) const;
00706
00716 inline int CompareTo(const char * string) const;
00717
00727 inline int CompareToIC(const String & String) const;
00728
00738 inline int CompareToIC(const String * String) const;
00739
00749 inline int CompareToIC(const char * string) const;
00750
00756 inline bool Contains(const class String & String) const;
00757
00763 inline bool Contains(const class String * String) const;
00764
00770 inline bool Contains(const char * string) const;
00771
00779 void Cut(unsigned int fromIndex);
00780
00792 void Cut(unsigned int fromIndex, unsigned int length);
00793
00799 inline bool EndsWith(const class String & String) const;
00800
00806 inline bool EndsWith(const class String * String) const;
00807
00813 bool EndsWith(const char * string) const;
00814
00821 inline bool EndsWithIC(const class String & String) const;
00822
00829 inline bool EndsWithIC(const class String * String) const;
00830
00837 bool EndsWithIC(const char * string) const;
00838
00846 inline bool Equals(const class String & String) const;
00847
00855 inline bool Equals(const class String * String) const;
00856
00864 inline bool Equals(const char * string) const;
00865
00872 inline bool EqualsIC(const class String & String) const;
00873
00880 inline bool EqualsIC(const class String * String) const;
00881
00888 inline bool EqualsIC(const char * string) const;
00889
00896 inline int Find(const class String & String) const;
00897
00904 inline int Find(const class String * String) const;
00905
00912 int Find(const char * string) const;
00913
00927 inline int Find(const class String & String, unsigned int fromIndex) const;
00928
00942 inline int Find(const class String * String, unsigned int fromIndex) const;
00943
00957 int Find(const char * string, unsigned int fromIndex) const;
00958
00965 inline int FindIC(const class String & String) const;
00966
00973 inline int FindIC(const class String * String) const;
00974
00981 inline int FindIC(const char * string) const;
00982
00996 inline int FindIC(const class String & String, unsigned int fromIndex) const;
00997
01011 inline int FindIC(const class String * String, unsigned int fromIndex) const;
01012
01026 int FindIC(const char * string, unsigned int fromIndex) const;
01027
01034 inline int FindLast(const class String & String) const;
01035
01042 inline int FindLast(const class String * String) const;
01043
01050 inline int FindLast(const char * string) const;
01051
01065 inline int FindLast(const class String & String, unsigned int fromIndex) const;
01066
01080 inline int FindLast(const class String * String, unsigned int fromIndex) const;
01081
01095 int FindLast(const char * string, unsigned int fromIndex) const;
01096
01103 inline int FindLastIC(const class String & String) const;
01104
01111 inline int FindLastIC(const class String * String) const;
01112
01119 inline int FindLastIC(const char * string) const;
01120
01134 inline int FindLastIC(const class String & String, unsigned int fromIndex) const;
01135
01149 inline int FindLastIC(const class String * String, unsigned int fromIndex) const;
01150
01164 int FindLastIC(const char * string, unsigned int fromIndex) const;
01165
01172 void Format(const char * format, ...);
01173
01180 void FormatFromVargs(const char * format, const va_list & arguments);
01181
01186 unsigned int GetLength() const;
01187
01192 String * HeapClone() const;
01193
01201 inline void Insert(const class String & String, unsigned int index);
01202
01210 inline void Insert(const class String * String, unsigned int index);
01211
01219 void Insert(const char * string, unsigned int index);
01220
01228 void Insert(char character, unsigned int index);
01229
01237 void Insert(int number, unsigned int index);
01238
01246 inline void Insert(unsigned int number, unsigned int index);
01247
01255 void Insert(long number, unsigned int index);
01256
01264 void Insert(unsigned long number, unsigned int index);
01265
01273 void Insert(bool boolean, unsigned int index);
01274
01280 static bool IsCharacter(unsigned char character);
01281
01287 static bool IsDigit(unsigned char character);
01288
01293 inline bool IsEmpty() const;
01294
01300 static bool IsLowerCharacter(unsigned char character);
01301
01307 static bool IsUpperCharacter(unsigned char character);
01308
01314 static bool IsValid(unsigned char character);
01315
01321 static bool IsWhiteSpace(unsigned char character);
01322
01327 inline void Prepend(const class String & String);
01328
01333 inline void Prepend(const class String * String);
01334
01339 void Prepend(const char * string);
01340
01345 void Prepend(char character);
01346
01351 void Prepend(int number);
01352
01357 inline void Prepend(unsigned int number);
01358
01363 void Prepend(long number);
01364
01369 void Prepend(unsigned long number);
01370
01375 void Prepend(bool boolean);
01376
01387 bool ReadFrom(const char * fileName, bool textMode);
01388
01396 bool ReadFrom(FILE * file);
01397
01404 inline void Replace(const String & Text, const String & Replacement);
01405
01412 inline void Replace(const String * Text, const String * Replacement);
01413
01420 void Replace(const char * text, const char * replacement);
01421
01428 void Replace(char character, char replacement);
01429
01430 #ifdef _TOOLBOX_TEST
01431
01437 static void RunTestSuite(int * performedTests, int * failedTests);
01438 #endif
01439
01445 inline bool StartsWith(const class String & String) const;
01446
01452 inline bool StartsWith(const class String * String) const;
01453
01459 bool StartsWith(const char * string) const;
01460
01467 inline bool StartsWithIC(const class String & String) const;
01468
01475 inline bool StartsWithIC(const class String * String) const;
01476
01483 bool StartsWithIC(const char * string) const;
01484
01495 String Substring(unsigned int fromIndex, unsigned int length) const;
01496
01504 String Substring(unsigned int fromIndex) const;
01505
01509 void ToLowerCase();
01510
01517 static unsigned char ToLowerCase(unsigned char character);
01518
01522 void ToUpperCase();
01523
01530 static unsigned char ToUpperCase(unsigned char character);
01531
01536 void Trim();
01537
01542 void TrimLeft();
01543
01548 void TrimRight();
01549
01562 bool WriteTo(const char * fileName, bool textMode, bool append = false);
01563
01569 inline bool WriteTo(FILE * file);
01570 };
01571 }
01572
01573
01574 #endif