summaryrefslogtreecommitdiff
path: root/shared/tinyxml/docs/tinystr_8h-source.html
blob: 71408eed9a4a3e8982f28d04b0280bd09fcae493 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1">
<title>TinyXml: tinystr.h Source File</title>
<link href="doxygen.css" rel="stylesheet" type="text/css">
<link href="tabs.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.4.7 -->
<div class="tabs">
  <ul>
    <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
    <li><a href="annotated.html"><span>Classes</span></a></li>
    <li id="current"><a href="files.html"><span>Files</span></a></li>
    <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
  </ul></div>
<h1>tinystr.h</h1><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 <span class="comment">/*</span>
<a name="l00002"></a>00002 <span class="comment">www.sourceforge.net/projects/tinyxml</span>
<a name="l00003"></a>00003 <span class="comment">Original file by Yves Berquin.</span>
<a name="l00004"></a>00004 <span class="comment"></span>
<a name="l00005"></a>00005 <span class="comment">This software is provided 'as-is', without any express or implied</span>
<a name="l00006"></a>00006 <span class="comment">warranty. In no event will the authors be held liable for any</span>
<a name="l00007"></a>00007 <span class="comment">damages arising from the use of this software.</span>
<a name="l00008"></a>00008 <span class="comment"></span>
<a name="l00009"></a>00009 <span class="comment">Permission is granted to anyone to use this software for any</span>
<a name="l00010"></a>00010 <span class="comment">purpose, including commercial applications, and to alter it and</span>
<a name="l00011"></a>00011 <span class="comment">redistribute it freely, subject to the following restrictions:</span>
<a name="l00012"></a>00012 <span class="comment"></span>
<a name="l00013"></a>00013 <span class="comment">1. The origin of this software must not be misrepresented; you must</span>
<a name="l00014"></a>00014 <span class="comment">not claim that you wrote the original software. If you use this</span>
<a name="l00015"></a>00015 <span class="comment">software in a product, an acknowledgment in the product documentation</span>
<a name="l00016"></a>00016 <span class="comment">would be appreciated but is not required.</span>
<a name="l00017"></a>00017 <span class="comment"></span>
<a name="l00018"></a>00018 <span class="comment">2. Altered source versions must be plainly marked as such, and</span>
<a name="l00019"></a>00019 <span class="comment">must not be misrepresented as being the original software.</span>
<a name="l00020"></a>00020 <span class="comment"></span>
<a name="l00021"></a>00021 <span class="comment">3. This notice may not be removed or altered from any source</span>
<a name="l00022"></a>00022 <span class="comment">distribution.</span>
<a name="l00023"></a>00023 <span class="comment">*/</span>
<a name="l00024"></a>00024 
<a name="l00025"></a>00025 <span class="comment">/*</span>
<a name="l00026"></a>00026 <span class="comment"> * THIS FILE WAS ALTERED BY Tyge Lovset, 7. April 2005.</span>
<a name="l00027"></a>00027 <span class="comment"> *</span>
<a name="l00028"></a>00028 <span class="comment"> * - completely rewritten. compact, clean, and fast implementation.</span>
<a name="l00029"></a>00029 <span class="comment"> * - sizeof(TiXmlString) = pointer size (4 bytes on 32-bit systems)</span>
<a name="l00030"></a>00030 <span class="comment"> * - fixed reserve() to work as per specification.</span>
<a name="l00031"></a>00031 <span class="comment"> * - fixed buggy compares operator==(), operator&lt;(), and operator&gt;()</span>
<a name="l00032"></a>00032 <span class="comment"> * - fixed operator+=() to take a const ref argument, following spec.</span>
<a name="l00033"></a>00033 <span class="comment"> * - added "copy" constructor with length, and most compare operators.</span>
<a name="l00034"></a>00034 <span class="comment"> * - added swap(), clear(), size(), capacity(), operator+().</span>
<a name="l00035"></a>00035 <span class="comment"> */</span>
<a name="l00036"></a>00036 
<a name="l00037"></a>00037 <span class="preprocessor">#ifndef TIXML_USE_STL</span>
<a name="l00038"></a>00038 <span class="preprocessor"></span>
<a name="l00039"></a>00039 <span class="preprocessor">#ifndef TIXML_STRING_INCLUDED</span>
<a name="l00040"></a>00040 <span class="preprocessor"></span><span class="preprocessor">#define TIXML_STRING_INCLUDED</span>
<a name="l00041"></a>00041 <span class="preprocessor"></span>
<a name="l00042"></a>00042 <span class="preprocessor">#include &lt;assert.h&gt;</span>
<a name="l00043"></a>00043 <span class="preprocessor">#include &lt;string.h&gt;</span>
<a name="l00044"></a>00044 
<a name="l00045"></a>00045 <span class="comment">/*  The support for explicit isn't that universal, and it isn't really</span>
<a name="l00046"></a>00046 <span class="comment">    required - it is used to check that the TiXmlString class isn't incorrectly</span>
<a name="l00047"></a>00047 <span class="comment">    used. Be nice to old compilers and macro it here:</span>
<a name="l00048"></a>00048 <span class="comment">*/</span>
<a name="l00049"></a>00049 <span class="preprocessor">#if defined(_MSC_VER) &amp;&amp; (_MSC_VER &gt;= 1200 )</span>
<a name="l00050"></a>00050 <span class="preprocessor"></span>    <span class="comment">// Microsoft visual studio, version 6 and higher.</span>
<a name="l00051"></a>00051 <span class="preprocessor">    #define TIXML_EXPLICIT explicit</span>
<a name="l00052"></a>00052 <span class="preprocessor"></span><span class="preprocessor">#elif defined(__GNUC__) &amp;&amp; (__GNUC__ &gt;= 3 )</span>
<a name="l00053"></a>00053 <span class="preprocessor"></span>    <span class="comment">// GCC version 3 and higher.s</span>
<a name="l00054"></a>00054 <span class="preprocessor">    #define TIXML_EXPLICIT explicit</span>
<a name="l00055"></a>00055 <span class="preprocessor"></span><span class="preprocessor">#else</span>
<a name="l00056"></a>00056 <span class="preprocessor"></span><span class="preprocessor">    #define TIXML_EXPLICIT</span>
<a name="l00057"></a>00057 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
<a name="l00058"></a>00058 <span class="preprocessor"></span>
<a name="l00059"></a>00059 
<a name="l00060"></a>00060 <span class="comment">/*</span>
<a name="l00061"></a>00061 <span class="comment">   TiXmlString is an emulation of a subset of the std::string template.</span>
<a name="l00062"></a>00062 <span class="comment">   Its purpose is to allow compiling TinyXML on compilers with no or poor STL support.</span>
<a name="l00063"></a>00063 <span class="comment">   Only the member functions relevant to the TinyXML project have been implemented.</span>
<a name="l00064"></a>00064 <span class="comment">   The buffer allocation is made by a simplistic power of 2 like mechanism : if we increase</span>
<a name="l00065"></a>00065 <span class="comment">   a string and there's no more room, we allocate a buffer twice as big as we need.</span>
<a name="l00066"></a>00066 <span class="comment">*/</span>
<a name="l00067"></a>00067 <span class="keyword">class </span>TiXmlString
<a name="l00068"></a>00068 {
<a name="l00069"></a>00069   <span class="keyword">public</span> :
<a name="l00070"></a>00070     <span class="comment">// The size type used</span>
<a name="l00071"></a>00071     <span class="keyword">typedef</span> size_t size_type;
<a name="l00072"></a>00072 
<a name="l00073"></a>00073     <span class="comment">// Error value for find primitive</span>
<a name="l00074"></a>00074     <span class="keyword">static</span> <span class="keyword">const</span> size_type npos; <span class="comment">// = -1;</span>
<a name="l00075"></a>00075 
<a name="l00076"></a>00076 
<a name="l00077"></a>00077     <span class="comment">// TiXmlString empty constructor</span>
<a name="l00078"></a>00078     TiXmlString () : rep_(&amp;nullrep_)
<a name="l00079"></a>00079     {
<a name="l00080"></a>00080     }
<a name="l00081"></a>00081 
<a name="l00082"></a>00082     <span class="comment">// TiXmlString copy constructor</span>
<a name="l00083"></a>00083     TiXmlString ( <span class="keyword">const</span> TiXmlString &amp; copy) : rep_(0)
<a name="l00084"></a>00084     {
<a name="l00085"></a>00085         init(copy.length());
<a name="l00086"></a>00086         memcpy(start(), copy.data(), length());
<a name="l00087"></a>00087     }
<a name="l00088"></a>00088 
<a name="l00089"></a>00089     <span class="comment">// TiXmlString constructor, based on a string</span>
<a name="l00090"></a>00090     TIXML_EXPLICIT TiXmlString ( <span class="keyword">const</span> <span class="keywordtype">char</span> * copy) : rep_(0)
<a name="l00091"></a>00091     {
<a name="l00092"></a>00092         init( static_cast&lt;size_type&gt;( strlen(copy) ));
<a name="l00093"></a>00093         memcpy(start(), copy, length());
<a name="l00094"></a>00094     }
<a name="l00095"></a>00095 
<a name="l00096"></a>00096     <span class="comment">// TiXmlString constructor, based on a string</span>
<a name="l00097"></a>00097     TIXML_EXPLICIT TiXmlString ( <span class="keyword">const</span> <span class="keywordtype">char</span> * str, size_type len) : rep_(0)
<a name="l00098"></a>00098     {
<a name="l00099"></a>00099         init(len);
<a name="l00100"></a>00100         memcpy(start(), str, len);
<a name="l00101"></a>00101     }
<a name="l00102"></a>00102 
<a name="l00103"></a>00103     <span class="comment">// TiXmlString destructor</span>
<a name="l00104"></a>00104     ~TiXmlString ()
<a name="l00105"></a>00105     {
<a name="l00106"></a>00106         quit();
<a name="l00107"></a>00107     }
<a name="l00108"></a>00108 
<a name="l00109"></a>00109     <span class="comment">// = operator</span>
<a name="l00110"></a>00110     TiXmlString&amp; operator = (<span class="keyword">const</span> <span class="keywordtype">char</span> * copy)
<a name="l00111"></a>00111     {
<a name="l00112"></a>00112         <span class="keywordflow">return</span> assign( copy, (size_type)strlen(copy));
<a name="l00113"></a>00113     }
<a name="l00114"></a>00114 
<a name="l00115"></a>00115     <span class="comment">// = operator</span>
<a name="l00116"></a>00116     TiXmlString&amp; operator = (<span class="keyword">const</span> TiXmlString &amp; copy)
<a name="l00117"></a>00117     {
<a name="l00118"></a>00118         <span class="keywordflow">return</span> assign(copy.start(), copy.length());
<a name="l00119"></a>00119     }
<a name="l00120"></a>00120 
<a name="l00121"></a>00121 
<a name="l00122"></a>00122     <span class="comment">// += operator. Maps to append</span>
<a name="l00123"></a>00123     TiXmlString&amp; operator += (<span class="keyword">const</span> <span class="keywordtype">char</span> * suffix)
<a name="l00124"></a>00124     {
<a name="l00125"></a>00125         <span class="keywordflow">return</span> append(suffix, static_cast&lt;size_type&gt;( strlen(suffix) ));
<a name="l00126"></a>00126     }
<a name="l00127"></a>00127 
<a name="l00128"></a>00128     <span class="comment">// += operator. Maps to append</span>
<a name="l00129"></a>00129     TiXmlString&amp; operator += (<span class="keywordtype">char</span> single)
<a name="l00130"></a>00130     {
<a name="l00131"></a>00131         <span class="keywordflow">return</span> append(&amp;single, 1);
<a name="l00132"></a>00132     }
<a name="l00133"></a>00133 
<a name="l00134"></a>00134     <span class="comment">// += operator. Maps to append</span>
<a name="l00135"></a>00135     TiXmlString&amp; operator += (<span class="keyword">const</span> TiXmlString &amp; suffix)
<a name="l00136"></a>00136     {
<a name="l00137"></a>00137         <span class="keywordflow">return</span> append(suffix.data(), suffix.length());
<a name="l00138"></a>00138     }
<a name="l00139"></a>00139 
<a name="l00140"></a>00140 
<a name="l00141"></a>00141     <span class="comment">// Convert a TiXmlString into a null-terminated char *</span>
<a name="l00142"></a>00142     <span class="keyword">const</span> <span class="keywordtype">char</span> * c_str ()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> rep_-&gt;str; }
<a name="l00143"></a>00143 
<a name="l00144"></a>00144     <span class="comment">// Convert a TiXmlString into a char * (need not be null terminated).</span>
<a name="l00145"></a>00145     <span class="keyword">const</span> <span class="keywordtype">char</span> * data ()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> rep_-&gt;str; }
<a name="l00146"></a>00146 
<a name="l00147"></a>00147     <span class="comment">// Return the length of a TiXmlString</span>
<a name="l00148"></a>00148     size_type length ()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> rep_-&gt;size; }
<a name="l00149"></a>00149 
<a name="l00150"></a>00150     <span class="comment">// Alias for length()</span>
<a name="l00151"></a>00151     size_type size ()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> rep_-&gt;size; }
<a name="l00152"></a>00152 
<a name="l00153"></a>00153     <span class="comment">// Checks if a TiXmlString is empty</span>
<a name="l00154"></a>00154     <span class="keywordtype">bool</span> empty ()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> rep_-&gt;size == 0; }
<a name="l00155"></a>00155 
<a name="l00156"></a>00156     <span class="comment">// Return capacity of string</span>
<a name="l00157"></a>00157     size_type capacity ()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> rep_-&gt;capacity; }
<a name="l00158"></a>00158 
<a name="l00159"></a>00159 
<a name="l00160"></a>00160     <span class="comment">// single char extraction</span>
<a name="l00161"></a>00161     <span class="keyword">const</span> <span class="keywordtype">char</span>&amp; at (size_type index)<span class="keyword"> const</span>
<a name="l00162"></a>00162 <span class="keyword">    </span>{
<a name="l00163"></a>00163         assert( index &lt; length() );
<a name="l00164"></a>00164         <span class="keywordflow">return</span> rep_-&gt;str[ index ];
<a name="l00165"></a>00165     }
<a name="l00166"></a>00166 
<a name="l00167"></a>00167     <span class="comment">// [] operator</span>
<a name="l00168"></a>00168     <span class="keywordtype">char</span>&amp; operator [] (size_type index)<span class="keyword"> const</span>
<a name="l00169"></a>00169 <span class="keyword">    </span>{
<a name="l00170"></a>00170         assert( index &lt; length() );
<a name="l00171"></a>00171         <span class="keywordflow">return</span> rep_-&gt;str[ index ];
<a name="l00172"></a>00172     }
<a name="l00173"></a>00173 
<a name="l00174"></a>00174     <span class="comment">// find a char in a string. Return TiXmlString::npos if not found</span>
<a name="l00175"></a>00175     size_type find (<span class="keywordtype">char</span> lookup)<span class="keyword"> const</span>
<a name="l00176"></a>00176 <span class="keyword">    </span>{
<a name="l00177"></a>00177         <span class="keywordflow">return</span> find(lookup, 0);
<a name="l00178"></a>00178     }
<a name="l00179"></a>00179 
<a name="l00180"></a>00180     <span class="comment">// find a char in a string from an offset. Return TiXmlString::npos if not found</span>
<a name="l00181"></a>00181     size_type find (<span class="keywordtype">char</span> tofind, size_type offset)<span class="keyword"> const</span>
<a name="l00182"></a>00182 <span class="keyword">    </span>{
<a name="l00183"></a>00183         <span class="keywordflow">if</span> (offset &gt;= length()) <span class="keywordflow">return</span> npos;
<a name="l00184"></a>00184 
<a name="l00185"></a>00185         <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keywordtype">char</span>* p = c_str() + offset; *p != <span class="charliteral">'\0'</span>; ++p)
<a name="l00186"></a>00186         {
<a name="l00187"></a>00187            <span class="keywordflow">if</span> (*p == tofind) <span class="keywordflow">return</span> static_cast&lt; size_type &gt;( p - c_str() );
<a name="l00188"></a>00188         }
<a name="l00189"></a>00189         <span class="keywordflow">return</span> npos;
<a name="l00190"></a>00190     }
<a name="l00191"></a>00191 
<a name="l00192"></a>00192     <span class="keywordtype">void</span> clear ()
<a name="l00193"></a>00193     {
<a name="l00194"></a>00194         <span class="comment">//Lee:</span>
<a name="l00195"></a>00195         <span class="comment">//The original was just too strange, though correct:</span>
<a name="l00196"></a>00196         <span class="comment">//  TiXmlString().swap(*this);</span>
<a name="l00197"></a>00197         <span class="comment">//Instead use the quit &amp; re-init:</span>
<a name="l00198"></a>00198         quit();
<a name="l00199"></a>00199         init(0,0);
<a name="l00200"></a>00200     }
<a name="l00201"></a>00201 
<a name="l00202"></a>00202     <span class="comment">/*  Function to reserve a big amount of data when we know we'll need it. Be aware that this</span>
<a name="l00203"></a>00203 <span class="comment">        function DOES NOT clear the content of the TiXmlString if any exists.</span>
<a name="l00204"></a>00204 <span class="comment">    */</span>
<a name="l00205"></a>00205     <span class="keywordtype">void</span> reserve (size_type cap);
<a name="l00206"></a>00206 
<a name="l00207"></a>00207     TiXmlString&amp; assign (<span class="keyword">const</span> <span class="keywordtype">char</span>* str, size_type len);
<a name="l00208"></a>00208 
<a name="l00209"></a>00209     TiXmlString&amp; append (<span class="keyword">const</span> <span class="keywordtype">char</span>* str, size_type len);
<a name="l00210"></a>00210 
<a name="l00211"></a>00211     <span class="keywordtype">void</span> swap (TiXmlString&amp; other)
<a name="l00212"></a>00212     {
<a name="l00213"></a>00213         Rep* r = rep_;
<a name="l00214"></a>00214         rep_ = other.rep_;
<a name="l00215"></a>00215         other.rep_ = r;
<a name="l00216"></a>00216     }
<a name="l00217"></a>00217 
<a name="l00218"></a>00218   <span class="keyword">private</span>:
<a name="l00219"></a>00219 
<a name="l00220"></a>00220     <span class="keywordtype">void</span> init(size_type sz) { init(sz, sz); }
<a name="l00221"></a>00221     <span class="keywordtype">void</span> set_size(size_type sz) { rep_-&gt;str[ rep_-&gt;size = sz ] = <span class="charliteral">'\0'</span>; }
<a name="l00222"></a>00222     <span class="keywordtype">char</span>* start()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> rep_-&gt;str; }
<a name="l00223"></a>00223     <span class="keywordtype">char</span>* finish()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> rep_-&gt;str + rep_-&gt;size; }
<a name="l00224"></a>00224 
<a name="l00225"></a>00225     <span class="keyword">struct </span>Rep
<a name="l00226"></a>00226     {
<a name="l00227"></a>00227         size_type size, capacity;
<a name="l00228"></a>00228         <span class="keywordtype">char</span> str[1];
<a name="l00229"></a>00229     };
<a name="l00230"></a>00230 
<a name="l00231"></a>00231     <span class="keywordtype">void</span> init(size_type sz, size_type cap)
<a name="l00232"></a>00232     {
<a name="l00233"></a>00233         <span class="keywordflow">if</span> (cap)
<a name="l00234"></a>00234         {
<a name="l00235"></a>00235             <span class="comment">// Lee: the original form:</span>
<a name="l00236"></a>00236             <span class="comment">//  rep_ = static_cast&lt;Rep*&gt;(operator new(sizeof(Rep) + cap));</span>
<a name="l00237"></a>00237             <span class="comment">// doesn't work in some cases of new being overloaded. Switching</span>
<a name="l00238"></a>00238             <span class="comment">// to the normal allocation, although use an 'int' for systems</span>
<a name="l00239"></a>00239             <span class="comment">// that are overly picky about structure alignment.</span>
<a name="l00240"></a>00240             <span class="keyword">const</span> size_type bytesNeeded = <span class="keyword">sizeof</span>(Rep) + cap;
<a name="l00241"></a>00241             <span class="keyword">const</span> size_type intsNeeded = ( bytesNeeded + <span class="keyword">sizeof</span>(int) - 1 ) / <span class="keyword">sizeof</span>( int ); 
<a name="l00242"></a>00242             rep_ = reinterpret_cast&lt;Rep*&gt;( <span class="keyword">new</span> <span class="keywordtype">int</span>[ intsNeeded ] );
<a name="l00243"></a>00243 
<a name="l00244"></a>00244             rep_-&gt;str[ rep_-&gt;size = sz ] = <span class="charliteral">'\0'</span>;
<a name="l00245"></a>00245             rep_-&gt;capacity = cap;
<a name="l00246"></a>00246         }
<a name="l00247"></a>00247         <span class="keywordflow">else</span>
<a name="l00248"></a>00248         {
<a name="l00249"></a>00249             rep_ = &amp;nullrep_;
<a name="l00250"></a>00250         }
<a name="l00251"></a>00251     }
<a name="l00252"></a>00252 
<a name="l00253"></a>00253     <span class="keywordtype">void</span> quit()
<a name="l00254"></a>00254     {
<a name="l00255"></a>00255         <span class="keywordflow">if</span> (rep_ != &amp;nullrep_)
<a name="l00256"></a>00256         {
<a name="l00257"></a>00257             <span class="comment">// The rep_ is really an array of ints. (see the allocator, above).</span>
<a name="l00258"></a>00258             <span class="comment">// Cast it back before delete, so the compiler won't incorrectly call destructors.</span>
<a name="l00259"></a>00259             <span class="keyword">delete</span> [] ( reinterpret_cast&lt;int*&gt;( rep_ ) );
<a name="l00260"></a>00260         }
<a name="l00261"></a>00261     }
<a name="l00262"></a>00262 
<a name="l00263"></a>00263     Rep * rep_;
<a name="l00264"></a>00264     <span class="keyword">static</span> Rep nullrep_;
<a name="l00265"></a>00265 
<a name="l00266"></a>00266 } ;
<a name="l00267"></a>00267 
<a name="l00268"></a>00268 
<a name="l00269"></a>00269 <span class="keyword">inline</span> <span class="keywordtype">bool</span> operator == (<span class="keyword">const</span> TiXmlString &amp; a, <span class="keyword">const</span> TiXmlString &amp; b)
<a name="l00270"></a>00270 {
<a name="l00271"></a>00271     <span class="keywordflow">return</span>    ( a.length() == b.length() )              <span class="comment">// optimization on some platforms</span>
<a name="l00272"></a>00272            &amp;&amp; ( strcmp(a.c_str(), b.c_str()) == 0 );    <span class="comment">// actual compare</span>
<a name="l00273"></a>00273 }
<a name="l00274"></a>00274 <span class="keyword">inline</span> <span class="keywordtype">bool</span> operator &lt; (<span class="keyword">const</span> TiXmlString &amp; a, <span class="keyword">const</span> TiXmlString &amp; b)
<a name="l00275"></a>00275 {
<a name="l00276"></a>00276     <span class="keywordflow">return</span> strcmp(a.c_str(), b.c_str()) &lt; 0;
<a name="l00277"></a>00277 }
<a name="l00278"></a>00278 
<a name="l00279"></a>00279 <span class="keyword">inline</span> <span class="keywordtype">bool</span> operator != (<span class="keyword">const</span> TiXmlString &amp; a, <span class="keyword">const</span> TiXmlString &amp; b) { <span class="keywordflow">return</span> !(a == b); }
<a name="l00280"></a>00280 <span class="keyword">inline</span> <span class="keywordtype">bool</span> operator &gt;  (<span class="keyword">const</span> TiXmlString &amp; a, <span class="keyword">const</span> TiXmlString &amp; b) { <span class="keywordflow">return</span> b &lt; a; }
<a name="l00281"></a>00281 <span class="keyword">inline</span> <span class="keywordtype">bool</span> operator &lt;= (<span class="keyword">const</span> TiXmlString &amp; a, <span class="keyword">const</span> TiXmlString &amp; b) { <span class="keywordflow">return</span> !(b &lt; a); }
<a name="l00282"></a>00282 <span class="keyword">inline</span> <span class="keywordtype">bool</span> operator &gt;= (<span class="keyword">const</span> TiXmlString &amp; a, <span class="keyword">const</span> TiXmlString &amp; b) { <span class="keywordflow">return</span> !(a &lt; b); }
<a name="l00283"></a>00283 
<a name="l00284"></a>00284 <span class="keyword">inline</span> <span class="keywordtype">bool</span> operator == (<span class="keyword">const</span> TiXmlString &amp; a, <span class="keyword">const</span> <span class="keywordtype">char</span>* b) { <span class="keywordflow">return</span> strcmp(a.c_str(), b) == 0; }
<a name="l00285"></a>00285 <span class="keyword">inline</span> <span class="keywordtype">bool</span> operator == (<span class="keyword">const</span> <span class="keywordtype">char</span>* a, <span class="keyword">const</span> TiXmlString &amp; b) { <span class="keywordflow">return</span> b == a; }
<a name="l00286"></a>00286 <span class="keyword">inline</span> <span class="keywordtype">bool</span> operator != (<span class="keyword">const</span> TiXmlString &amp; a, <span class="keyword">const</span> <span class="keywordtype">char</span>* b) { <span class="keywordflow">return</span> !(a == b); }
<a name="l00287"></a>00287 <span class="keyword">inline</span> <span class="keywordtype">bool</span> operator != (<span class="keyword">const</span> <span class="keywordtype">char</span>* a, <span class="keyword">const</span> TiXmlString &amp; b) { <span class="keywordflow">return</span> !(b == a); }
<a name="l00288"></a>00288 
<a name="l00289"></a>00289 TiXmlString operator + (<span class="keyword">const</span> TiXmlString &amp; a, <span class="keyword">const</span> TiXmlString &amp; b);
<a name="l00290"></a>00290 TiXmlString operator + (<span class="keyword">const</span> TiXmlString &amp; a, <span class="keyword">const</span> <span class="keywordtype">char</span>* b);
<a name="l00291"></a>00291 TiXmlString operator + (<span class="keyword">const</span> <span class="keywordtype">char</span>* a, <span class="keyword">const</span> TiXmlString &amp; b);
<a name="l00292"></a>00292 
<a name="l00293"></a>00293 
<a name="l00294"></a>00294 <span class="comment">/*</span>
<a name="l00295"></a>00295 <span class="comment">   TiXmlOutStream is an emulation of std::ostream. It is based on TiXmlString.</span>
<a name="l00296"></a>00296 <span class="comment">   Only the operators that we need for TinyXML have been developped.</span>
<a name="l00297"></a>00297 <span class="comment">*/</span>
<a name="l00298"></a>00298 <span class="keyword">class </span>TiXmlOutStream : <span class="keyword">public</span> TiXmlString
<a name="l00299"></a>00299 {
<a name="l00300"></a>00300 <span class="keyword">public</span> :
<a name="l00301"></a>00301 
<a name="l00302"></a>00302     <span class="comment">// TiXmlOutStream &lt;&lt; operator.</span>
<a name="l00303"></a>00303     TiXmlOutStream &amp; operator &lt;&lt; (<span class="keyword">const</span> TiXmlString &amp; in)
<a name="l00304"></a>00304     {
<a name="l00305"></a>00305         *<span class="keyword">this</span> += in;
<a name="l00306"></a>00306         <span class="keywordflow">return</span> *<span class="keyword">this</span>;
<a name="l00307"></a>00307     }
<a name="l00308"></a>00308 
<a name="l00309"></a>00309     <span class="comment">// TiXmlOutStream &lt;&lt; operator.</span>
<a name="l00310"></a>00310     TiXmlOutStream &amp; operator &lt;&lt; (<span class="keyword">const</span> <span class="keywordtype">char</span> * in)
<a name="l00311"></a>00311     {
<a name="l00312"></a>00312         *<span class="keyword">this</span> += in;
<a name="l00313"></a>00313         <span class="keywordflow">return</span> *<span class="keyword">this</span>;
<a name="l00314"></a>00314     }
<a name="l00315"></a>00315 
<a name="l00316"></a>00316 } ;
<a name="l00317"></a>00317 
<a name="l00318"></a>00318 <span class="preprocessor">#endif  // TIXML_STRING_INCLUDED</span>
<a name="l00319"></a>00319 <span class="preprocessor"></span><span class="preprocessor">#endif  // TIXML_USE_STL</span>
</pre></div><hr size="1"><address style="align: right;"><small>Generated on Sun May 6 15:41:22 2007 for TinyXml by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.4.7 </small></address>
</body>
</html>
bgstack15