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