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