📄 tinystr_8h-source.html
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1"><title>tinystr.h Source File</title><link href="doxygen.css" rel="stylesheet" type="text/css"></head><body bgcolor="#ffffff"><!-- Generated by Doxygen 1.2.11.1 --><center><a class="qindex" href="index.html">Main Page</a> <a class="qindex" href="hierarchy.html">Class Hierarchy</a> <a class="qindex" href="annotated.html">Compound List</a> <a class="qindex" href="files.html">File List</a> <a class="qindex" href="functions.html">Compound Members</a> </center><hr><h1>tinystr.h</h1><div class="fragment"><pre>00001 <font class="comment">/*</font>00002 <font class="comment">www.sourceforge.net/projects/tinyxml</font>00003 <font class="comment">Original file by Yves Berquin.</font>00004 <font class="comment"></font>00005 <font class="comment">This software is provided 'as-is', without any express or implied </font>00006 <font class="comment">warranty. In no event will the authors be held liable for any </font>00007 <font class="comment">damages arising from the use of this software.</font>00008 <font class="comment"></font>00009 <font class="comment">Permission is granted to anyone to use this software for any </font>00010 <font class="comment">purpose, including commercial applications, and to alter it and </font>00011 <font class="comment">redistribute it freely, subject to the following restrictions:</font>00012 <font class="comment"></font>00013 <font class="comment">1. The origin of this software must not be misrepresented; you must </font>00014 <font class="comment">not claim that you wrote the original software. If you use this </font>00015 <font class="comment">software in a product, an acknowledgment in the product documentation </font>00016 <font class="comment">would be appreciated but is not required.</font>00017 <font class="comment"></font>00018 <font class="comment">2. Altered source versions must be plainly marked as such, and</font>00019 <font class="comment">must not be misrepresented as being the original software.</font>00020 <font class="comment"></font>00021 <font class="comment">3. This notice may not be removed or altered from any source </font>00022 <font class="comment">distribution.</font>00023 <font class="comment">*/</font>00024 00025 <font class="preprocessor">#include "tinyxml.h"</font>00026 00027 00028 <font class="preprocessor">#ifndef TIXML_USE_STL</font>00029 <font class="preprocessor"></font>00030 <font class="preprocessor">#ifndef TIXML_STRING_INCLUDED</font>00031 <font class="preprocessor"></font><font class="preprocessor">#define TIXML_STRING_INCLUDED</font>00032 <font class="preprocessor"></font>00033 <font class="preprocessor">#pragma warning( disable : 4514 )</font>00034 <font class="preprocessor"></font>00035 <font class="preprocessor">#include <assert.h></font>00036 00037 <font class="comment">/*</font>00038 <font class="comment"> TiXmlString is an emulation of the std::string template.</font>00039 <font class="comment"> Its purpose is to allow compiling TinyXML on compilers with no or poor STL support.</font>00040 <font class="comment"> Only the member functions relevant to the TinyXML project have been implemented.</font>00041 <font class="comment"> The buffer allocation is made by a simplistic power of 2 like mechanism : if we increase</font>00042 <font class="comment"> a string and there's no more room, we allocate a buffer twice as big as we need.</font>00043 <font class="comment">*/</font>00044 <font class="keyword">class </font>TiXmlString00045 {00046 <font class="keyword">public</font> :00047 <font class="comment">// TiXmlString constructor, based on a string</font>00048 TiXmlString (<font class="keyword">const</font> <font class="keywordtype">char</font> * instring);00049 00050 <font class="comment">// TiXmlString empty constructor</font>00051 TiXmlString ()<font class="keyword"></font>00052 <font class="keyword"> </font>{00053 allocated = 0;00054 cstring = NULL;00055 current_length = 0;00056 }00057 00058 <font class="comment">// TiXmlString copy constructor</font>00059 TiXmlString (<font class="keyword">const</font> TiXmlString& copy);00060 00061 <font class="comment">// TiXmlString destructor</font>00062 ~ TiXmlString ()<font class="keyword"></font>00063 <font class="keyword"> </font>{00064 empty_it ();00065 }00066 00067 <font class="comment">// Convert a TiXmlString into a classical char *</font>00068 <font class="keyword">const</font> <font class="keywordtype">char</font> * c_str ()<font class="keyword"> const</font>00069 <font class="keyword"> </font>{00070 <font class="keywordflow">if</font> (allocated)00071 <font class="keywordflow">return</font> cstring;00072 <font class="keywordflow">return</font> <font class="stringliteral">""</font>;00073 }00074 00075 <font class="comment">// Return the length of a TiXmlString</font>00076 <font class="keywordtype">unsigned</font> length () <font class="keyword">const</font>;00077 00078 <font class="comment">// TiXmlString = operator</font>00079 <font class="keywordtype">void</font> <font class="keyword">operator</font> = (<font class="keyword">const</font> <font class="keywordtype">char</font> * content);00080 00081 <font class="comment">// = operator</font>00082 <font class="keywordtype">void</font> operator = (<font class="keyword">const</font> TiXmlString & copy);00083 00084 <font class="comment">// += operator. Maps to append</font>00085 TiXmlString& operator += (<font class="keyword">const</font> <font class="keywordtype">char</font> * suffix)<font class="keyword"></font>00086 <font class="keyword"> </font>{00087 append (suffix);00088 <font class="keywordflow">return</font> *<font class="keyword">this</font>;00089 }00090 00091 <font class="comment">// += operator. Maps to append</font>00092 TiXmlString& operator += (<font class="keywordtype">char</font> single)<font class="keyword"></font>00093 <font class="keyword"> </font>{00094 append (single);00095 <font class="keywordflow">return</font> *<font class="keyword">this</font>;00096 }00097 00098 <font class="comment">// += operator. Maps to append</font>00099 TiXmlString& operator += (TiXmlString & suffix)<font class="keyword"></font>00100 <font class="keyword"> </font>{00101 append (suffix);00102 <font class="keywordflow">return</font> *<font class="keyword">this</font>;00103 }00104 <font class="keywordtype">bool</font> operator == (<font class="keyword">const</font> TiXmlString & compare) <font class="keyword">const</font>;00105 <font class="keywordtype">bool</font> <font class="keyword">operator</font> < (<font class="keyword">const</font> TiXmlString & compare) <font class="keyword">const</font>;00106 <font class="keywordtype">bool</font> <font class="keyword">operator</font> > (<font class="keyword">const</font> TiXmlString & compare) <font class="keyword">const</font>;00107 00108 <font class="comment">// Checks if a TiXmlString is empty</font>00109 <font class="keywordtype">bool</font> empty ()<font class="keyword"> const</font>00110 <font class="keyword"> </font>{00111 <font class="keywordflow">return</font> length () ? <font class="keyword">false</font> : <font class="keyword">true</font>;00112 }00113 00114 <font class="comment">// Checks if a TiXmlString contains only whitespace (same rules as isspace)</font>00115 <font class="comment">// Not actually used in tinyxml. Conflicts with a C macro, "isblank",</font>00116 <font class="comment">// which is a problem. Commenting out. -lee</font>00117 <font class="comment">// bool isblank () const;</font>00118 00119 <font class="comment">// single char extraction</font>00120 <font class="keyword">const</font> <font class="keywordtype">char</font>& at (<font class="keywordtype">unsigned</font> index)<font class="keyword"> const</font>00121 <font class="keyword"> </font>{00122 assert( index < length ());00123 <font class="keywordflow">return</font> cstring [index];00124 }00125 00126 <font class="comment">// find a char in a string. Return TiXmlString::notfound if not found</font>00127 <font class="keywordtype">unsigned</font> find (<font class="keywordtype">char</font> lookup)<font class="keyword"> const</font>00128 <font class="keyword"> </font>{00129 <font class="keywordflow">return</font> find (lookup, 0);00130 }00131 00132 <font class="comment">// find a char in a string from an offset. Return TiXmlString::notfound if not found</font>00133 <font class="keywordtype">unsigned</font> find (<font class="keywordtype">char</font> tofind, <font class="keywordtype">unsigned</font> offset) <font class="keyword">const</font>;00134 00135 <font class="comment">/* Function to reserve a big amount of data when we know we'll need it. Be aware that this</font>00136 <font class="comment"> function clears the content of the TiXmlString if any exists.</font>00137 <font class="comment"> */</font>00138 <font class="keywordtype">void</font> reserve (<font class="keywordtype">unsigned</font> size)<font class="keyword"></font>00139 <font class="keyword"> </font>{00140 empty_it ();00141 <font class="keywordflow">if</font> (size)00142 {00143 allocated = size;00144 cstring = <font class="keyword">new</font> <font class="keywordtype">char</font> [size];00145 cstring [0] = 0;00146 current_length = 0;00147 }00148 }00149 00150 <font class="comment">// [] operator </font>00151 <font class="keywordtype">char</font>& operator [] (<font class="keywordtype">unsigned</font> index)<font class="keyword"> const</font>00152 <font class="keyword"> </font>{00153 assert( index < length ());00154 <font class="keywordflow">return</font> cstring [index];00155 }00156 00157 <font class="comment">// Error value for find primitive </font>00158 <font class="keyword">enum</font> { notfound = 0xffffffff,00159 npos = notfound };00160 00161 <font class="keywordtype">void</font> append (<font class="keyword">const</font> <font class="keywordtype">char</font> *str, <font class="keywordtype">int</font> len );00162 00163 <font class="keyword">protected</font> :00164 00165 <font class="comment">// The base string</font>00166 <font class="keywordtype">char</font> * cstring;00167 <font class="comment">// Number of chars allocated</font>00168 <font class="keywordtype">unsigned</font> allocated;00169 <font class="comment">// Current string size</font>00170 <font class="keywordtype">unsigned</font> current_length;00171 00172 <font class="comment">// New size computation. It is simplistic right now : it returns twice the amount</font>00173 <font class="comment">// we need</font>00174 <font class="keywordtype">unsigned</font> assign_new_size (<font class="keywordtype">unsigned</font> minimum_to_allocate)<font class="keyword"></font>00175 <font class="keyword"> </font>{00176 <font class="keywordflow">return</font> minimum_to_allocate * 2;00177 }00178 00179 <font class="comment">// Internal function that clears the content of a TiXmlString</font>00180 <font class="keywordtype">void</font> empty_it ()<font class="keyword"></font>00181 <font class="keyword"> </font>{00182 <font class="keywordflow">if</font> (cstring)00183 <font class="keyword">delete</font> [] cstring;00184 cstring = NULL;00185 allocated = 0;00186 current_length = 0;00187 }00188 00189 <font class="keywordtype">void</font> append (<font class="keyword">const</font> <font class="keywordtype">char</font> *suffix );00190 00191 <font class="comment">// append function for another TiXmlString</font>00192 <font class="keywordtype">void</font> append (<font class="keyword">const</font> TiXmlString & suffix)<font class="keyword"></font>00193 <font class="keyword"> </font>{00194 append (suffix . c_str ());00195 }00196 00197 <font class="comment">// append for a single char. This could be improved a lot if needed</font>00198 <font class="keywordtype">void</font> append (<font class="keywordtype">char</font> single)<font class="keyword"></font>00199 <font class="keyword"> </font>{00200 <font class="keywordtype">char</font> smallstr [2];00201 smallstr [0] = single;00202 smallstr [1] = 0;00203 append (smallstr);00204 }00205 00206 } ;00207 00208 <font class="comment">/* </font>00209 <font class="comment"> TiXmlOutStream is an emulation of std::ostream. It is based on TiXmlString.</font>00210 <font class="comment"> Only the operators that we need for TinyXML have been developped.</font>00211 <font class="comment">*/</font>00212 <font class="keyword">class </font>TiXmlOutStream : <font class="keyword">public</font> TiXmlString00213 {00214 <font class="keyword">public</font> :00215 TiXmlOutStream () : TiXmlString () {}00216 00217 <font class="comment">// TiXmlOutStream << operator. Maps to TiXmlString::append</font>00218 TiXmlOutStream & operator << (<font class="keyword">const</font> <font class="keywordtype">char</font> * in)<font class="keyword"></font>00219 <font class="keyword"> </font>{00220 append (in);00221 <font class="keywordflow">return</font> (* this);00222 }00223 00224 <font class="comment">// TiXmlOutStream << operator. Maps to TiXmlString::append</font>00225 TiXmlOutStream & operator << (<font class="keyword">const</font> TiXmlString & in)<font class="keyword"></font>00226 <font class="keyword"> </font>{00227 append (in . c_str ());00228 <font class="keywordflow">return</font> (* this);00229 }00230 } ;00231 00232 <font class="preprocessor">#endif // TIXML_STRING_INCLUDED</font>00233 <font class="preprocessor"></font><font class="preprocessor">#endif // TIXML_USE_STL</font></font></pre></div><hr><address><small>Generated on Fri Apr 11 23:01:21 2003 for TinyXml by<a href="http://www.doxygen.org/index.html"><img src="doxygen.gif" alt="doxygen" align="middle" border=0 width=110 height=53></a>1.2.11.1 written by <a href="mailto:dimitri@stack.nl">Dimitri van Heesch</a>, © 1997-2001</small></address></body></html>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -