D:/Programming/GUI Editor (Source)/tinystr.h
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 #include "tinyxml.h"
00026
00027
00028 #ifndef TIXML_USE_STL
00029
00030 #ifndef TIXML_STRING_INCLUDED
00031 #define TIXML_STRING_INCLUDED
00032
00033 #ifdef _MSC_VER
00034 #pragma warning( disable : 4786 ) // Debugger truncating names.
00035 #endif
00036
00037 #include <assert.h>
00038
00039
00040
00041
00042
00043
00044
00045
00046 class TiXmlString
00047 {
00048 public :
00049
00050 TiXmlString (const char * instring);
00051
00052
00053 TiXmlString ()
00054 {
00055 allocated = 0;
00056 cstring = NULL;
00057 current_length = 0;
00058 }
00059
00060
00061 TiXmlString (const TiXmlString& copy);
00062
00063
00064 ~ TiXmlString ()
00065 {
00066 empty_it ();
00067 }
00068
00069
00070 const char * c_str () const
00071 {
00072 if (allocated)
00073 return cstring;
00074 return "";
00075 }
00076
00077
00078 unsigned length () const
00079 {
00080 return ( allocated ) ? current_length : 0;
00081 }
00082
00083
00084 void operator = (const char * content);
00085
00086
00087 void operator = (const TiXmlString & copy);
00088
00089
00090 TiXmlString& operator += (const char * suffix)
00091 {
00092 Append (suffix);
00093 return *this;
00094 }
00095
00096
00097 TiXmlString& operator += (char single)
00098 {
00099 Append (single);
00100 return *this;
00101 }
00102
00103
00104 TiXmlString& operator += (TiXmlString & suffix)
00105 {
00106 Append (suffix);
00107 return *this;
00108 }
00109 bool operator == (const TiXmlString & compare) const;
00110 bool operator < (const TiXmlString & compare) const;
00111 bool operator > (const TiXmlString & compare) const;
00112
00113
00114 bool empty () const
00115 {
00116 return length () ? false : true;
00117 }
00118
00119
00120 const char& at (unsigned index) const
00121 {
00122 assert( index < length ());
00123 return cstring [index];
00124 }
00125
00126
00127 unsigned find (char lookup) const
00128 {
00129 return find (lookup, 0);
00130 }
00131
00132
00133 unsigned find (char tofind, unsigned offset) const;
00134
00135
00136
00137
00138 void reserve (unsigned size)
00139 {
00140 empty_it ();
00141 if (size)
00142 {
00143 allocated = size;
00144 cstring = new char [size];
00145 cstring [0] = 0;
00146 current_length = 0;
00147 }
00148 }
00149
00150
00151 char& operator [] (unsigned index) const
00152 {
00153 assert( index < length ());
00154 return cstring [index];
00155 }
00156
00157
00158 enum { notfound = 0xffffffff,
00159 npos = notfound };
00160
00161 void Append (const char *str, int len );
00162
00163 protected :
00164
00165
00166 char * cstring;
00167
00168 unsigned allocated;
00169
00170 unsigned current_length;
00171
00172
00173
00174 unsigned assign_new_size (unsigned minimum_to_allocate)
00175 {
00176 return minimum_to_allocate * 2;
00177 }
00178
00179
00180 void empty_it ()
00181 {
00182 if (cstring)
00183 delete [] cstring;
00184 cstring = NULL;
00185 allocated = 0;
00186 current_length = 0;
00187 }
00188
00189 void Append (const char *suffix );
00190
00191
00192 void Append (const TiXmlString & suffix)
00193 {
00194 Append (suffix . c_str ());
00195 }
00196
00197
00198 void Append (char single)
00199 {
00200 if ( cstring && current_length < (allocated-1) )
00201 {
00202 cstring[ current_length ] = single;
00203 ++current_length;
00204 cstring[ current_length ] = 0;
00205 }
00206 else
00207 {
00208 char smallstr [2];
00209 smallstr [0] = single;
00210 smallstr [1] = 0;
00211 Append (smallstr);
00212 }
00213 }
00214
00215 } ;
00216
00217
00218
00219
00220
00221 class TiXmlOutStream : public TiXmlString
00222 {
00223 public :
00224 TiXmlOutStream () : TiXmlString () {}
00225
00226
00227 TiXmlOutStream & operator << (const char * in)
00228 {
00229 Append (in);
00230 return (* this);
00231 }
00232
00233
00234 TiXmlOutStream & operator << (const TiXmlString & in)
00235 {
00236 Append (in . c_str ());
00237 return (* this);
00238 }
00239 } ;
00240
00241 #endif // TIXML_STRING_INCLUDED
00242 #endif // TIXML_USE_STL
Generated on Sun Jul 17 21:34:28 2005 for OpenGL GUI by
1.3.8