⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tinystr_8h-source.html

📁 XML解析器
💻 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> &nbsp; <a class="qindex" href="hierarchy.html">Class Hierarchy</a> &nbsp; <a class="qindex" href="annotated.html">Compound List</a> &nbsp; <a class="qindex" href="files.html">File List</a> &nbsp; <a class="qindex" href="functions.html">Compound Members</a> &nbsp; </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 &lt;assert.h&gt;</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&amp; 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 &amp; copy);00083 00084     <font class="comment">// += operator. Maps to append</font>00085     TiXmlString&amp; 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&amp; 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&amp; operator += (TiXmlString &amp; 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 &amp; compare) <font class="keyword">const</font>;00105     <font class="keywordtype">bool</font> <font class="keyword">operator</font> &lt; (<font class="keyword">const</font> TiXmlString &amp; compare) <font class="keyword">const</font>;00106     <font class="keywordtype">bool</font> <font class="keyword">operator</font> &gt; (<font class="keyword">const</font> TiXmlString &amp; 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>&amp; at (<font class="keywordtype">unsigned</font> index)<font class="keyword"> const</font>00121 <font class="keyword">    </font>{00122         assert( index &lt; 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>&amp; operator [] (<font class="keywordtype">unsigned</font> index)<font class="keyword"> const</font>00152 <font class="keyword">    </font>{00153         assert( index &lt; 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 &amp; 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 &lt;&lt; operator. Maps to TiXmlString::append</font>00218     TiXmlOutStream &amp; operator &lt;&lt; (<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 &lt;&lt; operator. Maps to TiXmlString::append</font>00225     TiXmlOutStream &amp; operator &lt;&lt; (<font class="keyword">const</font> TiXmlString &amp; 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>, &copy;&nbsp;1997-2001</small></address></body></html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -