blob: 8b02e1ddb26e95c9b46d9266e9c8cf45a7497eea [file] [log] [blame]
<HTML><HEAD><TITLE>Xalan-C++ API Documentation</TITLE></HEAD>
<BODY>
<h2 align="center">Xalan-C++ API Documentation</h2>
<h3 align="center">The Xalan C++ XSLT Processor Version 1.10</h3>
</BODY>
<!-- Generated by Doxygen 1.2.8.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="classes.html">Alphabetical List</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; <a class="qindex" href="globals.html">File Members</a> &nbsp; </center>
<hr><h1>XalanList.hpp</h1><a href="XalanList_8hpp.html">Go to the documentation of this file.</a><div class="fragment"><pre>00001 <font class="comment">/*</font>
00002 <font class="comment"> * Copyright 1999-2004 The Apache Software Foundation.</font>
00003 <font class="comment"> *</font>
00004 <font class="comment"> * Licensed under the Apache License, Version 2.0 (the "License");</font>
00005 <font class="comment"> * you may not use this file except in compliance with the License.</font>
00006 <font class="comment"> * You may obtain a copy of the License at</font>
00007 <font class="comment"> *</font>
00008 <font class="comment"> * http://www.apache.org/licenses/LICENSE-2.0</font>
00009 <font class="comment"> *</font>
00010 <font class="comment"> * Unless required by applicable law or agreed to in writing, software</font>
00011 <font class="comment"> * distributed under the License is distributed on an "AS IS" BASIS,</font>
00012 <font class="comment"> * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.</font>
00013 <font class="comment"> * See the License for the specific language governing permissions and</font>
00014 <font class="comment"> * limitations under the License.</font>
00015 <font class="comment"> */</font>
00016
00020
00021 <font class="preprocessor">#if !defined(XALANLIST_HEADER_GUARD_1357924680)</font>
<a name="l00022"></a><a class="code" href="XalanList_8hpp.html#a0">00022</a> <font class="preprocessor"></font><font class="preprocessor">#define XALANLIST_HEADER_GUARD_1357924680</font>
00023 <font class="preprocessor"></font>
00024
00025
00026 <font class="comment">// Base include file. Must be first.</font>
00027 <font class="preprocessor">#include &lt;<a class="code" href="PlatformDefinitions_8hpp.html">xalanc/Include/PlatformDefinitions.hpp</a>&gt;</font>
00028
00029
00030
00031 <font class="preprocessor">#include &lt;cstddef&gt;</font>
00032 <font class="preprocessor">#include &lt;algorithm&gt;</font>
00033 <font class="preprocessor">#include &lt;cassert&gt;</font>
00034 <font class="preprocessor">#include &lt;new&gt;</font>
00035 <font class="preprocessor">#include &lt;iterator&gt;</font>
00036 <font class="preprocessor">#include &lt;stdexcept&gt;</font>
00037
00038
00039
00040 <font class="preprocessor">#include &lt;<a class="code" href="XalanMemoryManagement_8hpp.html">xalanc/Include/XalanMemoryManagement.hpp</a>&gt;</font>
00041
00042
00043
00044 XALAN_CPP_NAMESPACE_BEGIN
00045
00046
00047
00048 template &lt;class Value&gt;
<a name="l00049"></a><a class="code" href="structXalanListIteratorTraits.html">00049</a> <font class="keyword">struct </font><a class="code" href="structXalanListIteratorTraits.html">XalanListIteratorTraits</a>
00050 {
<a name="l00051"></a><a class="code" href="structXalanListIteratorTraits.html#s0">00051</a> <font class="keyword">typedef</font> Value value_type;
<a name="l00052"></a><a class="code" href="structXalanListIteratorTraits.html#s1">00052</a> <font class="keyword">typedef</font> Value&amp; reference;
<a name="l00053"></a><a class="code" href="structXalanListIteratorTraits.html#s2">00053</a> <font class="keyword">typedef</font> Value* pointer;
00054 };
00055
00056 template &lt;class Value&gt;
<a name="l00057"></a><a class="code" href="structXalanListConstIteratorTraits.html">00057</a> <font class="keyword">struct </font><a class="code" href="structXalanListConstIteratorTraits.html">XalanListConstIteratorTraits</a>
00058 {
<a name="l00059"></a><a class="code" href="structXalanListConstIteratorTraits.html#s0">00059</a> <font class="keyword">typedef</font> Value value_type;
<a name="l00060"></a><a class="code" href="structXalanListConstIteratorTraits.html#s1">00060</a> <font class="keyword">typedef</font> <font class="keyword">const</font> Value&amp; reference;
<a name="l00061"></a><a class="code" href="structXalanListConstIteratorTraits.html#s2">00061</a> <font class="keyword">typedef</font> <font class="keyword">const</font> Value* pointer;
00062 };
00063
00064 template&lt;class XalanListTraits, class Node&gt;
<a name="l00065"></a><a class="code" href="structXalanListIteratorBase.html">00065</a> <font class="keyword">struct </font><a class="code" href="structXalanListIteratorBase.html">XalanListIteratorBase</a>
00066 {
<a name="l00067"></a><a class="code" href="structXalanListIteratorBase.html#s0">00067</a> <font class="keyword">typedef</font> <font class="keyword">typename</font> XalanListTraits::value_type value_type;
<a name="l00068"></a><a class="code" href="structXalanListIteratorBase.html#s1">00068</a> <font class="keyword">typedef</font> <font class="keyword">typename</font> XalanListTraits::reference reference;
<a name="l00069"></a><a class="code" href="structXalanListIteratorBase.html#s2">00069</a> <font class="keyword">typedef</font> <font class="keyword">typename</font> XalanListTraits::pointer pointer;
00070
<a name="l00071"></a><a class="code" href="structXalanListIteratorBase.html#s3">00071</a> <font class="keyword">typedef</font> ptrdiff_t difference_type;
00072
<a name="l00073"></a><a class="code" href="structXalanListIteratorBase.html#s4">00073</a> <font class="keyword">typedef</font> XALAN_STD_QUALIFIER bidirectional_iterator_tag iterator_category;
00074
<a name="l00075"></a><a class="code" href="structXalanListIteratorBase.html#s5">00075</a> <font class="keyword">typedef</font> <a class="code" href="structXalanListIteratorBase.html">XalanListIteratorBase&lt;XalanListIteratorTraits&lt;value_type&gt;</a>, Node&gt; iterator;
00076
<a name="l00077"></a><a class="code" href="structXalanListIteratorBase.html#a0">00077</a> <a class="code" href="structXalanListIteratorBase.html#a0">XalanListIteratorBase</a>(Node&amp; node) :
00078 currentNode(&amp;node)
00079 {
00080 }
00081
<a name="l00082"></a><a class="code" href="structXalanListIteratorBase.html#a1">00082</a> <a class="code" href="structXalanListIteratorBase.html#a0">XalanListIteratorBase</a>(<font class="keyword">const</font> iterator&amp; theRhs) :
00083 currentNode(theRhs.currentNode)
00084 {
00085 }
00086
<a name="l00087"></a><a class="code" href="structXalanListIteratorBase.html#a2">00087</a> <a class="code" href="structXalanListIteratorBase.html">XalanListIteratorBase</a> <a class="code" href="structXalanListIteratorBase.html#a2">operator++</a>()<font class="keyword"></font>
00088 <font class="keyword"> </font>{
00089 currentNode = currentNode-&gt;next;
00090 <font class="keywordflow">return</font> *<font class="keyword">this</font>;
00091 }
00092
<a name="l00093"></a><a class="code" href="structXalanListIteratorBase.html#a3">00093</a> <a class="code" href="structXalanListIteratorBase.html">XalanListIteratorBase</a> <a class="code" href="structXalanListIteratorBase.html#a2">operator++</a>(<font class="keywordtype">int</font>)<font class="keyword"></font>
00094 <font class="keyword"> </font>{
00095 Node&amp; origNode = *currentNode;
00096 currentNode = currentNode-&gt;next;
00097 <font class="keywordflow">return</font> <a class="code" href="structXalanListIteratorBase.html#a0">XalanListIteratorBase</a>(origNode);
00098 }
00099
<a name="l00100"></a><a class="code" href="structXalanListIteratorBase.html#a4">00100</a> <a class="code" href="structXalanListIteratorBase.html">XalanListIteratorBase</a> <a class="code" href="structXalanListIteratorBase.html#a4">operator--</a>()<font class="keyword"></font>
00101 <font class="keyword"> </font>{
00102 currentNode = currentNode-&gt;prev;
00103 <font class="keywordflow">return</font> *<font class="keyword">this</font>;
00104 }
00105
<a name="l00106"></a><a class="code" href="structXalanListIteratorBase.html#a5">00106</a> <a class="code" href="structXalanListIteratorBase.html">XalanListIteratorBase</a> <a class="code" href="structXalanListIteratorBase.html#a5">operator-</a>(difference_type decrement)<font class="keyword"> const </font>
00107 <font class="keyword"> </font>{
00108 Node* node = currentNode;
00109 <font class="keywordflow">while</font> (decrement &gt; 0)
00110 {
00111 node = node-&gt;prev;
00112 --decrement;
00113 };
00114 <font class="keywordflow">return</font> <a class="code" href="structXalanListIteratorBase.html#a0">XalanListIteratorBase</a>(*node);
00115 }
00116
<a name="l00117"></a><a class="code" href="structXalanListIteratorBase.html#a6">00117</a> reference <a class="code" href="structXalanListIteratorBase.html#a6">operator*</a>()<font class="keyword"> const</font>
00118 <font class="keyword"> </font>{
00119 <font class="keywordflow">return</font> currentNode-&gt;value;
00120 }
00121
<a name="l00122"></a><a class="code" href="structXalanListIteratorBase.html#a7">00122</a> pointer <a class="code" href="structXalanListIteratorBase.html#a7">operator-&gt;</a>()<font class="keyword"> const</font>
00123 <font class="keyword"> </font>{
00124 <font class="keywordflow">return</font> &amp;currentNode-&gt;value;
00125 }
00126
<a name="l00127"></a><a class="code" href="structXalanListIteratorBase.html#a8">00127</a> <font class="keyword">const</font> <a class="code" href="structXalanListIteratorBase.html">XalanListIteratorBase</a> &amp; <a class="code" href="structXalanListIteratorBase.html#a8">operator=</a>(<font class="keyword">const</font> <a class="code" href="structXalanListIteratorBase.html">XalanListIteratorBase</a>&amp; theRhs)<font class="keyword"></font>
00128 <font class="keyword"> </font>{
00129 currentNode = theRhs.currentNode;
00130 <font class="keywordflow">return</font> *<font class="keyword">this</font>;
00131 }
00132
<a name="l00133"></a><a class="code" href="structXalanListIteratorBase.html#a9">00133</a> <font class="keywordtype">bool</font> <a class="code" href="structXalanListIteratorBase.html#a9">operator!=</a>(<font class="keyword">const</font> <a class="code" href="structXalanListIteratorBase.html">XalanListIteratorBase</a>&amp; theRhs)<font class="keyword"> const </font>
00134 <font class="keyword"> </font>{
00135 <font class="keywordflow">return</font> !<a class="code" href="structXalanListIteratorBase.html#a10">operator==</a>(theRhs);
00136 }
00137
<a name="l00138"></a><a class="code" href="structXalanListIteratorBase.html#a10">00138</a> <font class="keywordtype">bool</font> <a class="code" href="structXalanListIteratorBase.html#a10">operator==</a>(<font class="keyword">const</font> <a class="code" href="structXalanListIteratorBase.html">XalanListIteratorBase</a>&amp; theRhs)<font class="keyword"> const </font>
00139 <font class="keyword"> </font>{
00140 <font class="keywordflow">return</font> currentNode == theRhs.currentNode;
00141 }
00142
<a name="l00143"></a><a class="code" href="structXalanListIteratorBase.html#a11">00143</a> Node&amp; <a class="code" href="structXalanListIteratorBase.html#a11">node</a>()<font class="keyword"></font>
00144 <font class="keyword"> </font>{
00145 <font class="keywordflow">return</font> *currentNode;
00146 }
00147
<a name="l00148"></a><a class="code" href="structXalanListIteratorBase.html#m0">00148</a> Node* currentNode;
00149 };
00150
00151
00152
00156 template &lt;class Type&gt;
<a name="l00157"></a><a class="code" href="classXalanList.html">00157</a> <font class="keyword">class </font><a class="code" href="classXalanList.html">XalanList</a>
00158 {
00159 <font class="keyword">public</font>:
00160
00161
<a name="l00162"></a><a class="code" href="classXalanList.html#s0">00162</a> <font class="keyword">typedef</font> Type value_type;
<a name="l00163"></a><a class="code" href="classXalanList.html#s1">00163</a> <font class="keyword">typedef</font> value_type* pointer;
<a name="l00164"></a><a class="code" href="classXalanList.html#s2">00164</a> <font class="keyword">typedef</font> <font class="keyword">const</font> value_type* const_pointer;
<a name="l00165"></a><a class="code" href="classXalanList.html#s3">00165</a> <font class="keyword">typedef</font> value_type&amp; reference;
<a name="l00166"></a><a class="code" href="classXalanList.html#s4">00166</a> <font class="keyword">typedef</font> <font class="keyword">const</font> value_type&amp; const_reference;
<a name="l00167"></a><a class="code" href="classXalanList.html#s5">00167</a> <font class="keyword">typedef</font> size_t size_type;
00168
<a name="l00169"></a><a class="code" href="classXalanList.html#s6">00169</a> <font class="keyword">typedef</font> <a class="code" href="classXalanList.html">XalanList&lt;value_type&gt;</a> <a class="code" href="classXalanDeque.html">ThisType</a>;
00170
<a name="l00171"></a><a class="code" href="structXalanList_1_1Node.html">00171</a> <font class="keyword">struct </font>Node
00172 {
<a name="l00173"></a><a class="code" href="structXalanList_1_1Node.html#a0">00173</a> <a class="code" href="structXalanList_1_1Node.html#a0">Node</a>(
00174 <font class="keyword">const</font> value_type &amp; theValue,
00175 Node&amp; prevNode,
00176 Node&amp; nextNode) :
00177 value(theValue),
00178 prev(&amp;prevNode),
00179 next(&amp;nextNode)
00180 {
00181 }
00182
<a name="l00183"></a><a class="code" href="structXalanList_1_1Node.html#m0">00183</a> value_type value;
<a name="l00184"></a><a class="code" href="structXalanList_1_1Node.html#m1">00184</a> Node* prev;
<a name="l00185"></a><a class="code" href="structXalanList_1_1Node.html#m2">00185</a> Node* next;
00186 };
00187
<a name="l00188"></a><a class="code" href="classXalanList.html#s7">00188</a> <font class="keyword">typedef</font> <a class="code" href="structXalanListIteratorBase.html">XalanListIteratorBase&lt;XalanListIteratorTraits&lt;value_type&gt;</a>, Node&gt; iterator;
00189
<a name="l00190"></a><a class="code" href="classXalanList.html#s8">00190</a> <font class="keyword">typedef</font> <a class="code" href="structXalanListIteratorBase.html">XalanListIteratorBase&lt;XalanListConstIteratorTraits&lt;value_type&gt;</a>, Node&gt; const_iterator;
00191
00192 <font class="preprocessor">#if defined(XALAN_HAS_STD_ITERATORS)</font>
00193 <font class="preprocessor"></font> <font class="keyword">typedef</font> XALAN_STD_QUALIFIER reverse_iterator&lt;iterator&gt; reverse_iterator_;
00194 <font class="keyword">typedef</font> XALAN_STD_QUALIFIER reverse_iterator&lt;const_iterator&gt; const_reverse_iterator_;
00195 <font class="preprocessor">#elif defined(XALAN_RW_NO_CLASS_PARTIAL_SPEC)</font>
00196 <font class="preprocessor"></font> <font class="keyword">typedef</font> XALAN_STD_QUALIFIER reverse_iterator&lt;
00197 iterator,
00198 XALAN_STD_QUALIFIER bidirectional_iterator_tag,
00199 value_type&gt; reverse_iterator_;
00200 <font class="keyword">typedef</font> XALAN_STD_QUALIFIER reverse_iterator&lt;
00201 const_iterator,
00202 XALAN_STD_QUALIFIER bidirectional_iterator_tag,
00203 <font class="keyword">const</font> value_type&gt; const_reverse_iterator_;
00204 <font class="preprocessor">#else</font>
<a name="l00205"></a><a class="code" href="classXalanList.html#s9">00205</a> <font class="preprocessor"></font> <font class="keyword">typedef</font> XALAN_STD_QUALIFIER reverse_iterator&lt;iterator, value_type&gt; reverse_iterator_;
<a name="l00206"></a><a class="code" href="classXalanList.html#s10">00206</a> <font class="keyword">typedef</font> XALAN_STD_QUALIFIER reverse_iterator&lt;const_iterator, value_type, const_reference&gt; const_reverse_iterator_;
00207 <font class="preprocessor">#endif</font>
00208 <font class="preprocessor"></font>
<a name="l00209"></a><a class="code" href="classXalanList.html#s11">00209</a> <font class="keyword">typedef</font> reverse_iterator_ reverse_iterator;
<a name="l00210"></a><a class="code" href="classXalanList.html#s12">00210</a> <font class="keyword">typedef</font> const_reverse_iterator_ const_reverse_iterator;
00211
<a name="l00212"></a><a class="code" href="classXalanList.html#s13">00212</a> <font class="keyword">typedef</font> <font class="keyword">typename</font> <a class="code" href="structMemoryManagedConstructionTraits.html">MemoryManagedConstructionTraits&lt;value_type&gt;</a>::Constructor <a class="code" href="structMemoryManagedConstructionTraits.html">Constructor</a>;
00213
<a name="l00214"></a><a class="code" href="classXalanList.html#a0">00214</a> <a class="code" href="classXalanList.html#a0">XalanList</a>(
00215 MemoryManagerType&amp; theManager) :
00216 m_memoryManager(&amp;theManager),
00217 m_listHead(0),
00218 m_freeListHeadPtr(0)
00219 {
00220 }
00221
<a name="l00222"></a><a class="code" href="classXalanList.html#a1">00222</a> <a class="code" href="classXalanList.html#a1">~XalanList</a>()<font class="keyword"></font>
00223 <font class="keyword"> </font>{
00224 <font class="keywordflow">if</font> (m_listHead != 0)
00225 {
00226 iterator pos = <a class="code" href="classXalanList.html#a4">begin</a>();
00227 <font class="keywordflow">while</font> (pos != <a class="code" href="classXalanList.html#a6">end</a>())
00228 {
00229 <a class="code" href="classXalanList.html#b2">destroyNode</a>(pos++.node());
00230 }
00231
00232 Node * freeNode = m_freeListHeadPtr;
00233 <font class="keywordflow">while</font> (freeNode != 0)
00234 {
00235 Node * nextNode = freeNode-&gt;next;
00236 <a class="code" href="classXalanList.html#b6">deallocate</a>(freeNode);
00237 freeNode = nextNode;
00238 }
00239
00240 <a class="code" href="classXalanList.html#b6">deallocate</a>(m_listHead);
00241 }
00242 }
00243
00244 MemoryManagerType&amp;
<a name="l00245"></a><a class="code" href="classXalanList.html#a2">00245</a> <a class="code" href="classXalanList.html#a2">getMemoryManager</a>()<font class="keyword"></font>
00246 <font class="keyword"> </font>{
00247 assert(m_memoryManager != 0 );
00248
00249 <font class="keywordflow">return</font> *m_memoryManager;
00250 }
00251
00252 <font class="keyword">const</font> MemoryManagerType&amp;
<a name="l00253"></a><a class="code" href="classXalanList.html#a3">00253</a> <a class="code" href="classXalanList.html#a2">getMemoryManager</a>()<font class="keyword"> const</font>
00254 <font class="keyword"> </font>{
00255 assert(m_memoryManager != 0 );
00256
00257 <font class="keywordflow">return</font> *m_memoryManager;
00258 }
00259
00260 iterator
<a name="l00261"></a><a class="code" href="classXalanList.html#a4">00261</a> <a class="code" href="classXalanList.html#a4">begin</a>()<font class="keyword"></font>
00262 <font class="keyword"> </font>{
00263 <font class="keywordflow">return</font> <a class="code" href="classXalanList.html#s7">iterator</a>(*(<a class="code" href="classXalanList.html#b3">getListHead</a>().next));
00264 }
00265
00266 const_iterator
<a name="l00267"></a><a class="code" href="classXalanList.html#a5">00267</a> <a class="code" href="classXalanList.html#a4">begin</a>()<font class="keyword"> const</font>
00268 <font class="keyword"> </font>{
00269 <font class="keywordflow">return</font> <a class="code" href="classXalanList.html#s8">const_iterator</a>(*(<a class="code" href="classXalanList.html#b3">getListHead</a>().next));
00270 }
00271
00272 iterator
<a name="l00273"></a><a class="code" href="classXalanList.html#a6">00273</a> <a class="code" href="classXalanList.html#a6">end</a>()<font class="keyword"></font>
00274 <font class="keyword"> </font>{
00275 <font class="keywordflow">return</font> <a class="code" href="classXalanList.html#s7">iterator</a>(<a class="code" href="classXalanList.html#b3">getListHead</a>());
00276 }
00277
00278 const_iterator
<a name="l00279"></a><a class="code" href="classXalanList.html#a7">00279</a> <a class="code" href="classXalanList.html#a6">end</a>()<font class="keyword"> const</font>
00280 <font class="keyword"> </font>{
00281 <font class="keywordflow">return</font> <a class="code" href="classXalanList.html#s8">const_iterator</a>(<a class="code" href="classXalanList.html#b3">getListHead</a>());
00282 }
00283
00284 reverse_iterator
<a name="l00285"></a><a class="code" href="classXalanList.html#a8">00285</a> <a class="code" href="classXalanList.html#a8">rbegin</a>()<font class="keyword"></font>
00286 <font class="keyword"> </font>{
00287 <font class="keywordflow">return</font> <a class="code" href="classXalanList.html#s11">reverse_iterator</a>(<a class="code" href="classXalanList.html#a6">end</a>());
00288 }
00289
00290 const_reverse_iterator
<a name="l00291"></a><a class="code" href="classXalanList.html#a9">00291</a> <a class="code" href="classXalanList.html#a8">rbegin</a>()<font class="keyword"> const</font>
00292 <font class="keyword"> </font>{
00293 <font class="keywordflow">return</font> <a class="code" href="classXalanList.html#s12">const_reverse_iterator</a>(<a class="code" href="classXalanList.html#a6">end</a>());
00294 }
00295
00296 reverse_iterator
<a name="l00297"></a><a class="code" href="classXalanList.html#a10">00297</a> <a class="code" href="classXalanList.html#a10">rend</a>()<font class="keyword"></font>
00298 <font class="keyword"> </font>{
00299 <font class="keywordflow">return</font> <a class="code" href="classXalanList.html#s11">reverse_iterator</a>(<a class="code" href="classXalanList.html#a4">begin</a>());
00300 }
00301
00302 const_reverse_iterator
<a name="l00303"></a><a class="code" href="classXalanList.html#a11">00303</a> <a class="code" href="classXalanList.html#a10">rend</a>()<font class="keyword"> const</font>
00304 <font class="keyword"> </font>{
00305 <font class="keywordflow">return</font> <a class="code" href="classXalanList.html#s12">const_reverse_iterator</a>(<a class="code" href="classXalanList.html#a4">begin</a>());
00306 }
00307
00308 reference
<a name="l00309"></a><a class="code" href="classXalanList.html#a12">00309</a> <a class="code" href="classXalanList.html#a12">front</a>()<font class="keyword"></font>
00310 <font class="keyword"> </font>{
00311 <font class="keywordflow">return</font> *<a class="code" href="classXalanList.html#a4">begin</a>();
00312 }
00313
00314 reference
<a name="l00315"></a><a class="code" href="classXalanList.html#a13">00315</a> <a class="code" href="classXalanList.html#a13">back</a>()<font class="keyword"></font>
00316 <font class="keyword"> </font>{
00317 <font class="keywordflow">return</font> *(--<a class="code" href="classXalanList.html#a6">end</a>());
00318 }
00319
00320 size_type
<a name="l00321"></a><a class="code" href="classXalanList.html#a14">00321</a> <a class="code" href="classXalanList.html#a14">size</a>()<font class="keyword"> const</font>
00322 <font class="keyword"> </font>{
00323 size_type size = 0;
00324 const_iterator item = <a class="code" href="classXalanList.html#a4">begin</a>();
00325 <font class="keywordflow">while</font> (item != <a class="code" href="classXalanList.html#a6">end</a>())
00326 {
00327 ++size;
00328 ++item;
00329 }
00330 <font class="keywordflow">return</font> size;
00331 }
00332
00333 <font class="keywordtype">bool</font>
<a name="l00334"></a><a class="code" href="classXalanList.html#a15">00334</a> <a class="code" href="classXalanList.html#a15">empty</a>()<font class="keyword"> const</font>
00335 <font class="keyword"> </font>{
00336 <font class="keywordflow">return</font> (<a class="code" href="classXalanList.html#a4">begin</a>() == <a class="code" href="classXalanList.html#a6">end</a>()) != 0;
00337 }
00338
00339 <font class="keywordtype">void</font>
<a name="l00340"></a><a class="code" href="classXalanList.html#a16">00340</a> <a class="code" href="classXalanList.html#a16">push_back</a>(<font class="keyword">const</font> value_type&amp; data)<font class="keyword"></font>
00341 <font class="keyword"> </font>{
00342 <a class="code" href="classXalanList.html#b0">constructNode</a>(data, <a class="code" href="classXalanList.html#a6">end</a>());
00343 }
00344
00345 <font class="keywordtype">void</font>
<a name="l00346"></a><a class="code" href="classXalanList.html#a17">00346</a> <a class="code" href="classXalanList.html#a17">push_front</a>(<font class="keyword">const</font> value_type&amp; data)<font class="keyword"></font>
00347 <font class="keyword"> </font>{
00348 <a class="code" href="classXalanList.html#b0">constructNode</a>(data, <a class="code" href="classXalanList.html#a4">begin</a>());
00349 }
00350
00351 <font class="keywordtype">void</font>
<a name="l00352"></a><a class="code" href="classXalanList.html#a18">00352</a> <a class="code" href="classXalanList.html#a18">pop_front</a>()<font class="keyword"></font>
00353 <font class="keyword"> </font>{
00354 <a class="code" href="classXalanList.html#a21">erase</a>(<a class="code" href="classXalanList.html#a4">begin</a>());
00355 }
00356
00357 <font class="keywordtype">void</font>
<a name="l00358"></a><a class="code" href="classXalanList.html#a19">00358</a> <a class="code" href="classXalanList.html#a19">pop_back</a>()<font class="keyword"></font>
00359 <font class="keyword"> </font>{
00360 <a class="code" href="classXalanList.html#a21">erase</a>(--<a class="code" href="classXalanList.html#a6">end</a>());
00361 }
00362
00363 iterator
<a name="l00364"></a><a class="code" href="classXalanList.html#a20">00364</a> <a class="code" href="classXalanList.html#a20">insert</a>(<font class="keyword">const</font> iterator&amp; pos, <font class="keyword">const</font> value_type&amp; value)<font class="keyword"></font>
00365 <font class="keyword"> </font>{
00366 <font class="keywordflow">return</font> <a class="code" href="classXalanList.html#s7">iterator</a>(<a class="code" href="classXalanList.html#b0">constructNode</a>(value,pos));
00367 }
00368
00369 <font class="keywordtype">void</font>
<a name="l00370"></a><a class="code" href="classXalanList.html#a21">00370</a> <a class="code" href="classXalanList.html#a21">erase</a>(iterator pos)<font class="keyword"></font>
00371 <font class="keyword"> </font>{
00372 assert(pos != <a class="code" href="classXalanList.html#a6">end</a>());
00373 <a class="code" href="classXalanList.html#b1">freeNode</a>(pos.node());
00374 }
00375
00376 <font class="keywordtype">void</font>
<a name="l00377"></a><a class="code" href="classXalanList.html#a22">00377</a> <a class="code" href="classXalanList.html#a22">splice</a>(
00378 iterator pos,
00379 #<font class="keywordflow">if</font> defined(NDEBUG)
00380 <a class="code" href="classXalanDeque.html">ThisType</a>&amp; <font class="comment">/* list */</font>,
00381 <font class="preprocessor">#else</font>
00382 <font class="preprocessor"></font> <a class="code" href="classXalanDeque.html">ThisType</a>&amp; list,
00383 <font class="preprocessor">#endif</font>
00384 <font class="preprocessor"></font> iterator toInsert)
00385 {
00386 assert(m_memoryManager == list.m_memoryManager);
00387
00388 <font class="keywordflow">if</font> (pos != toInsert)
00389 {
00390 Node &amp; posNode = pos.node();
00391 Node &amp; toInsertNode = toInsert.node();
00392
00393 toInsertNode.prev-&gt;next = toInsertNode.next;
00394 toInsertNode.next-&gt;prev = toInsertNode.prev;
00395
00396 toInsertNode.prev = posNode.prev;
00397 toInsertNode.next = &amp;posNode;
00398
00399 posNode.prev-&gt;next = &amp;toInsertNode;
00400 posNode.prev = &amp;toInsertNode;
00401 }
00402 }
00403
00404 <font class="keywordtype">void</font>
<a name="l00405"></a><a class="code" href="classXalanList.html#a23">00405</a> <a class="code" href="classXalanList.html#a22">splice</a>(
00406 iterator pos,
00407 #<font class="keywordflow">if</font> defined(NDEBUG)
00408 <a class="code" href="classXalanDeque.html">ThisType</a>&amp; <font class="comment">/* list */</font>,
00409 <font class="preprocessor">#else</font>
00410 <font class="preprocessor"></font> <a class="code" href="classXalanDeque.html">ThisType</a>&amp; list,
00411 <font class="preprocessor">#endif</font>
00412 <font class="preprocessor"></font> iterator toInsertFirst,
00413 iterator toInsertLast)
00414 {
00415 assert(m_memoryManager == list.m_memoryManager);
00416
00417 <font class="keywordflow">if</font> (toInsertFirst != toInsertLast)
00418 {
00419 Node &amp; posNode = pos.node();
00420 Node &amp; toInsertFirstNode = toInsertFirst.node();
00421 Node &amp; toInsertLastNode = *(toInsertLast.node().prev);
00422
00423 toInsertFirstNode.prev-&gt;next = toInsertLastNode.next;
00424 toInsertLastNode.next-&gt;prev = toInsertFirstNode.prev;
00425
00426 toInsertFirstNode.prev = posNode.prev;
00427 toInsertLastNode.next = &amp;posNode;
00428
00429 posNode.prev-&gt;next = &amp;toInsertFirstNode;
00430 posNode.prev = &amp;toInsertLastNode;
00431 }
00432 }
00433
00434 <font class="keywordtype">void</font>
<a name="l00435"></a><a class="code" href="classXalanList.html#a24">00435</a> <a class="code" href="classXalanList.html#a24">clear</a>()<font class="keyword"></font>
00436 <font class="keyword"> </font>{
00437 iterator pos = <a class="code" href="classXalanList.html#a4">begin</a>();
00438 <font class="keywordflow">while</font> (pos != <a class="code" href="classXalanList.html#a6">end</a>())
00439 {
00440 <a class="code" href="classXalanList.html#b1">freeNode</a>(pos++.node());
00441 }
00442 }
00443
<a name="l00444"></a><a class="code" href="classXalanList.html#a25">00444</a> <font class="keywordtype">void</font> <a class="code" href="classXalanList.html#a25">swap</a>(<a class="code" href="classXalanDeque.html">ThisType</a>&amp; theRHS)<font class="keyword"></font>
00445 <font class="keyword"> </font>{
00446 <font class="preprocessor"> #if defined(XALAN_NO_STD_NAMESPACE)</font>
00447 <font class="preprocessor"></font> ::swap(m_memoryManager, theRHS.m_memoryManager);
00448 ::swap(m_listHead, theRHS.m_listHead);
00449 ::swap(m_freeListHeadPtr, theRHS.m_freeListHeadPtr);
00450 <font class="preprocessor"> #else</font>
00451 <font class="preprocessor"></font> XALAN_STD_QUALIFIER <a class="code" href="classXalanList.html#a25">swap</a>(m_memoryManager, theRHS.m_memoryManager);
00452 XALAN_STD_QUALIFIER <a class="code" href="classXalanList.html#a25">swap</a>(m_listHead, theRHS.m_listHead);
00453 XALAN_STD_QUALIFIER <a class="code" href="classXalanList.html#a25">swap</a>(m_freeListHeadPtr, theRHS.m_freeListHeadPtr);
00454 <font class="preprocessor"> #endif</font>
00455 <font class="preprocessor"></font> }
00456
00457
00458 <font class="keyword">protected</font>:
00459
<a name="l00460"></a><a class="code" href="classXalanList.html#b0">00460</a> Node&amp; <a class="code" href="classXalanList.html#b0">constructNode</a>(<font class="keyword">const</font> value_type&amp; data, iterator pos)<font class="keyword"></font>
00461 <font class="keyword"> </font>{
00462 Node * newNode = 0;
00463 Node * nextFreeNode = 0;
00464
00465 <font class="keywordflow">if</font> (m_freeListHeadPtr != 0)
00466 {
00467 newNode = m_freeListHeadPtr;
00468 nextFreeNode = m_freeListHeadPtr-&gt;next;
00469 }
00470 <font class="keywordflow">else</font>
00471 {
00472 m_freeListHeadPtr = <a class="code" href="classXalanList.html#b5">allocate</a>(1);
00473 newNode = m_freeListHeadPtr;
00474 }
00475
00476 Constructor::construct(&amp;newNode-&gt;value, data, *m_memoryManager);
00477 <font class="keyword">new</font> (&amp;newNode-&gt;prev) Node*(pos.node().prev);
00478 <font class="keyword">new</font> (&amp;newNode-&gt;next) Node*(&amp;(pos.node()));
00479
00480 pos.node().prev-&gt;next = newNode;
00481 pos.node().prev = newNode;
00482
00483 m_freeListHeadPtr = nextFreeNode;
00484
00485 <font class="keywordflow">return</font> *newNode;
00486 }
00487
<a name="l00488"></a><a class="code" href="classXalanList.html#b1">00488</a> <font class="keywordtype">void</font> <a class="code" href="classXalanList.html#b1">freeNode</a>(Node&amp; node)<font class="keyword"></font>
00489 <font class="keyword"> </font>{
00490 node.prev-&gt;next = node.next;
00491 node.next-&gt;prev = node.prev;
00492
00493 node.~Node();
00494 node.prev = 0;
00495 node.next = m_freeListHeadPtr;
00496 m_freeListHeadPtr = &amp;node;
00497 }
00498
<a name="l00499"></a><a class="code" href="classXalanList.html#b2">00499</a> <font class="keywordtype">void</font> <a class="code" href="classXalanList.html#b2">destroyNode</a>(Node&amp; node)<font class="keyword"></font>
00500 <font class="keyword"> </font>{
00501 assert(&amp;node != m_listHead);
00502 node.~Node();
00503 <a class="code" href="classXalanList.html#b6">deallocate</a>(&amp;node);
00504 }
00505
<a name="l00506"></a><a class="code" href="classXalanList.html#b3">00506</a> Node&amp; <a class="code" href="classXalanList.html#b3">getListHead</a>()<font class="keyword"></font>
00507 <font class="keyword"> </font>{
00508 <font class="keywordflow">if</font> (0 == m_listHead)
00509 {
00510 m_listHead = <a class="code" href="classXalanList.html#b5">allocate</a>(1);
00511 m_listHead-&gt;next = m_listHead;
00512 m_listHead-&gt;prev = m_listHead;
00513 }
00514
00515 <font class="keywordflow">return</font> *m_listHead;
00516 }
00517
<a name="l00518"></a><a class="code" href="classXalanList.html#b4">00518</a> Node&amp; <a class="code" href="classXalanList.html#b3">getListHead</a>()<font class="keyword"> const</font>
00519 <font class="keyword"> </font>{
00520 <font class="keywordflow">return</font> const_cast&lt;XalanList*&gt;(<font class="keyword">this</font>)-&gt;getListHead();
00521 }
00522
00523 Node*
<a name="l00524"></a><a class="code" href="classXalanList.html#b5">00524</a> <a class="code" href="classXalanList.html#b5">allocate</a>(size_type size)<font class="keyword"></font>
00525 <font class="keyword"> </font>{
00526 <font class="keyword">const</font> size_type theBytesNeeded = size * <font class="keyword">sizeof</font>(Node);
00527
00528 assert(m_memoryManager != 0);
00529
00530 <font class="keywordtype">void</font>* pointer = m_memoryManager-&gt;allocate(theBytesNeeded);
00531
00532 assert( pointer != 0 );
00533
00534 <font class="keywordflow">return</font> (Node*) pointer;
00535 }
00536
00537
00538 <font class="keywordtype">void</font>
<a name="l00539"></a><a class="code" href="classXalanList.html#b6">00539</a> <a class="code" href="classXalanList.html#b6">deallocate</a>(Node* pointer)<font class="keyword"></font>
00540 <font class="keyword"> </font>{
00541 assert(m_memoryManager != 0);
00542
00543 m_memoryManager-&gt;deallocate(pointer);
00544 }
00545
<a name="l00546"></a><a class="code" href="classXalanList.html#n0">00546</a> MemoryManagerType * m_memoryManager;
00547
<a name="l00548"></a><a class="code" href="classXalanList.html#n1">00548</a> Node* m_listHead;
00549
<a name="l00550"></a><a class="code" href="classXalanList.html#n2">00550</a> Node* m_freeListHeadPtr;
00551
00552 <font class="keyword">private</font>:
00553 <font class="comment">// not defined</font>
00554 <a class="code" href="classXalanList.html#a0">XalanList</a>();
00555 <a class="code" href="classXalanList.html#a0">XalanList</a>(<font class="keyword">const</font> <a class="code" href="classXalanList.html">XalanList</a>&amp; theRhs);
00556
00557 <a class="code" href="classXalanList.html">XalanList</a>&amp; operator=(<font class="keyword">const</font> <a class="code" href="classXalanList.html">XalanList</a>&amp; theRhs);
00558
00559 };
00560
00561
00562
00563 XALAN_CPP_NAMESPACE_END
00564
00565 <font class="preprocessor">#endif // XALANLIST_HEADER_GUARD_1357924680</font>
</font></pre></div><p align="center"><a href="diagramnotes.html">Interpreting class diagrams</a></p>
<p><FONT color="#000000" face="arial,helvetica,sanserif" size="-1">
<i><A href="http://www.stack.nl/~dimitri/doxygen/">Doxygen</A> and
<A href="http://www.research.att.com/sw/tools/graphviz/">GraphViz</A> are used to generate this API documentation from the Xalan-C header files.</I></FONT></p>
<TABLE border="0" cellpadding="0" cellspacing="0" width="820"><TR><TD bgcolor="#0086b2"><IMG height="1" src="../resources/dot.gif" width="1" alt="dot"></TD></TR></TABLE>
<TABLE BORDER="0" CELLPADDING="0" CELLSPACING="0" WIDTH="80%">
<TR>
<TD WIDTH="80%" VALIGN="TOP">
<P ALIGN="CENTER"><B>Xalan-C++ XSLT Processor Version 1.10</B><BR>
Copyright &copy; 1999-2004 The Apache Software Foundation. All Rights Reserved.</i></p>
</TD>
</TR>
<TR>
<TD WIDTH="100%">
<P ALIGN="CENTER"><IMG SRC="ApacheLogo.jpg" WIDTH="387" HEIGHT="100" ALIGN="BOTTOM" BORDER="0" ALT="Apache Logo">
</TD>
</TR>
</TABLE>