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 <string>
00036 #include <sstream>
00037
00038
00039 namespace ZenLib
00040 {
00041
00042
00043 typedef std::basic_string<Char, std::char_traits<Char>, std::allocator<Char> > tstring;
00044
00045
00046
00047
00048 enum ztring_t
00049 {
00050 Ztring_Nothing,
00051 Ztring_Rounded = 1,
00052 Ztring_CaseSensitive = 2,
00053 Ztring_AddLastItem = 4,
00054 Ztring_Recursive = 8,
00055 Ztring_NoZero =16
00056 };
00057
00058
00059
00060
00061
00062
00063
00064 class Ztring : public tstring
00065 {
00066 public :
00067
00068 Ztring () : tstring(){};
00069 Ztring (const tstring& S) : tstring(S.c_str()){};
00070 Ztring (const tstring& S, size_type Pos, size_type n=npos) : tstring(S.c_str(), Pos, n){};
00071 Ztring (const tstring* S) : tstring(S->c_str()){};
00072 Ztring (const tstring* S, size_type Pos, size_type n=npos) : tstring(S->c_str(), Pos, n){};
00073 Ztring (const Char* S) : tstring(S){};
00074 Ztring (const Char* S, size_type n) : tstring(S, n){};
00075 Ztring (size_type n, const Char &S) : tstring(n, S){};
00076 #ifdef UNICODE
00077 Ztring (const char* S) : tstring(){From_UTF8(S);};
00078 Ztring (const char* S, size_type n) : tstring(){From_UTF8(S, 0, n);};
00079 #endif //UNICODE
00080
00081
00082
00083 Char &operator () (size_type Pos);
00084
00085
00086
00087 Ztring& From_Unicode (const std::wstring &S) {return From_Unicode(S.c_str());};
00088
00089 Ztring& From_Unicode (const wchar_t *S);
00090
00091 Ztring& From_Unicode (const wchar_t *S, size_type Start, size_type Length);
00092
00093 Ztring& From_Unicode (const wchar_t *S, size_type Length) {return From_Unicode(S, 0, Length);};
00094
00095 Ztring& From_UTF8 (const std::string &S) {return From_UTF8(S.c_str());};
00096
00097 Ztring& From_UTF8 (const char *S);
00098
00099 Ztring& From_UTF8 (const char *S, size_type Start, size_type Length);
00100
00101 Ztring& From_UTF8 (const char *S, size_type Length) {return From_UTF8(S, 0, Length);};
00102
00103 Ztring& From_UTF16 (const char *S);
00104
00105 Ztring& From_UTF16 (const char *S, size_type Start, size_type Length);
00106
00107 Ztring& From_UTF16 (const char *S, size_type Length) {return From_UTF16(S, 0, Length);};
00108
00109 Ztring& From_UTF16BE (const char *S);
00110
00111 Ztring& From_UTF16BE (const char *S, size_type Start, size_type Length);
00112
00113 Ztring& From_UTF16BE (const char *S, size_type Length) {return From_UTF16BE(S, 0, Length);};
00114
00115 Ztring& From_UTF16LE (const char *S);
00116
00117 Ztring& From_UTF16LE (const char *S, size_type Start, size_type Length);
00118
00119 Ztring& From_UTF16LE (const char *S, size_type Length) {return From_UTF16LE(S, 0, Length);};
00120
00121 Ztring& From_Local (const std::string &S) {return From_Local(S.c_str());};
00122
00123 Ztring& From_Local (const char *S);
00124
00125 Ztring& From_Local (const char *S, size_type Start, size_type Length);
00126
00127 Ztring& From_Local (const char *S, size_type Length) {return From_Local(S, 0, Length);};
00128
00129 Ztring& From_CC4 (const char *S) {return From_Local(S, 0, 4);};
00130
00131 Ztring& From_CC4 (const int8u *S) {return From_Local((const char*)S, 0, 4);};
00132
00133 Ztring& From_CC4 (const int32u S);
00134
00135 Ztring& From_CC2 (const char *S) {return From_Number(ZenLib::CC2(S), 16);};
00136
00137 Ztring& From_CC2 (const int8u *S) {return From_Number(ZenLib::CC2(S), 16);};
00138
00139 Ztring& From_CC2 (const int16u S) {return From_Number(S, 16);};
00140
00141 Ztring& From_Number (const int8s, int8u Radix=10);
00142
00143 Ztring& From_Number (const int8u, int8u Radix=10);
00144
00145 Ztring& From_Number (const int16s, int8u Radix=10);
00146
00147 Ztring& From_Number (const int16u, int8u Radix=10);
00148
00149 Ztring& From_Number (const int32s, int8u Radix=10);
00150
00151 Ztring& From_Number (const int32u, int8u Radix=10);
00152
00153 Ztring& From_Number (const int64s, int8u Radix=10);
00154
00155 Ztring& From_Number (const int64u, int8u Radix=10);
00156
00157 Ztring& From_Number (const float32, int8u AfterComma=3, ztring_t Options=Ztring_Nothing);
00158
00159 Ztring& From_Number (const float64, int8u AfterComma=3, ztring_t Options=Ztring_Nothing);
00160
00161 Ztring& From_Number (const float80, int8u AfterComma=3, ztring_t Options=Ztring_Nothing);
00162 #ifdef NEED_SIZET
00163
00164 Ztring& From_Number (const size_t, int8u Radix=10);
00165 #endif //NEED_SIZET
00166
00167 Ztring& Duration_From_Milliseconds (const int64u Milliseconds);
00168
00169 Ztring& Date_From_Seconds_1601 (const int64u Seconds);
00170
00171 Ztring& Date_From_Seconds_1904 (const int64u Seconds);
00172
00173 Ztring& Date_From_Seconds_1970 (const int32u Seconds);
00174
00175 Ztring& Date_From_String (const char* Date, size_type Value_Size=Error);
00176
00177
00178
00179
00180 std::wstring To_Unicode () const;
00181
00182
00183 std::string To_UTF8 () const;
00184
00185
00186 std::string To_Local () const;
00187
00188
00189
00190 int32s To_int32s (ztring_t Options=Ztring_Rounded) const;
00191
00192
00193
00194 int32u To_int32u (ztring_t Options=Ztring_Rounded) const;
00195
00196
00197
00198 int64s To_int64s (ztring_t Options=Ztring_Rounded) const;
00199
00200
00201
00202 int64u To_int64u (ztring_t Options=Ztring_Rounded) const;
00203
00204
00205
00206 float32 To_float32 (ztring_t Options=Ztring_Nothing) const;
00207 float64 To_float64 (ztring_t Options=Ztring_Nothing) const;
00208 float80 To_float80 (ztring_t Options=Ztring_Nothing) const;
00209
00210
00211 static Ztring ToZtring (const int8s I, int8u Radix=10) {return Ztring().From_Number(I, Radix);};
00212 static Ztring ToZtring (const int8u I, int8u Radix=10) {return Ztring().From_Number(I, Radix);};
00213 static Ztring ToZtring (const int16s I, int8u Radix=10) {return Ztring().From_Number(I, Radix);};
00214 static Ztring ToZtring (const int16u I, int8u Radix=10) {return Ztring().From_Number(I, Radix);};
00215 static Ztring ToZtring (const int32s I, int8u Radix=10) {return Ztring().From_Number(I, Radix);};
00216 static Ztring ToZtring (const int32u I, int8u Radix=10) {return Ztring().From_Number(I, Radix);};
00217 static Ztring ToZtring (const int64s I, int8u Radix=10) {return Ztring().From_Number(I, Radix);};
00218 static Ztring ToZtring (const int64u I, int8u Radix=10) {return Ztring().From_Number(I, Radix);};
00219 static Ztring ToZtring (const float32 F, int8u AfterComma=3) {return Ztring().From_Number(F, AfterComma);};
00220 static Ztring ToZtring (const float64 F, int8u AfterComma=3) {return Ztring().From_Number(F, AfterComma);};
00221 static Ztring ToZtring (const float80 F, int8u AfterComma=3) {return Ztring().From_Number(F, AfterComma);};
00222 #ifdef NEED_SIZET
00223 static Ztring ToZtring (const size_t I, int8u Radix=10) {return Ztring().From_Number(I, Radix);};
00224 #endif //NEED_SIZET
00225
00226
00227
00228 Ztring &MakeLowerCase();
00229
00230 Ztring &MakeUpperCase();
00231
00232 Ztring &TrimLeft(Char ToTrim=_T(' '));
00233
00234 Ztring &TrimRight(Char ToTrim=_T(' '));
00235
00236 Ztring &Trim(Char ToTrim=_T(' '));
00237
00238 Ztring &Quote(Char ToTrim=_T('\"'));
00239
00240
00241
00242
00243
00244
00245
00246
00247 Ztring SubString (const tstring &Begin, const tstring &End, size_type Pos=0, ztring_t Options=Ztring_Nothing) const;
00248
00249
00250
00251
00252
00253
00254
00255 size_type FindAndReplace (const tstring &ToFind, const tstring &ReplaceBy, size_type Pos=0, ztring_t Options=Ztring_Nothing);
00256
00257
00258
00259
00260
00261
00262
00263 size_type Count (const Ztring &ToCount, ztring_t Options=Ztring_Nothing) const;
00264
00265
00266
00267
00268
00269 bool Compare (const Ztring &ToCompare, const Ztring &Comparator=_T("=="), ztring_t Options=Ztring_Nothing) const;
00270 };
00271
00272 }
00273
00274 #endif