00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014 #ifndef ZenLib_ZtringH
00015 #define ZenLib_ZtringH
00016
00017
00018
00019 #include "ZenLib/Utils.h"
00020 #include <string>
00021 #include <sstream>
00022
00023
00024 namespace ZenLib
00025 {
00026
00027
00028 typedef std::basic_string<Char, std::char_traits<Char>, std::allocator<Char> > tstring;
00029
00030
00031
00032
00033 enum ztring_t
00034 {
00035 Ztring_Nothing,
00036 Ztring_Rounded = 1,
00037 Ztring_CaseSensitive = 2,
00038 Ztring_AddLastItem = 4,
00039 Ztring_Recursive = 8,
00040 Ztring_NoZero = 16
00041 };
00042
00043
00044
00045
00046
00047
00048
00049 class Ztring : public tstring
00050 {
00051 public :
00052
00053 Ztring () : tstring(){};
00054 Ztring (const tstring& str) : tstring(str){};
00055 Ztring (const tstring& str, size_type pos, size_type n=npos) : tstring(str, pos, n){};
00056 Ztring (const Char* s, size_type n) : tstring(s, n){};
00057 Ztring (const Char* s) : tstring(s){};
00058 Ztring (size_type n, Char c) : tstring(n, c){};
00059 #ifdef UNICODE
00060 Ztring (const char* S) : tstring(){From_UTF8(S);};
00061 Ztring (const char* S, size_type n) : tstring(){From_UTF8(S, 0, n);};
00062 #endif //UNICODE
00063
00064
00065
00066 Char &operator () (size_type Pos);
00067
00068
00069 bool Assign_FromFile (const Ztring &FileName);
00070
00071
00072 #ifndef WSTRING_MISSING
00073
00074 Ztring& From_Unicode (const std::wstring &S) {return From_Unicode(S.c_str());};
00075 #endif //WSTRING_MISSING
00076
00077 Ztring& From_Unicode (const wchar_t S);
00078
00079 Ztring& From_Unicode (const wchar_t *S);
00080
00081 Ztring& From_Unicode (const wchar_t *S, size_type Start, size_type Length);
00082
00083 Ztring& From_Unicode (const wchar_t *S, size_type Length) {return From_Unicode(S, 0, Length);};
00084
00085 Ztring& From_UTF8 (const std::string &S) {return From_UTF8(S.c_str());};
00086
00087 Ztring& From_UTF8 (const char *S);
00088
00089 Ztring& From_UTF8 (const char *S, size_type Start, size_type Length);
00090
00091 Ztring& From_UTF8 (const char *S, size_type Length) {return From_UTF8(S, 0, Length);};
00092
00093 Ztring& From_UTF16 (const char *S);
00094
00095 Ztring& From_UTF16 (const char *S, size_type Start, size_type Length);
00096
00097 Ztring& From_UTF16 (const char *S, size_type Length) {return From_UTF16(S, 0, Length);};
00098
00099 Ztring& From_UTF16BE (const char *S);
00100
00101 Ztring& From_UTF16BE (const char *S, size_type Start, size_type Length);
00102
00103 Ztring& From_UTF16BE (const char *S, size_type Length) {return From_UTF16BE(S, 0, Length);};
00104
00105 Ztring& From_UTF16LE (const char *S);
00106
00107 Ztring& From_UTF16LE (const char *S, size_type Start, size_type Length);
00108
00109 Ztring& From_UTF16LE (const char *S, size_type Length) {return From_UTF16LE(S, 0, Length);};
00110
00111 Ztring& From_Local (const std::string &S) {return From_Local(S.c_str());};
00112
00113 Ztring& From_Local (const char *S);
00114
00115 Ztring& From_Local (const char *S, size_type Start, size_type Length);
00116
00117 Ztring& From_Local (const char *S, size_type Length) {return From_Local(S, 0, Length);};
00118
00119
00120 Ztring& From_ISO_8859_1 (const char *S);
00121
00122 Ztring& From_ISO_8859_1 (const char *S, size_type Start, size_type Length);
00123
00124 Ztring& From_ISO_8859_1 (const char *S, size_type Length) {return From_ISO_8859_1(S, 0, Length);};
00125
00126
00127 Ztring& From_ISO_8859_2 (const char *S);
00128
00129 Ztring& From_ISO_8859_2 (const char *S, size_type Start, size_type Length);
00130
00131 Ztring& From_ISO_8859_2 (const char *S, size_type Length) {return From_ISO_8859_2(S, 0, Length);};
00132
00133
00134 Ztring& From_GUID (const int128u S);
00135
00136 Ztring& From_UUID (const int128u S);
00137
00138 Ztring& From_CC4 (const char *S) {return From_Local(S, 0, 4);};
00139
00140 Ztring& From_CC4 (const int8u *S) {return From_Local((const char*)S, 0, 4);};
00141
00142 Ztring& From_CC4 (const int32u S);
00143
00144 Ztring& From_CC3 (const char *S) {return From_Local(S, 0, 3);};
00145
00146 Ztring& From_CC3 (const int8u *S) {return From_Local((const char*)S, 0, 3);};
00147
00148 Ztring& From_CC3 (const int32u S);
00149
00150 Ztring& From_CC2 (const char *S) {return From_CC2(ZenLib::CC2(S));};
00151
00152 Ztring& From_CC2 (const int8u *S) {return From_CC2(ZenLib::CC2(S));};
00153
00154 Ztring& From_CC2 (const int16u S);
00155
00156 Ztring& From_CC1 (const char *S) {return From_CC1(ZenLib::CC1(S));};
00157
00158 Ztring& From_CC1 (const int8u *S) {return From_CC1(ZenLib::CC1(S));};
00159
00160 Ztring& From_CC1 (const int8u S);
00161
00162 Ztring& From_Number (const int8s, int8u Radix=10);
00163
00164 Ztring& From_Number (const int8u, int8u Radix=10);
00165
00166 Ztring& From_Number (const int16s, int8u Radix=10);
00167
00168 Ztring& From_Number (const int16u, int8u Radix=10);
00169
00170 Ztring& From_Number (const int32s, int8u Radix=10);
00171
00172 Ztring& From_Number (const int32u, int8u Radix=10);
00173
00174 Ztring& From_Number (const int64s, int8u Radix=10);
00175
00176 Ztring& From_Number (const int64u, int8u Radix=10);
00177
00178 Ztring& From_Number (const int128u, int8u Radix=10);
00179
00180 Ztring& From_Number (const float32, int8u AfterComma=3, ztring_t Options=Ztring_Nothing);
00181
00182 Ztring& From_Number (const float64, int8u AfterComma=3, ztring_t Options=Ztring_Nothing);
00183
00184 Ztring& From_Number (const float80, int8u AfterComma=3, ztring_t Options=Ztring_Nothing);
00185 #ifdef SIZE_T_IS_LONG
00186
00187 Ztring& From_Number (const size_t, int8u Radix=10);
00188 #endif //SIZE_T_IS_LONG
00189
00190 Ztring& From_BCD (const int8u);
00191
00192 Ztring& Duration_From_Milliseconds (const int64s Milliseconds);
00193
00194 Ztring& Duration_From_Milliseconds (const int64u Milliseconds);
00195
00196 Ztring& Date_From_Milliseconds_1601 (const int64u Milliseconds);
00197
00198 Ztring& Date_From_Seconds_1601 (const int64u Seconds);
00199
00200 Ztring& Date_From_Seconds_1900 (const int32u Seconds);
00201
00202 Ztring& Date_From_Seconds_1900 (const int64s Seconds);
00203
00204 Ztring& Date_From_Seconds_1904 (const int32u Seconds);
00205
00206 Ztring& Date_From_Seconds_1904 (const int64u Seconds);
00207
00208 Ztring& Date_From_Seconds_1904 (const int64s Seconds);
00209
00210 Ztring& Date_From_Seconds_1970 (const int32u Seconds);
00211
00212 Ztring& Date_From_Seconds_1970 (const int32s Seconds);
00213
00214 Ztring& Date_From_Seconds_1970 (const int64s Seconds);
00215
00216 Ztring& Date_From_Seconds_1970_Local (const int32u Seconds);
00217
00218 Ztring& Date_From_String (const char* Date, size_type Value_Size=Error);
00219
00220 Ztring& Date_From_Numbers (const int8u Year, const int8u Month, const int8u Day, const int8u Hour, const int8u Minute, const int8u Second);
00221
00222
00223 #ifndef WSTRING_MISSING
00224
00225
00226 std::wstring To_Unicode () const;
00227 #endif //WSTRING_MISSING
00228
00229
00230 std::string To_UTF8 () const;
00231
00232
00233 std::string To_Local () const;
00234
00235
00236
00237 int128u To_UUID () const;
00238
00239
00240
00241 int32u To_CC4 () const;
00242
00243
00244
00245 int8s To_int8s (int8u Radix=10, ztring_t Options=Ztring_Rounded) const;
00246
00247
00248
00249 int8u To_int8u (int8u Radix=10, ztring_t Options=Ztring_Rounded) const;
00250
00251
00252
00253 int16s To_int16s (int8u Radix=10, ztring_t Options=Ztring_Rounded) const;
00254
00255
00256
00257 int16u To_int16u (int8u Radix=10, ztring_t Options=Ztring_Rounded) const;
00258
00259
00260
00261 int32s To_int32s (int8u Radix=10, ztring_t Options=Ztring_Rounded) const;
00262
00263
00264
00265 int32u To_int32u (int8u Radix=10, ztring_t Options=Ztring_Rounded) const;
00266
00267
00268
00269 int64s To_int64s (int8u Radix=10, ztring_t Options=Ztring_Rounded) const;
00270
00271
00272
00273 int64u To_int64u (int8u Radix=10, ztring_t Options=Ztring_Rounded) const;
00274
00275
00276
00277
00278 int128u To_int128u (int8u Radix=10, ztring_t Options=Ztring_Rounded) const;
00279
00280
00281
00282 float32 To_float32 (ztring_t Options=Ztring_Nothing) const;
00283 float64 To_float64 (ztring_t Options=Ztring_Nothing) const;
00284 float80 To_float80 (ztring_t Options=Ztring_Nothing) const;
00285
00286
00287 static Ztring ToZtring_From_Local(const std::string &S) {return Ztring().From_Local(S);};
00288 static Ztring ToZtring_From_Local(const char *S) {return Ztring().From_Local(S);};
00289 static Ztring ToZtring_From_Local(const char *S, size_type Start, size_type Length) {return Ztring().From_Local(S, Start, Length);};
00290 static Ztring ToZtring_From_Local(const char *S, size_type Length) {return Ztring().From_Local(S, Length);};
00291 static Ztring ToZtring_From_CC4 (const char *S) {return Ztring().From_CC4(S);};
00292 static Ztring ToZtring_From_CC4 (const int8u *S) {return Ztring().From_CC4(S);};
00293 static Ztring ToZtring_From_CC4 (const int32u S) {return Ztring().From_CC4(S);};
00294 static Ztring ToZtring_From_CC3 (const char *S) {return Ztring().From_CC3(S);};
00295 static Ztring ToZtring_From_CC3 (const int8u *S) {return Ztring().From_CC3(S);};
00296 static Ztring ToZtring_From_CC3 (const int32u S) {return Ztring().From_CC3(S);};
00297 static Ztring ToZtring_From_CC2 (const char *S) {return Ztring().From_CC2(S);};
00298 static Ztring ToZtring_From_CC2 (const int8u *S) {return Ztring().From_CC2(S);};
00299 static Ztring ToZtring_From_CC2 (const int16u S) {return Ztring().From_CC2(S);};
00300 static Ztring ToZtring_From_CC1 (const char *S) {return Ztring().From_CC1(S);};
00301 static Ztring ToZtring_From_CC1 (const int8u *S) {return Ztring().From_CC1(S);};
00302 static Ztring ToZtring_From_CC1 (const int8u S) {return Ztring().From_CC1(S);};
00303 static Ztring ToZtring (const int8s I, int8u Radix=10) {return Ztring().From_Number(I, Radix);};
00304 static Ztring ToZtring (const int8u I, int8u Radix=10) {return Ztring().From_Number(I, Radix);};
00305 static Ztring ToZtring (const int16s I, int8u Radix=10) {return Ztring().From_Number(I, Radix);};
00306 static Ztring ToZtring (const int16u I, int8u Radix=10) {return Ztring().From_Number(I, Radix);};
00307 static Ztring ToZtring (const int32s I, int8u Radix=10) {return Ztring().From_Number(I, Radix);};
00308 static Ztring ToZtring (const int32u I, int8u Radix=10) {return Ztring().From_Number(I, Radix);};
00309 static Ztring ToZtring (const int64s I, int8u Radix=10) {return Ztring().From_Number(I, Radix);};
00310 static Ztring ToZtring (const int64u I, int8u Radix=10) {return Ztring().From_Number(I, Radix);};
00311 static Ztring ToZtring (const int128u I, int8u Radix=10) {return Ztring().From_Number(I, Radix);};
00312 static Ztring ToZtring (const float32 F, int8u AfterComma=3) {return Ztring().From_Number(F, AfterComma);};
00313 static Ztring ToZtring (const float64 F, int8u AfterComma=3) {return Ztring().From_Number(F, AfterComma);};
00314 static Ztring ToZtring (const float80 F, int8u AfterComma=3) {return Ztring().From_Number(F, AfterComma);};
00315 #ifdef SIZE_T_IS_LONG
00316 static Ztring ToZtring (const size_t I, int8u Radix=10) {return Ztring().From_Number(I, Radix);};
00317 #endif //SIZE_T_IS_LONG
00318
00319
00320
00321 bool IsNumber() const;
00322
00323 Ztring &MakeLowerCase();
00324
00325 Ztring &MakeUpperCase();
00326
00327 Ztring &TrimLeft(Char ToTrim=__T(' '));
00328
00329 Ztring &TrimRight(Char ToTrim=__T(' '));
00330
00331 Ztring &Trim(Char ToTrim=__T(' '));
00332
00333 Ztring &Quote(Char ToTrim=__T('\"'));
00334
00335
00336
00337
00338
00339
00340
00341
00342 Ztring SubString (const tstring &Begin, const tstring &End, size_type Pos=0, ztring_t Options=Ztring_Nothing) const;
00343
00344
00345
00346
00347
00348
00349
00350 size_type FindAndReplace (const tstring &ToFind, const tstring &ReplaceBy, size_type Pos=0, ztring_t Options=Ztring_Nothing);
00351
00352
00353
00354
00355
00356
00357
00358 size_type Count (const Ztring &ToCount, ztring_t Options=Ztring_Nothing) const;
00359
00360
00361
00362
00363
00364 bool Compare (const Ztring &ToCompare, const Ztring &Comparator=__T("=="), ztring_t Options=Ztring_Nothing) const;
00365 };
00366
00367 }
00368
00369 #endif