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