| <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>XalanDeque.hpp</h1><a href="XalanDeque_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(XALANDEQUE_HEADER_GUARD_1357924680)</font> |
| <a name="l00022"></a><a class="code" href="XalanDeque_8hpp.html#a0">00022</a> <font class="preprocessor"></font><font class="preprocessor">#define XALANDEQUE_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 <<a class="code" href="XalanVector_8hpp.html">xalanc/Include/XalanVector.hpp</a>></font> |
| 00032 <font class="preprocessor">#include <<a class="code" href="XalanMemoryManagement_8hpp.html">xalanc/Include/XalanMemoryManagement.hpp</a>></font> |
| 00033 |
| 00034 |
| 00035 |
| 00036 XALAN_CPP_NAMESPACE_BEGIN |
| 00037 |
| 00038 |
| 00039 |
| 00040 template <class Value> |
| <a name="l00041"></a><a class="code" href="structXalanDequeIteratorTraits.html">00041</a> <font class="keyword">struct </font><a class="code" href="structXalanDequeIteratorTraits.html">XalanDequeIteratorTraits</a> |
| 00042 { |
| <a name="l00043"></a><a class="code" href="structXalanDequeIteratorTraits.html#s0">00043</a> <font class="keyword">typedef</font> Value value_type; |
| <a name="l00044"></a><a class="code" href="structXalanDequeIteratorTraits.html#s1">00044</a> <font class="keyword">typedef</font> Value& reference; |
| <a name="l00045"></a><a class="code" href="structXalanDequeIteratorTraits.html#s2">00045</a> <font class="keyword">typedef</font> Value* pointer; |
| <a name="l00046"></a><a class="code" href="structXalanDequeIteratorTraits.html#s3">00046</a> <font class="keyword">typedef</font> <font class="keyword">const</font> Value& const_reference; |
| 00047 }; |
| 00048 |
| 00049 template <class Value> |
| <a name="l00050"></a><a class="code" href="structXalanDequeConstIteratorTraits.html">00050</a> <font class="keyword">struct </font><a class="code" href="structXalanDequeConstIteratorTraits.html">XalanDequeConstIteratorTraits</a> |
| 00051 { |
| <a name="l00052"></a><a class="code" href="structXalanDequeConstIteratorTraits.html#s0">00052</a> <font class="keyword">typedef</font> Value value_type; |
| <a name="l00053"></a><a class="code" href="structXalanDequeConstIteratorTraits.html#s1">00053</a> <font class="keyword">typedef</font> <font class="keyword">const</font> Value& reference; |
| <a name="l00054"></a><a class="code" href="structXalanDequeConstIteratorTraits.html#s2">00054</a> <font class="keyword">typedef</font> <font class="keyword">const</font> Value* pointer; |
| <a name="l00055"></a><a class="code" href="structXalanDequeConstIteratorTraits.html#s3">00055</a> <font class="keyword">typedef</font> <font class="keyword">const</font> Value& const_reference; |
| 00056 }; |
| 00057 |
| 00058 template <class XalanDequeTraits, class XalanDeque> |
| <a name="l00059"></a><a class="code" href="structXalanDequeIterator.html">00059</a> <font class="keyword">struct </font><a class="code" href="structXalanDequeIterator.html">XalanDequeIterator</a> |
| 00060 { |
| <a name="l00061"></a><a class="code" href="structXalanDequeIterator.html#s0">00061</a> <font class="keyword">typedef</font> size_t size_type; |
| <a name="l00062"></a><a class="code" href="structXalanDequeIterator.html#s1">00062</a> <font class="keyword">typedef</font> <font class="keyword">typename</font> XalanDequeTraits::value_type value_type; |
| <a name="l00063"></a><a class="code" href="structXalanDequeIterator.html#s2">00063</a> <font class="keyword">typedef</font> <font class="keyword">typename</font> XalanDequeTraits::reference reference; |
| <a name="l00064"></a><a class="code" href="structXalanDequeIterator.html#s3">00064</a> <font class="keyword">typedef</font> <font class="keyword">typename</font> XalanDequeTraits::pointer pointer; |
| <a name="l00065"></a><a class="code" href="structXalanDequeIterator.html#s4">00065</a> <font class="keyword">typedef</font> <font class="keyword">typename</font> XalanDequeTraits::const_reference const_reference; |
| <a name="l00066"></a><a class="code" href="structXalanDequeIterator.html#s5">00066</a> <font class="keyword">typedef</font> ptrdiff_t difference_type; |
| 00067 |
| <a name="l00068"></a><a class="code" href="structXalanDequeIterator.html#s6">00068</a> <font class="keyword">typedef</font> <a class="code" href="structXalanDequeIterator.html">XalanDequeIterator<XalanDequeIteratorTraits<value_type></a>, <a class="code" href="classXalanDeque.html">XalanDeque</a>> <a class="code" href="structXalanDequeIterator.html">Iterator</a>; |
| 00069 |
| <a name="l00070"></a><a class="code" href="structXalanDequeIterator.html#s7">00070</a> <font class="keyword">typedef</font> XALAN_STD_QUALIFIER random_access_iterator_tag iterator_category; |
| 00071 |
| <a name="l00072"></a><a class="code" href="structXalanDequeIterator.html#a0">00072</a> <a class="code" href="structXalanDequeIterator.html#a0">XalanDequeIterator</a>(<a class="code" href="classXalanDeque.html">XalanDeque</a>* deque, |
| 00073 size_type pos) : |
| 00074 m_deque(deque), |
| 00075 m_pos(pos) |
| 00076 { |
| 00077 } |
| 00078 |
| <a name="l00079"></a><a class="code" href="structXalanDequeIterator.html#a1">00079</a> <a class="code" href="structXalanDequeIterator.html#a0">XalanDequeIterator</a>(<font class="keyword">const</font> <a class="code" href="structXalanDequeIterator.html">Iterator</a> & iterator) : |
| 00080 m_deque(iterator.m_deque), |
| 00081 m_pos(iterator.m_pos) |
| 00082 { |
| 00083 } |
| 00084 |
| <a name="l00085"></a><a class="code" href="structXalanDequeIterator.html#a2">00085</a> <a class="code" href="structXalanDequeIterator.html">XalanDequeIterator</a>& <a class="code" href="structXalanDequeIterator.html#a2">operator=</a>(<font class="keyword">const</font> <a class="code" href="structXalanDequeIterator.html">Iterator</a> & iterator)<font class="keyword"></font> |
| 00086 <font class="keyword"> </font>{ |
| 00087 m_deque = iterator.m_deque; |
| 00088 m_pos = iterator.m_pos; |
| 00089 <font class="keywordflow">return</font> *<font class="keyword">this</font>; |
| 00090 } |
| 00091 |
| <a name="l00092"></a><a class="code" href="structXalanDequeIterator.html#a3">00092</a> <a class="code" href="structXalanDequeIterator.html">XalanDequeIterator</a>& <a class="code" href="structXalanDequeIterator.html#a3">operator++</a>()<font class="keyword"></font> |
| 00093 <font class="keyword"> </font>{ |
| 00094 ++m_pos; |
| 00095 <font class="keywordflow">return</font> *<font class="keyword">this</font>; |
| 00096 } |
| 00097 |
| <a name="l00098"></a><a class="code" href="structXalanDequeIterator.html#a4">00098</a> <a class="code" href="structXalanDequeIterator.html">XalanDequeIterator</a> <a class="code" href="structXalanDequeIterator.html#a3">operator++</a>(<font class="keywordtype">int</font>)<font class="keyword"></font> |
| 00099 <font class="keyword"> </font>{ |
| 00100 <a class="code" href="structXalanDequeIterator.html">XalanDequeIterator</a> temp = *<font class="keyword">this</font>; |
| 00101 ++m_pos; |
| 00102 <font class="keywordflow">return</font> temp; |
| 00103 } |
| 00104 |
| <a name="l00105"></a><a class="code" href="structXalanDequeIterator.html#a5">00105</a> <a class="code" href="structXalanDequeIterator.html">XalanDequeIterator</a>& <a class="code" href="structXalanDequeIterator.html#a5">operator--</a>()<font class="keyword"></font> |
| 00106 <font class="keyword"> </font>{ |
| 00107 --m_pos; |
| 00108 <font class="keywordflow">return</font> *<font class="keyword">this</font>; |
| 00109 } |
| 00110 |
| <a name="l00111"></a><a class="code" href="structXalanDequeIterator.html#a6">00111</a> pointer <a class="code" href="structXalanDequeIterator.html#a6">operator-></a>()<font class="keyword"></font> |
| 00112 <font class="keyword"> </font>{ |
| 00113 <font class="keywordflow">return</font> &(*m_deque[m_pos]); |
| 00114 } |
| 00115 |
| <a name="l00116"></a><a class="code" href="structXalanDequeIterator.html#a7">00116</a> reference <a class="code" href="structXalanDequeIterator.html#a7">operator*</a>()<font class="keyword"></font> |
| 00117 <font class="keyword"> </font>{ |
| 00118 <font class="keywordflow">return</font> (*m_deque)[m_pos]; |
| 00119 } |
| 00120 |
| <a name="l00121"></a><a class="code" href="structXalanDequeIterator.html#a8">00121</a> const_reference <a class="code" href="structXalanDequeIterator.html#a7">operator*</a>()<font class="keyword"> const</font> |
| 00122 <font class="keyword"> </font>{ |
| 00123 <font class="keywordflow">return</font> (*m_deque)[m_pos]; |
| 00124 } |
| 00125 |
| <a name="l00126"></a><a class="code" href="structXalanDequeIterator.html#a9">00126</a> <a class="code" href="structXalanDequeIterator.html">XalanDequeIterator</a> <a class="code" href="structXalanDequeIterator.html#a9">operator+</a>(difference_type difference)<font class="keyword"> const</font> |
| 00127 <font class="keyword"> </font>{ |
| 00128 <font class="keywordflow">return</font> <a class="code" href="structXalanDequeIterator.html#a0">XalanDequeIterator</a>(m_deque, m_pos + difference); |
| 00129 } |
| 00130 |
| <a name="l00131"></a><a class="code" href="structXalanDequeIterator.html#a10">00131</a> <a class="code" href="structXalanDequeIterator.html">XalanDequeIterator</a> <a class="code" href="structXalanDequeIterator.html#a10">operator-</a>(difference_type difference)<font class="keyword"> const</font> |
| 00132 <font class="keyword"> </font>{ |
| 00133 <font class="keywordflow">return</font> <a class="code" href="structXalanDequeIterator.html#a0">XalanDequeIterator</a>(m_deque, m_pos - difference); |
| 00134 } |
| 00135 |
| <a name="l00136"></a><a class="code" href="structXalanDequeIterator.html#a11">00136</a> difference_type <a class="code" href="structXalanDequeIterator.html#a10">operator-</a>(<font class="keyword">const</font> <a class="code" href="structXalanDequeIterator.html">XalanDequeIterator</a> &theRhs)<font class="keyword"> const</font> |
| 00137 <font class="keyword"> </font>{ |
| 00138 <font class="keywordflow">return</font> m_pos - theRhs.m_pos; |
| 00139 } |
| 00140 |
| <a name="l00141"></a><a class="code" href="structXalanDequeIterator.html#a12">00141</a> <font class="keywordtype">bool</font> <a class="code" href="structXalanDequeIterator.html#a12">operator==</a>(<font class="keyword">const</font> <a class="code" href="structXalanDequeIterator.html">XalanDequeIterator</a> & theRhs)<font class="keyword"> const</font> |
| 00142 <font class="keyword"> </font>{ |
| 00143 <font class="keywordflow">return</font> (theRhs.m_deque == m_deque) |
| 00144 && theRhs.m_pos == m_pos; |
| 00145 } |
| 00146 |
| <a name="l00147"></a><a class="code" href="structXalanDequeIterator.html#a13">00147</a> <font class="keywordtype">bool</font> <a class="code" href="structXalanDequeIterator.html#a13">operator!=</a>(<font class="keyword">const</font> <a class="code" href="structXalanDequeIterator.html">XalanDequeIterator</a> & theRhs)<font class="keyword"> const</font> |
| 00148 <font class="keyword"> </font>{ |
| 00149 <font class="keywordflow">return</font> !(theRhs == *<font class="keyword">this</font>); |
| 00150 } |
| 00151 |
| <a name="l00152"></a><a class="code" href="structXalanDequeIterator.html#m0">00152</a> <a class="code" href="classXalanDeque.html">XalanDeque</a>* m_deque; |
| <a name="l00153"></a><a class="code" href="structXalanDequeIterator.html#m1">00153</a> size_type m_pos; |
| 00154 }; |
| 00155 |
| 00159 template <class Type, class ConstructionTraits = MemoryManagedConstructionTraits<Type> > |
| <a name="l00160"></a><a class="code" href="classXalanDeque.html">00160</a> <font class="keyword">class </font><a class="code" href="classXalanDeque.html">XalanDeque</a> |
| 00161 { |
| 00162 <font class="keyword">public</font>: |
| 00163 |
| 00164 |
| <a name="l00165"></a><a class="code" href="classXalanDeque.html#s0">00165</a> <font class="keyword">typedef</font> size_t size_type; |
| 00166 |
| <a name="l00167"></a><a class="code" href="classXalanDeque.html#s1">00167</a> <font class="keyword">typedef</font> Type value_type; |
| <a name="l00168"></a><a class="code" href="classXalanDeque.html#s2">00168</a> <font class="keyword">typedef</font> Type& reference; |
| <a name="l00169"></a><a class="code" href="classXalanDeque.html#s3">00169</a> <font class="keyword">typedef</font> <font class="keyword">const</font> Type& const_reference; |
| 00170 |
| <a name="l00171"></a><a class="code" href="classXalanDeque.html#s4">00171</a> <font class="keyword">typedef</font> XalanVector<Type, ConstructionTraits> BlockType; |
| 00172 |
| <a name="l00173"></a><a class="code" href="classXalanDeque.html#s5">00173</a> <font class="keyword">typedef</font> XalanVector<BlockType*> BlockIndexType; |
| 00174 |
| <a name="l00175"></a><a class="code" href="classXalanDeque.html#s6">00175</a> <font class="keyword">typedef</font> <a class="code" href="classXalanDeque.html">XalanDeque<Type, ConstructionTraits></a> <a class="code" href="classXalanDeque.html">ThisType</a>; |
| <a name="l00176"></a><a class="code" href="classXalanDeque.html#s7">00176</a> <font class="keyword">typedef</font> <a class="code" href="structXalanDequeIterator.html">XalanDequeIterator<XalanDequeIteratorTraits<value_type></a>, <a class="code" href="classXalanDeque.html">ThisType</a>> iterator; |
| <a name="l00177"></a><a class="code" href="classXalanDeque.html#s8">00177</a> <font class="keyword">typedef</font> <a class="code" href="structXalanDequeIterator.html">XalanDequeIterator<XalanDequeConstIteratorTraits<value_type></a>, <a class="code" href="classXalanDeque.html">ThisType</a>> const_iterator; |
| 00178 |
| 00179 <font class="preprocessor">#if defined(XALAN_HAS_STD_ITERATORS)</font> |
| 00180 <font class="preprocessor"></font> <font class="keyword">typedef</font> XALAN_STD_QUALIFIER reverse_iterator<iterator> reverse_iterator_; |
| 00181 <font class="keyword">typedef</font> XALAN_STD_QUALIFIER reverse_iterator<const_iterator> const_reverse_iterator_; |
| 00182 <font class="preprocessor">#elif defined(XALAN_RW_NO_CLASS_PARTIAL_SPEC)</font> |
| 00183 <font class="preprocessor"></font> <font class="keyword">typedef</font> XALAN_STD_QUALIFIER reverse_iterator< |
| 00184 iterator, |
| 00185 XALAN_STD_QUALIFIER random_access_iterator_tag, |
| 00186 value_type> reverse_iterator_; |
| 00187 <font class="keyword">typedef</font> XALAN_STD_QUALIFIER reverse_iterator< |
| 00188 const_iterator, |
| 00189 XALAN_STD_QUALIFIER random_access_iterator_tag, |
| 00190 <font class="keyword">const</font> value_type> const_reverse_iterator_; |
| 00191 <font class="preprocessor">#else</font> |
| <a name="l00192"></a><a class="code" href="classXalanDeque.html#s9">00192</a> <font class="preprocessor"></font> <font class="keyword">typedef</font> XALAN_STD_QUALIFIER reverse_iterator<iterator, value_type> reverse_iterator_; |
| <a name="l00193"></a><a class="code" href="classXalanDeque.html#s10">00193</a> <font class="keyword">typedef</font> XALAN_STD_QUALIFIER reverse_iterator<const_iterator, value_type, const_reference> const_reverse_iterator_; |
| 00194 <font class="preprocessor">#endif</font> |
| 00195 <font class="preprocessor"></font> |
| <a name="l00196"></a><a class="code" href="classXalanDeque.html#s11">00196</a> <font class="keyword">typedef</font> reverse_iterator_ reverse_iterator; |
| <a name="l00197"></a><a class="code" href="classXalanDeque.html#s12">00197</a> <font class="keyword">typedef</font> const_reverse_iterator_ const_reverse_iterator; |
| 00198 |
| <a name="l00199"></a><a class="code" href="classXalanDeque.html#a0">00199</a> <a class="code" href="classXalanDeque.html#a0">XalanDeque</a>( |
| 00200 MemoryManagerType& memoryManager, |
| 00201 size_type initialSize = 0, |
| 00202 size_type blockSize = 10) : |
| 00203 m_memoryManager(&memoryManager), |
| 00204 m_blockSize(blockSize), |
| 00205 m_blockIndex(memoryManager, |
| 00206 initialSize / blockSize + (initialSize % blockSize == 0 ? 0 : 1)), |
| 00207 m_freeBlockVector(memoryManager) |
| 00208 { |
| 00209 <font class="keyword">typename</font> ConstructionTraits::Constructor::ConstructableType defaultValue(*m_memoryManager); |
| 00210 |
| 00211 XALAN_STD_QUALIFIER fill_n(XALAN_STD_QUALIFIER back_inserter(*<font class="keyword">this</font>), initialSize, defaultValue.value); |
| 00212 } |
| 00213 |
| <a name="l00214"></a><a class="code" href="classXalanDeque.html#a1">00214</a> <a class="code" href="classXalanDeque.html#a0">XalanDeque</a>(<font class="keyword">const</font> <a class="code" href="classXalanDeque.html">XalanDeque</a>& theRhs, MemoryManagerType& memoryManager) : |
| 00215 m_memoryManager(&memoryManager), |
| 00216 m_blockSize(theRhs.m_blockSize), |
| 00217 m_blockIndex(*theRhs.m_memoryManager, |
| 00218 theRhs.size() / theRhs.m_blockSize + (theRhs.size() % theRhs.m_blockSize == 0 ? 0 : 1)), |
| 00219 m_freeBlockVector(memoryManager) |
| 00220 { |
| 00221 XALAN_STD_QUALIFIER copy(theRhs.<a class="code" href="classXalanDeque.html#a3">begin</a>(), theRhs.<a class="code" href="classXalanDeque.html#a5">end</a>(), XALAN_STD_QUALIFIER back_inserter(*<font class="keyword">this</font>)); |
| 00222 } |
| 00223 |
| 00224 <font class="keyword">static</font> <a class="code" href="classXalanDeque.html">XalanDeque</a>* |
| <a name="l00225"></a><a class="code" href="classXalanDeque.html#d0">00225</a> <a class="code" href="classXalanDeque.html#d0">create</a>( |
| 00226 MemoryManagerType& theManager, |
| 00227 size_type initialSize = 0, |
| 00228 size_type blockSize = 10)<font class="keyword"></font> |
| 00229 <font class="keyword"> </font>{ |
| 00230 <font class="keyword">typedef</font> <a class="code" href="classXalanDeque.html">XalanDeque</a> <a class="code" href="classXalanDeque.html">ThisType</a>; |
| 00231 |
| 00232 XalanMemMgrAutoPtr<ThisType, false> theGuard( theManager , (<a class="code" href="classXalanDeque.html">ThisType</a>*)theManager.allocate(<font class="keyword">sizeof</font>(<a class="code" href="classXalanDeque.html">ThisType</a>))); |
| 00233 |
| 00234 <a class="code" href="classXalanDeque.html">ThisType</a>* theResult = theGuard.get(); |
| 00235 |
| 00236 <font class="keyword">new</font> (theResult) <a class="code" href="classXalanDeque.html#s6">ThisType</a>(theManager, initialSize, blockSize); |
| 00237 |
| 00238 theGuard.release(); |
| 00239 |
| 00240 <font class="keywordflow">return</font> theResult; |
| 00241 } |
| 00242 |
| <a name="l00243"></a><a class="code" href="classXalanDeque.html#a2">00243</a> <a class="code" href="classXalanDeque.html#a2">~XalanDeque</a>()<font class="keyword"></font> |
| 00244 <font class="keyword"> </font>{ |
| 00245 <a class="code" href="classXalanDeque.html#a14">clear</a>(); |
| 00246 <font class="keyword">typename</font> BlockIndexType::iterator iter = m_freeBlockVector.begin(); |
| 00247 |
| 00248 <font class="keywordflow">while</font> (iter != m_freeBlockVector.end()) |
| 00249 { |
| 00250 (*iter)->~XalanVector<Type, ConstructionTraits>(); |
| 00251 <a class="code" href="classXalanDeque.html#b2">deallocate</a>(*iter); |
| 00252 ++iter; |
| 00253 } |
| 00254 } |
| 00255 |
| <a name="l00256"></a><a class="code" href="classXalanDeque.html#a3">00256</a> iterator <a class="code" href="classXalanDeque.html#a3">begin</a>()<font class="keyword"></font> |
| 00257 <font class="keyword"> </font>{ |
| 00258 <font class="keywordflow">return</font> <a class="code" href="classXalanDeque.html#s7">iterator</a>(<font class="keyword">this</font>, 0); |
| 00259 } |
| 00260 |
| <a name="l00261"></a><a class="code" href="classXalanDeque.html#a4">00261</a> const_iterator <a class="code" href="classXalanDeque.html#a3">begin</a>()<font class="keyword"> const</font> |
| 00262 <font class="keyword"> </font>{ |
| 00263 <font class="keywordflow">return</font> <a class="code" href="classXalanDeque.html#s8">const_iterator</a>(const_cast<XalanDeque*>(<font class="keyword">this</font>), 0); |
| 00264 } |
| 00265 |
| <a name="l00266"></a><a class="code" href="classXalanDeque.html#a5">00266</a> iterator <a class="code" href="classXalanDeque.html#a5">end</a>()<font class="keyword"></font> |
| 00267 <font class="keyword"> </font>{ |
| 00268 <font class="keywordflow">return</font> <a class="code" href="classXalanDeque.html#s7">iterator</a>(<font class="keyword">this</font>, <a class="code" href="classXalanDeque.html#a10">size</a>()); |
| 00269 } |
| 00270 |
| <a name="l00271"></a><a class="code" href="classXalanDeque.html#a6">00271</a> const_iterator <a class="code" href="classXalanDeque.html#a5">end</a>()<font class="keyword"> const</font> |
| 00272 <font class="keyword"> </font>{ |
| 00273 <font class="keywordflow">return</font> <a class="code" href="classXalanDeque.html#s8">const_iterator</a>(const_cast<XalanDeque*>(<font class="keyword">this</font>), <a class="code" href="classXalanDeque.html#a10">size</a>()); |
| 00274 } |
| 00275 |
| <a name="l00276"></a><a class="code" href="classXalanDeque.html#a7">00276</a> const_reverse_iterator <a class="code" href="classXalanDeque.html#a7">rbegin</a>()<font class="keyword"> const</font> |
| 00277 <font class="keyword"> </font>{ |
| 00278 <font class="keywordflow">return</font> <a class="code" href="classXalanDeque.html#s12">const_reverse_iterator</a>(<a class="code" href="classXalanDeque.html#a5">end</a>()); |
| 00279 } |
| 00280 |
| <a name="l00281"></a><a class="code" href="classXalanDeque.html#a8">00281</a> const_reverse_iterator <a class="code" href="classXalanDeque.html#a8">rend</a>()<font class="keyword"> const</font> |
| 00282 <font class="keyword"> </font>{ |
| 00283 <font class="keywordflow">return</font> <a class="code" href="classXalanDeque.html#s12">const_reverse_iterator</a>(<a class="code" href="classXalanDeque.html#a3">begin</a>()); |
| 00284 } |
| 00285 |
| <a name="l00286"></a><a class="code" href="classXalanDeque.html#a9">00286</a> <font class="keywordtype">bool</font> <a class="code" href="classXalanDeque.html#a9">empty</a>()<font class="keyword"> const</font> |
| 00287 <font class="keyword"> </font>{ |
| 00288 <font class="keywordflow">return</font> m_blockIndex.empty(); |
| 00289 } |
| 00290 |
| <a name="l00291"></a><a class="code" href="classXalanDeque.html#a10">00291</a> size_type <a class="code" href="classXalanDeque.html#a10">size</a>()<font class="keyword"> const</font> |
| 00292 <font class="keyword"> </font>{ |
| 00293 <font class="keywordflow">if</font> (m_blockIndex.empty()) |
| 00294 { |
| 00295 <font class="keywordflow">return</font> 0; |
| 00296 } |
| 00297 <font class="keywordflow">else</font> |
| 00298 { |
| 00299 <font class="keywordflow">return</font> (m_blockIndex.size() - 1) * m_blockSize |
| 00300 + m_blockIndex.back()->size(); |
| 00301 } |
| 00302 } |
| 00303 |
| <a name="l00304"></a><a class="code" href="classXalanDeque.html#a11">00304</a> value_type& <a class="code" href="classXalanDeque.html#a11">back</a>()<font class="keyword"></font> |
| 00305 <font class="keyword"> </font>{ |
| 00306 <font class="keywordflow">return</font> m_blockIndex.back()->back(); |
| 00307 } |
| 00308 |
| <a name="l00309"></a><a class="code" href="classXalanDeque.html#a12">00309</a> value_type& <a class="code" href="classXalanDeque.html#a12">operator[]</a>(size_type index)<font class="keyword"></font> |
| 00310 <font class="keyword"> </font>{ |
| 00311 BlockType & block = *(m_blockIndex[index / m_blockSize]); |
| 00312 <font class="keywordflow">return</font> block[index % m_blockSize]; |
| 00313 } |
| 00314 |
| <a name="l00315"></a><a class="code" href="classXalanDeque.html#a13">00315</a> <font class="keyword">const</font> value_type& <a class="code" href="classXalanDeque.html#a12">operator[]</a>(size_type index)<font class="keyword"> const</font> |
| 00316 <font class="keyword"> </font>{ |
| 00317 BlockType & block = *(m_blockIndex[index / m_blockSize]); |
| 00318 <font class="keywordflow">return</font> block[index % m_blockSize]; |
| 00319 } |
| 00320 |
| <a name="l00321"></a><a class="code" href="classXalanDeque.html#a14">00321</a> <font class="keywordtype">void</font> <a class="code" href="classXalanDeque.html#a14">clear</a>()<font class="keyword"></font> |
| 00322 <font class="keyword"> </font>{ |
| 00323 <font class="keyword">typename</font> BlockIndexType::iterator iter = m_blockIndex.begin(); |
| 00324 |
| 00325 m_freeBlockVector.reserve(m_freeBlockVector.size() + m_blockIndex.size()); |
| 00326 |
| 00327 <font class="keywordflow">while</font> (iter != m_blockIndex.end()) |
| 00328 { |
| 00329 (*iter)->clear(); |
| 00330 m_freeBlockVector.push_back(*iter); |
| 00331 ++iter; |
| 00332 } |
| 00333 |
| 00334 m_blockIndex.clear(); |
| 00335 } |
| 00336 |
| <a name="l00337"></a><a class="code" href="classXalanDeque.html#a15">00337</a> <font class="keywordtype">void</font> <a class="code" href="classXalanDeque.html#a15">push_back</a>(<font class="keyword">const</font> value_type & value)<font class="keyword"></font> |
| 00338 <font class="keyword"> </font>{ |
| 00339 <font class="keywordflow">if</font> (m_blockIndex.empty() || |
| 00340 m_blockIndex.back()->size() >= m_blockSize) |
| 00341 { |
| 00342 m_blockIndex.push_back(<a class="code" href="classXalanDeque.html#b0">getNewBlock</a>()); |
| 00343 } |
| 00344 |
| 00345 m_blockIndex.back()->push_back(value); |
| 00346 } |
| 00347 |
| <a name="l00348"></a><a class="code" href="classXalanDeque.html#a16">00348</a> <font class="keywordtype">void</font> <a class="code" href="classXalanDeque.html#a16">pop_back</a>()<font class="keyword"></font> |
| 00349 <font class="keyword"> </font>{ |
| 00350 BlockType & lastBlock = *(m_blockIndex.back()); |
| 00351 lastBlock.pop_back(); |
| 00352 <font class="keywordflow">if</font> (lastBlock.empty()) |
| 00353 { |
| 00354 m_freeBlockVector.push_back(&lastBlock); |
| 00355 m_blockIndex.pop_back(); |
| 00356 } |
| 00357 } |
| 00358 |
| <a name="l00359"></a><a class="code" href="classXalanDeque.html#a17">00359</a> <font class="keywordtype">void</font> <a class="code" href="classXalanDeque.html#a17">resize</a>(size_type newSize)<font class="keyword"></font> |
| 00360 <font class="keyword"> </font>{ |
| 00361 <font class="keyword">typename</font> ConstructionTraits::Constructor::ConstructableType defaultValue(*m_memoryManager); |
| 00362 <font class="keywordflow">if</font> (newSize > <a class="code" href="classXalanDeque.html#a10">size</a>()) |
| 00363 { |
| 00364 <font class="keywordflow">for</font> (size_type i = 0; i < newSize - <a class="code" href="classXalanDeque.html#a10">size</a>(); ++i) |
| 00365 { |
| 00366 <a class="code" href="classXalanDeque.html#a15">push_back</a>(defaultValue.value); |
| 00367 } |
| 00368 } |
| 00369 <font class="keywordflow">else</font> |
| 00370 { |
| 00371 <font class="keywordflow">for</font> (size_type i = 0; i < <a class="code" href="classXalanDeque.html#a10">size</a>() - newSize; ++i) |
| 00372 { |
| 00373 <a class="code" href="classXalanDeque.html#a16">pop_back</a>(); |
| 00374 } |
| 00375 } |
| 00376 } |
| 00377 |
| <a name="l00378"></a><a class="code" href="classXalanDeque.html#a18">00378</a> <font class="keywordtype">void</font> <a class="code" href="classXalanDeque.html#a18">swap</a>(<a class="code" href="classXalanDeque.html">XalanDeque</a>& theRhs)<font class="keyword"></font> |
| 00379 <font class="keyword"> </font>{ |
| 00380 MemoryManagerType* tempMemoryManager = m_memoryManager; |
| 00381 m_memoryManager = theRhs.m_memoryManager; |
| 00382 theRhs.m_memoryManager = tempMemoryManager; |
| 00383 |
| 00384 theRhs.m_blockIndex.<a class="code" href="classXalanDeque.html#a18">swap</a>(m_blockIndex); |
| 00385 theRhs.m_freeBlockVector.<a class="code" href="classXalanDeque.html#a18">swap</a>(m_freeBlockVector); |
| 00386 } |
| 00387 |
| <a name="l00388"></a><a class="code" href="classXalanDeque.html#a19">00388</a> <a class="code" href="classXalanDeque.html">XalanDeque</a> & <a class="code" href="classXalanDeque.html#a19">operator=</a>(<font class="keyword">const</font> <a class="code" href="classXalanDeque.html">XalanDeque</a> & theRhs)<font class="keyword"> </font> |
| 00389 <font class="keyword"> </font>{ |
| 00390 <a class="code" href="classXalanDeque.html#a14">clear</a>(); |
| 00391 XALAN_STD_QUALIFIER copy(theRhs.<a class="code" href="classXalanDeque.html#a3">begin</a>(), theRhs.<a class="code" href="classXalanDeque.html#a5">end</a>(), XALAN_STD_QUALIFIER back_inserter(*<font class="keyword">this</font>)); |
| 00392 <font class="keywordflow">return</font> *<font class="keyword">this</font>; |
| 00393 } |
| 00394 |
| 00395 MemoryManagerType& |
| <a name="l00396"></a><a class="code" href="classXalanDeque.html#a20">00396</a> <a class="code" href="classXalanDeque.html#a20">getMemoryManager</a>()<font class="keyword"></font> |
| 00397 <font class="keyword"> </font>{ |
| 00398 assert (m_memoryManager != 0); |
| 00399 |
| 00400 <font class="keywordflow">return</font> *m_memoryManager; |
| 00401 } |
| 00402 <font class="keyword">protected</font>: |
| 00403 |
| <a name="l00404"></a><a class="code" href="classXalanDeque.html#b0">00404</a> BlockType* <a class="code" href="classXalanDeque.html#b0">getNewBlock</a>()<font class="keyword"></font> |
| 00405 <font class="keyword"> </font>{ |
| 00406 BlockType * newBlock; |
| 00407 |
| 00408 <font class="keywordflow">if</font> (m_freeBlockVector.empty()) |
| 00409 { |
| 00410 newBlock = <a class="code" href="classXalanDeque.html#b1">allocate</a>(1); |
| 00411 <font class="keyword">new</font> (&*newBlock) <a class="code" href="classXalanDeque.html#s4">BlockType</a>(*m_memoryManager, m_blockSize); |
| 00412 } |
| 00413 <font class="keywordflow">else</font> |
| 00414 { |
| 00415 newBlock = m_freeBlockVector.back(); |
| 00416 m_freeBlockVector.pop_back(); |
| 00417 } |
| 00418 |
| 00419 assert (newBlock != 0); |
| 00420 |
| 00421 <font class="keywordflow">return</font> newBlock; |
| 00422 } |
| 00423 |
| 00424 BlockType* |
| <a name="l00425"></a><a class="code" href="classXalanDeque.html#b1">00425</a> <a class="code" href="classXalanDeque.html#b1">allocate</a>(size_type size)<font class="keyword"></font> |
| 00426 <font class="keyword"> </font>{ |
| 00427 <font class="keyword">const</font> size_type theBytesNeeded = size * <font class="keyword">sizeof</font>(BlockType); |
| 00428 |
| 00429 BlockType* pointer = (BlockType*)m_memoryManager->allocate(theBytesNeeded); |
| 00430 |
| 00431 assert(pointer != 0); |
| 00432 |
| 00433 <font class="keywordflow">return</font> pointer; |
| 00434 } |
| 00435 |
| 00436 <font class="keywordtype">void</font> |
| <a name="l00437"></a><a class="code" href="classXalanDeque.html#b2">00437</a> <a class="code" href="classXalanDeque.html#b2">deallocate</a>(BlockType* pointer)<font class="keyword"></font> |
| 00438 <font class="keyword"> </font>{ |
| 00439 m_memoryManager->deallocate(pointer); |
| 00440 } |
| 00441 |
| <a name="l00442"></a><a class="code" href="classXalanDeque.html#n0">00442</a> MemoryManagerType* m_memoryManager; |
| <a name="l00443"></a><a class="code" href="classXalanDeque.html#n1">00443</a> <font class="keyword">const</font> size_type m_blockSize; |
| 00444 |
| <a name="l00445"></a><a class="code" href="classXalanDeque.html#n2">00445</a> BlockIndexType m_blockIndex; |
| <a name="l00446"></a><a class="code" href="classXalanDeque.html#n3">00446</a> BlockIndexType m_freeBlockVector; |
| 00447 |
| 00448 <font class="keyword">private</font>: |
| 00449 <font class="comment">// Not implemented</font> |
| 00450 <a class="code" href="classXalanDeque.html#a0">XalanDeque</a>(); |
| 00451 <a class="code" href="classXalanDeque.html#a0">XalanDeque</a>(<font class="keyword">const</font> <a class="code" href="classXalanDeque.html">XalanDeque</a>&); |
| 00452 |
| 00453 }; |
| 00454 |
| 00455 |
| 00456 |
| 00457 XALAN_CPP_NAMESPACE_END |
| 00458 |
| 00459 |
| 00460 |
| 00461 <font class="preprocessor">#endif // XALANDEQUE_HEADER_GUARD_1357924680</font> |
| 00462 <font class="preprocessor"></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>
|