| <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> <a class="qindex" href="hierarchy.html">Class Hierarchy</a> <a class="qindex" href="classes.html">Alphabetical List</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> <a class="qindex" href="globals.html">File Members</a> </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 <<a class="code" href="PlatformDefinitions_8hpp.html">xalanc/Include/PlatformDefinitions.hpp</a>></font> |
| 00028 |
| 00029 |
| 00030 |
| 00031 <font class="preprocessor">#include <cstddef></font> |
| 00032 <font class="preprocessor">#include <algorithm></font> |
| 00033 <font class="preprocessor">#include <cassert></font> |
| 00034 <font class="preprocessor">#include <new></font> |
| 00035 <font class="preprocessor">#include <iterator></font> |
| 00036 <font class="preprocessor">#include <stdexcept></font> |
| 00037 |
| 00038 |
| 00039 |
| 00040 <font class="preprocessor">#include <<a class="code" href="XalanMemoryManagement_8hpp.html">xalanc/Include/XalanMemoryManagement.hpp</a>></font> |
| 00041 |
| 00042 |
| 00043 |
| 00044 XALAN_CPP_NAMESPACE_BEGIN |
| 00045 |
| 00046 |
| 00047 |
| 00048 template <class Value> |
| <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& 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 <class Value> |
| <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& 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<class XalanListTraits, class Node> |
| <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<XalanListIteratorTraits<value_type></a>, Node> 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& node) : |
| 00078 currentNode(&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& 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->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& origNode = *currentNode; |
| 00096 currentNode = currentNode->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->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 > 0) |
| 00110 { |
| 00111 node = node->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->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-></a>()<font class="keyword"> const</font> |
| 00123 <font class="keyword"> </font>{ |
| 00124 <font class="keywordflow">return</font> &currentNode->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> & <a class="code" href="structXalanListIteratorBase.html#a8">operator=</a>(<font class="keyword">const</font> <a class="code" href="structXalanListIteratorBase.html">XalanListIteratorBase</a>& 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>& 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>& 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& <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 <class Type> |
| <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& 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& 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<value_type></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 & theValue, |
| 00175 Node& prevNode, |
| 00176 Node& nextNode) : |
| 00177 value(theValue), |
| 00178 prev(&prevNode), |
| 00179 next(&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<XalanListIteratorTraits<value_type></a>, Node> 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<XalanListConstIteratorTraits<value_type></a>, Node> 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<iterator> reverse_iterator_; |
| 00194 <font class="keyword">typedef</font> XALAN_STD_QUALIFIER reverse_iterator<const_iterator> 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< |
| 00197 iterator, |
| 00198 XALAN_STD_QUALIFIER bidirectional_iterator_tag, |
| 00199 value_type> reverse_iterator_; |
| 00200 <font class="keyword">typedef</font> XALAN_STD_QUALIFIER reverse_iterator< |
| 00201 const_iterator, |
| 00202 XALAN_STD_QUALIFIER bidirectional_iterator_tag, |
| 00203 <font class="keyword">const</font> value_type> 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<iterator, value_type> 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<const_iterator, value_type, const_reference> 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<value_type></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& theManager) : |
| 00216 m_memoryManager(&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->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& |
| <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& |
| <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& 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& 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& pos, <font class="keyword">const</font> value_type& 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>& <font class="comment">/* list */</font>, |
| 00381 <font class="preprocessor">#else</font> |
| 00382 <font class="preprocessor"></font> <a class="code" href="classXalanDeque.html">ThisType</a>& 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 & posNode = pos.node(); |
| 00391 Node & toInsertNode = toInsert.node(); |
| 00392 |
| 00393 toInsertNode.prev->next = toInsertNode.next; |
| 00394 toInsertNode.next->prev = toInsertNode.prev; |
| 00395 |
| 00396 toInsertNode.prev = posNode.prev; |
| 00397 toInsertNode.next = &posNode; |
| 00398 |
| 00399 posNode.prev->next = &toInsertNode; |
| 00400 posNode.prev = &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>& <font class="comment">/* list */</font>, |
| 00409 <font class="preprocessor">#else</font> |
| 00410 <font class="preprocessor"></font> <a class="code" href="classXalanDeque.html">ThisType</a>& 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 & posNode = pos.node(); |
| 00420 Node & toInsertFirstNode = toInsertFirst.node(); |
| 00421 Node & toInsertLastNode = *(toInsertLast.node().prev); |
| 00422 |
| 00423 toInsertFirstNode.prev->next = toInsertLastNode.next; |
| 00424 toInsertLastNode.next->prev = toInsertFirstNode.prev; |
| 00425 |
| 00426 toInsertFirstNode.prev = posNode.prev; |
| 00427 toInsertLastNode.next = &posNode; |
| 00428 |
| 00429 posNode.prev->next = &toInsertFirstNode; |
| 00430 posNode.prev = &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>& 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& <a class="code" href="classXalanList.html#b0">constructNode</a>(<font class="keyword">const</font> value_type& 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->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(&newNode->value, data, *m_memoryManager); |
| 00477 <font class="keyword">new</font> (&newNode->prev) Node*(pos.node().prev); |
| 00478 <font class="keyword">new</font> (&newNode->next) Node*(&(pos.node())); |
| 00479 |
| 00480 pos.node().prev->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& node)<font class="keyword"></font> |
| 00489 <font class="keyword"> </font>{ |
| 00490 node.prev->next = node.next; |
| 00491 node.next->prev = node.prev; |
| 00492 |
| 00493 node.~Node(); |
| 00494 node.prev = 0; |
| 00495 node.next = m_freeListHeadPtr; |
| 00496 m_freeListHeadPtr = &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& node)<font class="keyword"></font> |
| 00500 <font class="keyword"> </font>{ |
| 00501 assert(&node != m_listHead); |
| 00502 node.~Node(); |
| 00503 <a class="code" href="classXalanList.html#b6">deallocate</a>(&node); |
| 00504 } |
| 00505 |
| <a name="l00506"></a><a class="code" href="classXalanList.html#b3">00506</a> Node& <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->next = m_listHead; |
| 00512 m_listHead->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& <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<XalanList*>(<font class="keyword">this</font>)->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->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->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>& theRhs); |
| 00556 |
| 00557 <a class="code" href="classXalanList.html">XalanList</a>& operator=(<font class="keyword">const</font> <a class="code" href="classXalanList.html">XalanList</a>& 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 © 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>
|