summaryrefslogtreecommitdiff
path: root/shared/tinyxml/docs/tinystr_8h_source.html
blob: 579a90e0ec6f815fab1b8f038223cc8cc41b3255 (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
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
<title>TinyXml: tinystr.h Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css"/>
<link href="doxygen.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<!-- Generated by Doxygen 1.6.2 -->
<div class="navigation" id="top">
  <div class="tabs">
    <ul>
      <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
      <li><a href="pages.html"><span>Related&nbsp;Pages</span></a></li>
      <li><a href="annotated.html"><span>Classes</span></a></li>
      <li class="current"><a href="files.html"><span>Files</span></a></li>
    </ul>
  </div>
  <div class="tabs">
    <ul>
      <li><a href="files.html"><span>File&nbsp;List</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"></span>
<a name="l00004"></a>00004 <span class="comment">This software is provided &#39;as-is&#39;, without any express or implied</span>
<a name="l00005"></a>00005 <span class="comment">warranty. In no event will the authors be held liable for any</span>
<a name="l00006"></a>00006 <span class="comment">damages arising from the use of this software.</span>
<a name="l00007"></a>00007 <span class="comment"></span>
<a name="l00008"></a>00008 <span class="comment">Permission is granted to anyone to use this software for any</span>
<a name="l00009"></a>00009 <span class="comment">purpose, including commercial applications, and to alter it and</span>
<a name="l00010"></a>00010 <span class="comment">redistribute it freely, subject to the following restrictions:</span>
<a name="l00011"></a>00011 <span class="comment"></span>
<a name="l00012"></a>00012 <span class="comment">1. The origin of this software must not be misrepresented; you must</span>
<a name="l00013"></a>00013 <span class="comment">not claim that you wrote the original software. If you use this</span>
<a name="l00014"></a>00014 <span class="comment">software in a product, an acknowledgment in the product documentation</span>
<a name="l00015"></a>00015 <span class="comment">would be appreciated but is not required.</span>
<a name="l00016"></a>00016 <span class="comment"></span>
<a name="l00017"></a>00017 <span class="comment">2. Altered source versions must be plainly marked as such, and</span>
<a name="l00018"></a>00018 <span class="comment">must not be misrepresented as being the original software.</span>
<a name="l00019"></a>00019 <span class="comment"></span>
<a name="l00020"></a>00020 <span class="comment">3. This notice may not be removed or altered from any source</span>
<a name="l00021"></a>00021 <span class="comment">distribution.</span>
<a name="l00022"></a>00022 <span class="comment">*/</span>
<a name="l00023"></a>00023 
<a name="l00024"></a>00024 
<a name="l00025"></a>00025 <span class="preprocessor">#ifndef TIXML_USE_STL</span>
<a name="l00026"></a>00026 <span class="preprocessor"></span>
<a name="l00027"></a>00027 <span class="preprocessor">#ifndef TIXML_STRING_INCLUDED</span>
<a name="l00028"></a>00028 <span class="preprocessor"></span><span class="preprocessor">#define TIXML_STRING_INCLUDED</span>
<a name="l00029"></a>00029 <span class="preprocessor"></span>
<a name="l00030"></a>00030 <span class="preprocessor">#include &lt;assert.h&gt;</span>
<a name="l00031"></a>00031 <span class="preprocessor">#include &lt;string.h&gt;</span>
<a name="l00032"></a>00032 
<a name="l00033"></a>00033 <span class="comment">/*  The support for explicit isn&#39;t that universal, and it isn&#39;t really</span>
<a name="l00034"></a>00034 <span class="comment">    required - it is used to check that the TiXmlString class isn&#39;t incorrectly</span>
<a name="l00035"></a>00035 <span class="comment">    used. Be nice to old compilers and macro it here:</span>
<a name="l00036"></a>00036 <span class="comment">*/</span>
<a name="l00037"></a>00037 <span class="preprocessor">#if defined(_MSC_VER) &amp;&amp; (_MSC_VER &gt;= 1200 )</span>
<a name="l00038"></a>00038 <span class="preprocessor"></span>    <span class="comment">// Microsoft visual studio, version 6 and higher.</span>
<a name="l00039"></a>00039 <span class="preprocessor">    #define TIXML_EXPLICIT explicit</span>
<a name="l00040"></a>00040 <span class="preprocessor"></span><span class="preprocessor">#elif defined(__GNUC__) &amp;&amp; (__GNUC__ &gt;= 3 )</span>
<a name="l00041"></a>00041 <span class="preprocessor"></span>    <span class="comment">// GCC version 3 and higher.s</span>
<a name="l00042"></a>00042 <span class="preprocessor">    #define TIXML_EXPLICIT explicit</span>
<a name="l00043"></a>00043 <span class="preprocessor"></span><span class="preprocessor">#else</span>
<a name="l00044"></a>00044 <span class="preprocessor"></span><span class="preprocessor">    #define TIXML_EXPLICIT</span>
<a name="l00045"></a>00045 <span class="preprocessor"></span><span class="preprocessor">#endif</span>
<a name="l00046"></a>00046 <span class="preprocessor"></span>
<a name="l00047"></a>00047 
<a name="l00048"></a>00048 <span class="comment">/*</span>
<a name="l00049"></a>00049 <span class="comment">   TiXmlString is an emulation of a subset of the std::string template.</span>
<a name="l00050"></a>00050 <span class="comment">   Its purpose is to allow compiling TinyXML on compilers with no or poor STL support.</span>
<a name="l00051"></a>00051 <span class="comment">   Only the member functions relevant to the TinyXML project have been implemented.</span>
<a name="l00052"></a>00052 <span class="comment">   The buffer allocation is made by a simplistic power of 2 like mechanism : if we increase</span>
<a name="l00053"></a>00053 <span class="comment">   a string and there&#39;s no more room, we allocate a buffer twice as big as we need.</span>
<a name="l00054"></a>00054 <span class="comment">*/</span>
<a name="l00055"></a>00055 <span class="keyword">class </span>TiXmlString
<a name="l00056"></a>00056 {
<a name="l00057"></a>00057   <span class="keyword">public</span> :
<a name="l00058"></a>00058     <span class="comment">// The size type used</span>
<a name="l00059"></a>00059     <span class="keyword">typedef</span> <span class="keywordtype">size_t</span> size_type;
<a name="l00060"></a>00060 
<a name="l00061"></a>00061     <span class="comment">// Error value for find primitive</span>
<a name="l00062"></a>00062     <span class="keyword">static</span> <span class="keyword">const</span> size_type npos; <span class="comment">// = -1;</span>
<a name="l00063"></a>00063 
<a name="l00064"></a>00064 
<a name="l00065"></a>00065     <span class="comment">// TiXmlString empty constructor</span>
<a name="l00066"></a>00066     TiXmlString () : rep_(&amp;nullrep_)
<a name="l00067"></a>00067     {
<a name="l00068"></a>00068     }
<a name="l00069"></a>00069 
<a name="l00070"></a>00070     <span class="comment">// TiXmlString copy constructor</span>
<a name="l00071"></a>00071     TiXmlString ( <span class="keyword">const</span> TiXmlString &amp; copy) : rep_(0)
<a name="l00072"></a>00072     {
<a name="l00073"></a>00073         init(copy.length());
<a name="l00074"></a>00074         memcpy(start(), copy.data(), length());
<a name="l00075"></a>00075     }
<a name="l00076"></a>00076 
<a name="l00077"></a>00077     <span class="comment">// TiXmlString constructor, based on a string</span>
<a name="l00078"></a>00078     TIXML_EXPLICIT TiXmlString ( <span class="keyword">const</span> <span class="keywordtype">char</span> * copy) : rep_(0)
<a name="l00079"></a>00079     {
<a name="l00080"></a>00080         init( static_cast&lt;size_type&gt;( strlen(copy) ));
<a name="l00081"></a>00081         memcpy(start(), copy, length());
<a name="l00082"></a>00082     }
<a name="l00083"></a>00083 
<a name="l00084"></a>00084     <span class="comment">// TiXmlString constructor, based on a string</span>
<a name="l00085"></a>00085     TIXML_EXPLICIT TiXmlString ( <span class="keyword">const</span> <span class="keywordtype">char</span> * str, size_type len) : rep_(0)
<a name="l00086"></a>00086     {
<a name="l00087"></a>00087         init(len);
<a name="l00088"></a>00088         memcpy(start(), str, len);
<a name="l00089"></a>00089     }
<a name="l00090"></a>00090 
<a name="l00091"></a>00091     <span class="comment">// TiXmlString destructor</span>
<a name="l00092"></a>00092     ~TiXmlString ()
<a name="l00093"></a>00093     {
<a name="l00094"></a>00094         quit();
<a name="l00095"></a>00095     }
<a name="l00096"></a>00096 
<a name="l00097"></a>00097     TiXmlString&amp; operator = (<span class="keyword">const</span> <span class="keywordtype">char</span> * copy)
<a name="l00098"></a>00098     {
<a name="l00099"></a>00099         <span class="keywordflow">return</span> assign( copy, (size_type)strlen(copy));
<a name="l00100"></a>00100     }
<a name="l00101"></a>00101 
<a name="l00102"></a>00102     TiXmlString&amp; operator = (<span class="keyword">const</span> TiXmlString &amp; copy)
<a name="l00103"></a>00103     {
<a name="l00104"></a>00104         <span class="keywordflow">return</span> assign(copy.start(), copy.length());
<a name="l00105"></a>00105     }
<a name="l00106"></a>00106 
<a name="l00107"></a>00107 
<a name="l00108"></a>00108     <span class="comment">// += operator. Maps to append</span>
<a name="l00109"></a>00109     TiXmlString&amp; operator += (<span class="keyword">const</span> <span class="keywordtype">char</span> * suffix)
<a name="l00110"></a>00110     {
<a name="l00111"></a>00111         <span class="keywordflow">return</span> append(suffix, static_cast&lt;size_type&gt;( strlen(suffix) ));
<a name="l00112"></a>00112     }
<a name="l00113"></a>00113 
<a name="l00114"></a>00114     <span class="comment">// += operator. Maps to append</span>
<a name="l00115"></a>00115     TiXmlString&amp; operator += (<span class="keywordtype">char</span> single)
<a name="l00116"></a>00116     {
<a name="l00117"></a>00117         <span class="keywordflow">return</span> append(&amp;single, 1);
<a name="l00118"></a>00118     }
<a name="l00119"></a>00119 
<a name="l00120"></a>00120     <span class="comment">// += operator. Maps to append</span>
<a name="l00121"></a>00121     TiXmlString&amp; operator += (<span class="keyword">const</span> TiXmlString &amp; suffix)
<a name="l00122"></a>00122     {
<a name="l00123"></a>00123         <span class="keywordflow">return</span> append(suffix.data(), suffix.length());
<a name="l00124"></a>00124     }
<a name="l00125"></a>00125 
<a name="l00126"></a>00126 
<a name="l00127"></a>00127     <span class="comment">// Convert a TiXmlString into a null-terminated char *</span>
<a name="l00128"></a>00128     <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="l00129"></a>00129 
<a name="l00130"></a>00130     <span class="comment">// Convert a TiXmlString into a char * (need not be null terminated).</span>
<a name="l00131"></a>00131     <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="l00132"></a>00132 
<a name="l00133"></a>00133     <span class="comment">// Return the length of a TiXmlString</span>
<a name="l00134"></a>00134     size_type length ()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> rep_-&gt;size; }
<a name="l00135"></a>00135 
<a name="l00136"></a>00136     <span class="comment">// Alias for length()</span>
<a name="l00137"></a>00137     size_type size ()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> rep_-&gt;size; }
<a name="l00138"></a>00138 
<a name="l00139"></a>00139     <span class="comment">// Checks if a TiXmlString is empty</span>
<a name="l00140"></a>00140     <span class="keywordtype">bool</span> empty ()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> rep_-&gt;size == 0; }
<a name="l00141"></a>00141 
<a name="l00142"></a>00142     <span class="comment">// Return capacity of string</span>
<a name="l00143"></a>00143     size_type capacity ()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> rep_-&gt;capacity; }
<a name="l00144"></a>00144 
<a name="l00145"></a>00145 
<a name="l00146"></a>00146     <span class="comment">// single char extraction</span>
<a name="l00147"></a>00147     <span class="keyword">const</span> <span class="keywordtype">char</span>&amp; at (size_type index)<span class="keyword"> const</span>
<a name="l00148"></a>00148 <span class="keyword">    </span>{
<a name="l00149"></a>00149         assert( index &lt; length() );
<a name="l00150"></a>00150         <span class="keywordflow">return</span> rep_-&gt;str[ index ];
<a name="l00151"></a>00151     }
<a name="l00152"></a>00152 
<a name="l00153"></a>00153     <span class="comment">// [] operator</span>
<a name="l00154"></a>00154     <span class="keywordtype">char</span>&amp; operator [] (size_type index)<span class="keyword"> const</span>
<a name="l00155"></a>00155 <span class="keyword">    </span>{
<a name="l00156"></a>00156         assert( index &lt; length() );
<a name="l00157"></a>00157         <span class="keywordflow">return</span> rep_-&gt;str[ index ];
<a name="l00158"></a>00158     }
<a name="l00159"></a>00159 
<a name="l00160"></a>00160     <span class="comment">// find a char in a string. Return TiXmlString::npos if not found</span>
<a name="l00161"></a>00161     size_type find (<span class="keywordtype">char</span> lookup)<span class="keyword"> const</span>
<a name="l00162"></a>00162 <span class="keyword">    </span>{
<a name="l00163"></a>00163         <span class="keywordflow">return</span> find(lookup, 0);
<a name="l00164"></a>00164     }
<a name="l00165"></a>00165 
<a name="l00166"></a>00166     <span class="comment">// find a char in a string from an offset. Return TiXmlString::npos if not found</span>
<a name="l00167"></a>00167     size_type find (<span class="keywordtype">char</span> tofind, size_type offset)<span class="keyword"> const</span>
<a name="l00168"></a>00168 <span class="keyword">    </span>{
<a name="l00169"></a>00169         <span class="keywordflow">if</span> (offset &gt;= length()) <span class="keywordflow">return</span> npos;
<a name="l00170"></a>00170 
<a name="l00171"></a>00171         <span class="keywordflow">for</span> (<span class="keyword">const</span> <span class="keywordtype">char</span>* p = c_str() + offset; *p != <span class="charliteral">&#39;\0&#39;</span>; ++p)
<a name="l00172"></a>00172         {
<a name="l00173"></a>00173            <span class="keywordflow">if</span> (*p == tofind) <span class="keywordflow">return</span> <span class="keyword">static_cast&lt;</span> size_type <span class="keyword">&gt;</span>( p - c_str() );
<a name="l00174"></a>00174         }
<a name="l00175"></a>00175         <span class="keywordflow">return</span> npos;
<a name="l00176"></a>00176     }
<a name="l00177"></a>00177 
<a name="l00178"></a>00178     <span class="keywordtype">void</span> clear ()
<a name="l00179"></a>00179     {
<a name="l00180"></a>00180         <span class="comment">//Lee:</span>
<a name="l00181"></a>00181         <span class="comment">//The original was just too strange, though correct:</span>
<a name="l00182"></a>00182         <span class="comment">//  TiXmlString().swap(*this);</span>
<a name="l00183"></a>00183         <span class="comment">//Instead use the quit &amp; re-init:</span>
<a name="l00184"></a>00184         quit();
<a name="l00185"></a>00185         init(0,0);
<a name="l00186"></a>00186     }
<a name="l00187"></a>00187 
<a name="l00188"></a>00188     <span class="comment">/*  Function to reserve a big amount of data when we know we&#39;ll need it. Be aware that this</span>
<a name="l00189"></a>00189 <span class="comment">        function DOES NOT clear the content of the TiXmlString if any exists.</span>
<a name="l00190"></a>00190 <span class="comment">    */</span>
<a name="l00191"></a>00191     <span class="keywordtype">void</span> reserve (size_type cap);
<a name="l00192"></a>00192 
<a name="l00193"></a>00193     TiXmlString&amp; assign (<span class="keyword">const</span> <span class="keywordtype">char</span>* str, size_type len);
<a name="l00194"></a>00194 
<a name="l00195"></a>00195     TiXmlString&amp; append (<span class="keyword">const</span> <span class="keywordtype">char</span>* str, size_type len);
<a name="l00196"></a>00196 
<a name="l00197"></a>00197     <span class="keywordtype">void</span> swap (TiXmlString&amp; other)
<a name="l00198"></a>00198     {
<a name="l00199"></a>00199         Rep* r = rep_;
<a name="l00200"></a>00200         rep_ = other.rep_;
<a name="l00201"></a>00201         other.rep_ = r;
<a name="l00202"></a>00202     }
<a name="l00203"></a>00203 
<a name="l00204"></a>00204   <span class="keyword">private</span>:
<a name="l00205"></a>00205 
<a name="l00206"></a>00206     <span class="keywordtype">void</span> init(size_type sz) { init(sz, sz); }
<a name="l00207"></a>00207     <span class="keywordtype">void</span> set_size(size_type sz) { rep_-&gt;str[ rep_-&gt;size = sz ] = <span class="charliteral">&#39;\0&#39;</span>; }
<a name="l00208"></a>00208     <span class="keywordtype">char</span>* start()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> rep_-&gt;str; }
<a name="l00209"></a>00209     <span class="keywordtype">char</span>* finish()<span class="keyword"> const </span>{ <span class="keywordflow">return</span> rep_-&gt;str + rep_-&gt;size; }
<a name="l00210"></a>00210 
<a name="l00211"></a>00211     <span class="keyword">struct </span>Rep
<a name="l00212"></a>00212     {
<a name="l00213"></a>00213         size_type size, capacity;
<a name="l00214"></a>00214         <span class="keywordtype">char</span> str[1];
<a name="l00215"></a>00215     };
<a name="l00216"></a>00216 
<a name="l00217"></a>00217     <span class="keywordtype">void</span> init(size_type sz, size_type cap)
<a name="l00218"></a>00218     {
<a name="l00219"></a>00219         <span class="keywordflow">if</span> (cap)
<a name="l00220"></a>00220         {
<a name="l00221"></a>00221             <span class="comment">// Lee: the original form:</span>
<a name="l00222"></a>00222             <span class="comment">//  rep_ = static_cast&lt;Rep*&gt;(operator new(sizeof(Rep) + cap));</span>
<a name="l00223"></a>00223             <span class="comment">// doesn&#39;t work in some cases of new being overloaded. Switching</span>
<a name="l00224"></a>00224             <span class="comment">// to the normal allocation, although use an &#39;int&#39; for systems</span>
<a name="l00225"></a>00225             <span class="comment">// that are overly picky about structure alignment.</span>
<a name="l00226"></a>00226             <span class="keyword">const</span> size_type bytesNeeded = <span class="keyword">sizeof</span>(Rep) + cap;
<a name="l00227"></a>00227             <span class="keyword">const</span> size_type intsNeeded = ( bytesNeeded + <span class="keyword">sizeof</span>(int) - 1 ) / <span class="keyword">sizeof</span>( int ); 
<a name="l00228"></a>00228             rep_ = <span class="keyword">reinterpret_cast&lt;</span>Rep*<span class="keyword">&gt;</span>( <span class="keyword">new</span> <span class="keywordtype">int</span>[ intsNeeded ] );
<a name="l00229"></a>00229 
<a name="l00230"></a>00230             rep_-&gt;str[ rep_-&gt;size = sz ] = <span class="charliteral">&#39;\0&#39;</span>;
<a name="l00231"></a>00231             rep_-&gt;capacity = cap;
<a name="l00232"></a>00232         }
<a name="l00233"></a>00233         <span class="keywordflow">else</span>
<a name="l00234"></a>00234         {
<a name="l00235"></a>00235             rep_ = &amp;nullrep_;
<a name="l00236"></a>00236         }
<a name="l00237"></a>00237     }
<a name="l00238"></a>00238 
<a name="l00239"></a>00239     <span class="keywordtype">void</span> quit()
<a name="l00240"></a>00240     {
<a name="l00241"></a>00241         <span class="keywordflow">if</span> (rep_ != &amp;nullrep_)
<a name="l00242"></a>00242         {
<a name="l00243"></a>00243             <span class="comment">// The rep_ is really an array of ints. (see the allocator, above).</span>
<a name="l00244"></a>00244             <span class="comment">// Cast it back before delete, so the compiler won&#39;t incorrectly call destructors.</span>
<a name="l00245"></a>00245             <span class="keyword">delete</span> [] ( <span class="keyword">reinterpret_cast&lt;</span><span class="keywordtype">int</span>*<span class="keyword">&gt;</span>( rep_ ) );
<a name="l00246"></a>00246         }
<a name="l00247"></a>00247     }
<a name="l00248"></a>00248 
<a name="l00249"></a>00249     Rep * rep_;
<a name="l00250"></a>00250     <span class="keyword">static</span> Rep nullrep_;
<a name="l00251"></a>00251 
<a name="l00252"></a>00252 } ;
<a name="l00253"></a>00253 
<a name="l00254"></a>00254 
<a name="l00255"></a>00255 <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="l00256"></a>00256 {
<a name="l00257"></a>00257     <span class="keywordflow">return</span>    ( a.length() == b.length() )              <span class="comment">// optimization on some platforms</span>
<a name="l00258"></a>00258            &amp;&amp; ( strcmp(a.c_str(), b.c_str()) == 0 );    <span class="comment">// actual compare</span>
<a name="l00259"></a>00259 }
<a name="l00260"></a>00260 <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="l00261"></a>00261 {
<a name="l00262"></a>00262     <span class="keywordflow">return</span> strcmp(a.c_str(), b.c_str()) &lt; 0;
<a name="l00263"></a>00263 }
<a name="l00264"></a>00264 
<a name="l00265"></a>00265 <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="l00266"></a>00266 <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="l00267"></a>00267 <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="l00268"></a>00268 <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="l00269"></a>00269 
<a name="l00270"></a>00270 <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="l00271"></a>00271 <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="l00272"></a>00272 <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="l00273"></a>00273 <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="l00274"></a>00274 
<a name="l00275"></a>00275 TiXmlString operator + (<span class="keyword">const</span> TiXmlString &amp; a, <span class="keyword">const</span> TiXmlString &amp; b);
<a name="l00276"></a>00276 TiXmlString operator + (<span class="keyword">const</span> TiXmlString &amp; a, <span class="keyword">const</span> <span class="keywordtype">char</span>* b);
<a name="l00277"></a>00277 TiXmlString operator + (<span class="keyword">const</span> <span class="keywordtype">char</span>* a, <span class="keyword">const</span> TiXmlString &amp; b);
<a name="l00278"></a>00278 
<a name="l00279"></a>00279 
<a name="l00280"></a>00280 <span class="comment">/*</span>
<a name="l00281"></a>00281 <span class="comment">   TiXmlOutStream is an emulation of std::ostream. It is based on TiXmlString.</span>
<a name="l00282"></a>00282 <span class="comment">   Only the operators that we need for TinyXML have been developped.</span>
<a name="l00283"></a>00283 <span class="comment">*/</span>
<a name="l00284"></a>00284 <span class="keyword">class </span>TiXmlOutStream : <span class="keyword">public</span> TiXmlString
<a name="l00285"></a>00285 {
<a name="l00286"></a>00286 <span class="keyword">public</span> :
<a name="l00287"></a>00287 
<a name="l00288"></a>00288     <span class="comment">// TiXmlOutStream &lt;&lt; operator.</span>
<a name="l00289"></a>00289     TiXmlOutStream &amp; operator &lt;&lt; (<span class="keyword">const</span> TiXmlString &amp; in)
<a name="l00290"></a>00290     {
<a name="l00291"></a>00291         *<span class="keyword">this</span> += in;
<a name="l00292"></a>00292         <span class="keywordflow">return</span> *<span class="keyword">this</span>;
<a name="l00293"></a>00293     }
<a name="l00294"></a>00294 
<a name="l00295"></a>00295     <span class="comment">// TiXmlOutStream &lt;&lt; operator.</span>
<a name="l00296"></a>00296     TiXmlOutStream &amp; operator &lt;&lt; (<span class="keyword">const</span> <span class="keywordtype">char</span> * in)
<a name="l00297"></a>00297     {
<a name="l00298"></a>00298         *<span class="keyword">this</span> += in;
<a name="l00299"></a>00299         <span class="keywordflow">return</span> *<span class="keyword">this</span>;
<a name="l00300"></a>00300     }
<a name="l00301"></a>00301 
<a name="l00302"></a>00302 } ;
<a name="l00303"></a>00303 
<a name="l00304"></a>00304 <span class="preprocessor">#endif  // TIXML_STRING_INCLUDED</span>
<a name="l00305"></a>00305 <span class="preprocessor"></span><span class="preprocessor">#endif  // TIXML_USE_STL</span>
</pre></div></div>
<hr size="1"/><address style="text-align: right;"><small>Generated by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img class="footer" src="doxygen.png" alt="doxygen"/></a> 1.6.2 </small></address>
</body>
</html>
bgstack15