19#if !defined(XALANDEQUE_HEADER_GUARD_1357924680)
20#define XALANDEQUE_HEADER_GUARD_1357924680
56template <
class Traits,
class XalanDeque>
91 m_deque(iterator.m_deque),
103 m_deque = iterator.m_deque;
104 m_pos = iterator.m_pos;
137 return &(*m_deque[m_pos]);
143 return (*m_deque)[m_pos];
149 return (*m_deque)[m_pos];
167 return m_pos -
theRHS.m_pos;
173 return theRHS.m_deque == m_deque &&
180 return !(
theRHS == *
this);
186 return m_pos <
theRHS.m_pos;
199template <
class Type,
class ConstructionTraits = MemoryManagedConstructionTraits<Type> >
240 using std::back_inserter;
252 m_blockSize(
theRHS.m_blockSize),
253 m_blockIndex(*
theRHS.m_memoryManager,
258 using std::back_inserter;
284 destroyBlockList(m_freeBlockVector);
286 destroyBlockList(m_blockIndex);
313 const_reverse_iterator
319 const_reverse_iterator
328 return m_blockIndex.empty();
334 if (m_blockIndex.empty())
340 return (m_blockIndex.size() - 1) * m_blockSize
341 + m_blockIndex.back()->size();
348 return m_blockIndex.back()->back();
356 return block[index % m_blockSize];
364 return block[index % m_blockSize];
372 m_freeBlockVector.reserve(m_freeBlockVector.size() + m_blockIndex.size());
374 while (
iter != m_blockIndex.end())
377 m_freeBlockVector.push_back(*
iter);
381 m_blockIndex.clear();
387 if (m_blockIndex.empty() ||
388 m_blockIndex.back()->size() >= m_blockSize)
393 m_blockIndex.back()->push_back(value);
407 m_blockIndex.pop_back();
435 MemoryManager*
const temp = m_memoryManager;
436 m_memoryManager =
theRHS.m_memoryManager;
439 theRHS.m_blockIndex.swap(m_blockIndex);
440 theRHS.m_freeBlockVector.swap(m_freeBlockVector);
449 using std::back_inserter;
465 assert (m_memoryManager != 0);
467 return *m_memoryManager;
478 m_blockIndex.push_back(0);
480 if (m_freeBlockVector.empty())
490 m_blockIndex.back() = m_freeBlockVector.back();
494 m_freeBlockVector.pop_back();
497 assert(m_blockIndex.back() != 0);
501 destroyBlockList(BlockIndexType& theBlockIndex)
503 typename BlockIndexType::iterator iter =
504 theBlockIndex.begin();
506 while (iter != theBlockIndex.end())
522 MemoryManager* m_memoryManager;
526 BlockIndexType m_blockIndex;
527 BlockIndexType m_freeBlockVector;
533 XalanDeque(
const XalanDeque&);
#define XALAN_CPP_NAMESPACE
Xalan-C++ namespace, including major and minor version.
ptrdiff_t difference_type
XalanDequeIterator & operator--()
bool operator!=(const XalanDequeIterator &theRHS) const
bool operator==(const XalanDequeIterator &theRHS) const
XalanDequeIterator(const Iterator &iterator)
XalanDequeIterator(XalanDeque *deque, size_type pos)
XalanDequeIterator operator+(difference_type difference) const
XalanDequeIterator & operator++()
std::random_access_iterator_tag iterator_category
difference_type operator-(const XalanDequeIterator &theRHS) const
Traits::value_type value_type
XalanDequeIterator operator-(difference_type difference) const
XalanDequeIterator & operator=(const Iterator &iterator)
XalanDequeIterator operator++(int)
Traits::const_reference const_reference
Traits::reference reference
XalanDequeIterator< XalanDequeIteratorTraits< value_type >, XalanDeque > Iterator
const_reference operator*() const
Xalan implementation of deque.
XalanDeque & operator=(const XalanDeque &theRHS)
value_type & operator[](size_type index)
static XalanDeque * create(MemoryManager &theManager, size_type initialSize=0, size_type blockSize=10)
XalanVector< BlockType * > BlockIndexType
void push_back(const value_type &value)
Constructor::ConstructableType ConstructableType
XalanDeque(MemoryManager &memoryManager, size_type initialSize=0, size_type blockSize=10)
XalanDequeIterator< XalanDequeIteratorTraits< value_type >, ThisType > iterator
const_iterator begin() const
const_reverse_iterator_ const_reverse_iterator
void resize(size_type newSize)
reverse_iterator_ reverse_iterator
XalanDequeIterator< XalanDequeConstIteratorTraits< value_type >, ThisType > const_iterator
const_reverse_iterator rbegin() const
const value_type & operator[](size_type index) const
ConstructionTraits::Constructor Constructor
std::reverse_iterator< const_iterator > const_reverse_iterator_
XalanDeque< Type, ConstructionTraits > ThisType
const Type & const_reference
XalanDeque(const XalanDeque &theRHS, MemoryManager &theMemoryManager)
const_iterator end() const
void swap(XalanDeque &theRHS)
XalanVector< Type, ConstructionTraits > BlockType
MemoryManager & getMemoryManager()
std::reverse_iterator< iterator > reverse_iterator_
const_reverse_iterator rend() const
MemMgrAutoPtrData release()
void clear(XalanDOMString &theString)
Remove all elements from target string.
Type * XalanConstruct(MemoryManager &theMemoryManager, Type *&theInstance)
void XalanDestroy(Type &theArg)
const Value & const_reference
const Value & const_reference