blob: 95466366e921737a0f4650eabe1e75bd5d1b8a31 [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>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 &lt;<a class="code" href="PlatformDefinitions_8hpp.html">xalanc/Include/PlatformDefinitions.hpp</a>&gt;</font>
00028
00029
00030
00031 <font class="preprocessor">#include &lt;<a class="code" href="XalanVector_8hpp.html">xalanc/Include/XalanVector.hpp</a>&gt;</font>
00032 <font class="preprocessor">#include &lt;<a class="code" href="XalanMemoryManagement_8hpp.html">xalanc/Include/XalanMemoryManagement.hpp</a>&gt;</font>
00033
00034
00035
00036 XALAN_CPP_NAMESPACE_BEGIN
00037
00038
00039
00040 template &lt;class Value&gt;
<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&amp; 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&amp; const_reference;
00047 };
00048
00049 template &lt;class Value&gt;
<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&amp; 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&amp; const_reference;
00056 };
00057
00058 template &lt;class XalanDequeTraits, class XalanDeque&gt;
<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&lt;XalanDequeIteratorTraits&lt;value_type&gt;</a>, <a class="code" href="classXalanDeque.html">XalanDeque</a>&gt; <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> &amp; 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>&amp; <a class="code" href="structXalanDequeIterator.html#a2">operator=</a>(<font class="keyword">const</font> <a class="code" href="structXalanDequeIterator.html">Iterator</a> &amp; 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>&amp; <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>&amp; <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-&gt;</a>()<font class="keyword"></font>
00112 <font class="keyword"> </font>{
00113 <font class="keywordflow">return</font> &amp;(*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> &amp;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> &amp; theRhs)<font class="keyword"> const</font>
00142 <font class="keyword"> </font>{
00143 <font class="keywordflow">return</font> (theRhs.m_deque == m_deque)
00144 &amp;&amp; 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> &amp; 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 &lt;class Type, class ConstructionTraits = MemoryManagedConstructionTraits&lt;Type&gt; &gt;
<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&amp; 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&amp; const_reference;
00170
<a name="l00171"></a><a class="code" href="classXalanDeque.html#s4">00171</a> <font class="keyword">typedef</font> XalanVector&lt;Type, ConstructionTraits&gt; BlockType;
00172
<a name="l00173"></a><a class="code" href="classXalanDeque.html#s5">00173</a> <font class="keyword">typedef</font> XalanVector&lt;BlockType*&gt; 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&lt;Type, ConstructionTraits&gt;</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&lt;XalanDequeIteratorTraits&lt;value_type&gt;</a>, <a class="code" href="classXalanDeque.html">ThisType</a>&gt; 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&lt;XalanDequeConstIteratorTraits&lt;value_type&gt;</a>, <a class="code" href="classXalanDeque.html">ThisType</a>&gt; 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&lt;iterator&gt; reverse_iterator_;
00181 <font class="keyword">typedef</font> XALAN_STD_QUALIFIER reverse_iterator&lt;const_iterator&gt; 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&lt;
00184 iterator,
00185 XALAN_STD_QUALIFIER random_access_iterator_tag,
00186 value_type&gt; reverse_iterator_;
00187 <font class="keyword">typedef</font> XALAN_STD_QUALIFIER reverse_iterator&lt;
00188 const_iterator,
00189 XALAN_STD_QUALIFIER random_access_iterator_tag,
00190 <font class="keyword">const</font> value_type&gt; 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&lt;iterator, value_type&gt; 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&lt;const_iterator, value_type, const_reference&gt; 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&amp; memoryManager,
00201 size_type initialSize = 0,
00202 size_type blockSize = 10) :
00203 m_memoryManager(&amp;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>&amp; theRhs, MemoryManagerType&amp; memoryManager) :
00215 m_memoryManager(&amp;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&amp; 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&lt;ThisType, false&gt; 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)-&gt;~XalanVector&lt;Type, ConstructionTraits&gt;();
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&lt;XalanDeque*&gt;(<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&lt;XalanDeque*&gt;(<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()-&gt;size();
00301 }
00302 }
00303
<a name="l00304"></a><a class="code" href="classXalanDeque.html#a11">00304</a> value_type&amp; <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()-&gt;back();
00307 }
00308
<a name="l00309"></a><a class="code" href="classXalanDeque.html#a12">00309</a> value_type&amp; <a class="code" href="classXalanDeque.html#a12">operator[]</a>(size_type index)<font class="keyword"></font>
00310 <font class="keyword"> </font>{
00311 BlockType &amp; 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&amp; <a class="code" href="classXalanDeque.html#a12">operator[]</a>(size_type index)<font class="keyword"> const</font>
00316 <font class="keyword"> </font>{
00317 BlockType &amp; 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)-&gt;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 &amp; value)<font class="keyword"></font>
00338 <font class="keyword"> </font>{
00339 <font class="keywordflow">if</font> (m_blockIndex.empty() ||
00340 m_blockIndex.back()-&gt;size() &gt;= m_blockSize)
00341 {
00342 m_blockIndex.push_back(<a class="code" href="classXalanDeque.html#b0">getNewBlock</a>());
00343 }
00344
00345 m_blockIndex.back()-&gt;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 &amp; lastBlock = *(m_blockIndex.back());
00351 lastBlock.pop_back();
00352 <font class="keywordflow">if</font> (lastBlock.empty())
00353 {
00354 m_freeBlockVector.push_back(&amp;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 &gt; <a class="code" href="classXalanDeque.html#a10">size</a>())
00363 {
00364 <font class="keywordflow">for</font> (size_type i = 0; i &lt; 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 &lt; <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>&amp; 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> &amp; <a class="code" href="classXalanDeque.html#a19">operator=</a>(<font class="keyword">const</font> <a class="code" href="classXalanDeque.html">XalanDeque</a> &amp; 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&amp;
<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> (&amp;*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-&gt;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-&gt;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>&amp;);
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 &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>