00001 #ifndef gSTRING_X_H
00002 #define gSTRING_X_H
00003
00004 #include "gstorage.h"
00005
00006 class gStringGeneric : public gStorage {
00007 public:
00008
00009 enum eStrStrategy {
00010 e_StrDefault,
00011 e_StrAlloc,
00012 e_StrPreAlloc
00013 };
00014
00015 virtual ~gStringGeneric () ;
00016
00017
00018 virtual bool IsEmpty () {
00019 return thisSize()==0;
00020 }
00021
00022 virtual unsigned Length () {
00023 return thisSize();
00024 }
00025
00026 virtual t_uchar GetUChar (unsigned idx) ;
00027 virtual char GetChar (unsigned idx) {
00028 return (char)GetUChar(idx);
00029 }
00030
00031 virtual char* Str () ;
00032 virtual t_uchar* UStr () ;
00033
00034 virtual int MinimumStorageSize () {
00035 return -1;
00036 }
00037 virtual int MaximumStorageSize () {
00038 return -1;
00039 }
00040
00041
00042 virtual void Reset () ;
00043 virtual void SetEmpty () ;
00044 void Set (char* s) ;
00045 void Set (t_uchar* s) ;
00046 void Set (int v) ;
00047 void Set (unsigned v) ;
00048
00049 unsigned Add (char c) ;
00050 unsigned Add (t_uchar c) ;
00051 unsigned Add (char* s) ;
00052 unsigned Add (t_uchar* s) ;
00053 unsigned Add (int v) ;
00054 unsigned Add (unsigned v) ;
00055
00056 virtual void UpString () ;
00057 virtual void DownString () ;
00058
00059
00060 t_uchar& operator[] (int index) ;
00061
00062
00063 virtual t_uchar* ToString (t_uchar* uBuf) ;
00064 virtual bool SaveGuts (FILE* f) ;
00065 virtual bool RestoreGuts (FILE* f) ;
00066
00067 protected:
00068 gStringGeneric (eStorage kind,
00069 eStrStrategy aStgy,
00070 t_uchar* s,
00071 unsigned aMaxSize) ;
00072
00073 unsigned size, preMaxSize, maxSize;
00074 eStrStrategy stgy;
00075 t_uchar* str;
00076 bool doRevalidateSize;
00077 static t_uchar myChrNul;
00078
00079
00080 void thisPreAllocate (t_uchar* s, unsigned toSize) ;
00081 void thisDelete () ;
00082 int thisCopy (t_uchar* s, unsigned len) ;
00083 bool thisIndex (unsigned& idx) ;
00084 bool thisIsValidIndex (int index) ;
00085 virtual unsigned thisSize () ;
00086
00087 private:
00088
00089 gStringGeneric (gStringGeneric& ) ;
00090 gStringGeneric& operator= (gStringGeneric& ) ;
00091 };
00092
00093 class gString : public gStringGeneric {
00094 public:
00095 gString () ;
00096 gString (gString& copy) ;
00097 gString (char* s) ;
00098 gString (t_uchar* s) ;
00099 gString (char c) ;
00100 gString (unsigned nBytes, char c) ;
00101 virtual ~gString () ;
00102
00103
00104 bool Match (gString& copy, bool doIgnoreCase=false) ;
00105 bool Match (char* s, bool doIgnoreCase=false) ;
00106
00107 unsigned Find (gString& sSub, bool doIgnoreCase=false) ;
00108 unsigned Find (char* s, bool doIgnoreCase=false) ;
00109 unsigned Find (char c, bool doIgnoreCase=false) ;
00110
00111 unsigned Find (gString& sSub, unsigned& nOcc, bool doIgnoreCase=false) ;
00112 unsigned Find (char* s, unsigned& nOcc, bool doIgnoreCase=false) ;
00113 unsigned Find (char c, unsigned& nOcc, bool doIgnoreCase=false) ;
00114
00115 unsigned FindBack (gString& sSub, bool doIgnoreCase=false) ;
00116 unsigned FindBack (char* s, bool doIgnoreCase=false) ;
00117 unsigned FindBack (char c, bool doIgnoreCase=false) ;
00118
00119 unsigned FindAnyChr (gString& b, bool doIgnoreCase=false) ;
00120 unsigned FindAnyChr (char* s, bool doIgnoreCase=false) ;
00121 unsigned FindAnyChr (gString& b, bool doIgnoreCase, unsigned& posAny) ;
00122 unsigned FindAnyChr (char* s, bool doIgnoreCase, unsigned& posAny) ;
00123
00124 unsigned FindExcept (gString& sExcept, bool doIgnoreCase=false) ;
00125 unsigned FindExcept (char* s, bool doIgnoreCase=false) ;
00126
00127
00128 virtual unsigned AddString (gString& a) ;
00129 virtual void Copy (gString& copy) ;
00130
00131 virtual gString& CopyFromTo (gString& copy, unsigned startPos=0, unsigned endPos=0) ;
00132 virtual gString& CopyFromToStr (char* s, unsigned startPos=0, unsigned endPos=0) {
00133 gString copy( s );
00134 return CopyFromTo( copy, startPos, endPos );
00135 }
00136
00137 virtual unsigned Delete (unsigned startPos=0, unsigned endPos=0) ;
00138
00139 virtual unsigned Insert (gString& copy, unsigned startPos=0) ;
00140 virtual unsigned InsertStr (char* s, unsigned startPos=0) {
00141 gString copy( s );
00142 return Insert( copy, startPos );
00143 }
00144
00145 virtual bool Trim () ;
00146 virtual bool TrimLeft () ;
00147 virtual bool TrimRight () ;
00148
00149
00150 gString& operator= (gString& copy) ;
00151 gString& operator= (char* s) ;
00152 gString& operator= (char c) ;
00153 gString& operator= (int v) ;
00154
00155 gString& operator+ (gString& copy) ;
00156
00157 gString& operator+= (gString& copy) ;
00158
00159
00160 virtual gStorage* NewObject () ;
00161 virtual t_uchar* ToString (t_uchar* uBuf) ;
00162 virtual bool SaveGuts (FILE* f) ;
00163 virtual bool RestoreGuts (FILE* f) ;
00164
00165
00166 virtual void Show (bool doShowAll=true) ;
00167
00168 protected:
00169
00170 int thisMatch (char* s1, char* s2, bool doIgnoreCase) ;
00171
00172 unsigned thisFind (char* s,
00173 char* sub,
00174 unsigned startPos,
00175 bool doIgnoreCase) ;
00176
00177 unsigned thisFindAny (char* s,
00178 char* strAny,
00179 bool doIgnoreCase,
00180 unsigned& posAny) ;
00181
00182 unsigned thisFindFwd (char* s,
00183 char* sub,
00184 unsigned startPos,
00185 bool doIgnoreCase,
00186 unsigned& nOcc) ;
00187
00188 unsigned thisFindFwdOcc (char* s,
00189 char* sub,
00190 unsigned& nOcc) ;
00191
00192 unsigned thisFindBack (char* s,
00193 char* sub,
00194 unsigned startPos,
00195 bool doIgnoreCase,
00196 unsigned& nOcc) ;
00197
00198 unsigned thisFindBackOcc (char* s,
00199 char* sub,
00200 unsigned& nOcc) ;
00201
00202 unsigned thisFindExcept (char* s,
00203 char* exceptStr,
00204 unsigned startPos,
00205 bool doIgnoreCase) ;
00206
00207 private:
00208
00209 gString (gStringGeneric& ) ;
00210 };
00211
00212 #endif //gSTRING_X_H
00213