19 #if !defined(XALANDEQUE_HEADER_GUARD_1357924680)
20 #define XALANDEQUE_HEADER_GUARD_1357924680
34 XALAN_CPP_NAMESPACE_BEGIN
38 template <
class Value>
47 template <
class Value>
56 template <
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 &&
174 theRHS.m_pos == m_pos;
180 return !(theRHS == *
this);
186 return m_pos < theRHS.m_pos;
199 template <
class Type,
class ConstructionTraits = MemoryManagedConstructionTraits<Type> >
218 #if defined(XALAN_HAS_STD_ITERATORS)
221 #elif defined(XALAN_RW_NO_CLASS_PARTIAL_SPEC)
252 MemoryManager& memoryManager,
253 size_type initialSize = 0,
254 size_type blockSize = 10) :
255 m_memoryManager(&memoryManager),
256 m_blockSize(blockSize),
257 m_blockIndex(memoryManager,
258 initialSize / blockSize + (initialSize % blockSize == 0 ? 0 : 1)),
259 m_freeBlockVector(memoryManager)
261 const ConstructableType defaultValue(*m_memoryManager);
263 XALAN_USING_STD(fill_n)
264 XALAN_USING_STD(back_inserter)
267 back_inserter(*
this),
274 MemoryManager& theMemoryManager) :
275 m_memoryManager(&theMemoryManager),
276 m_blockSize(theRHS.m_blockSize),
277 m_blockIndex(*theRHS.m_memoryManager,
278 theRHS.
size() / theRHS.m_blockSize + (theRHS.
size() % theRHS.m_blockSize == 0 ? 0 : 1)),
279 m_freeBlockVector(theMemoryManager)
281 XALAN_USING_STD(copy)
282 XALAN_USING_STD(back_inserter)
287 back_inserter(*
this));
292 MemoryManager& theManager,
293 size_type initialSize = 0,
294 size_type blockSize = 10)
298 ThisType*
const theResult =
299 new (theGuard.get())
ThisType(theManager, initialSize, blockSize);
308 destroyBlockList(m_freeBlockVector);
310 destroyBlockList(m_blockIndex);
337 const_reverse_iterator
343 const_reverse_iterator
352 return m_blockIndex.
empty();
358 if (m_blockIndex.
empty())
364 return (m_blockIndex.
size() - 1) * m_blockSize
365 + m_blockIndex.
back()->size();
372 return m_blockIndex.
back()->back();
378 BlockType& block = *m_blockIndex[index / m_blockSize];
380 return block[index % m_blockSize];
386 BlockType& block = *m_blockIndex[index / m_blockSize];
388 return block[index % m_blockSize];
396 m_freeBlockVector.
reserve(m_freeBlockVector.
size() + m_blockIndex.
size());
398 while (iter != m_blockIndex.
end())
405 m_blockIndex.
clear();
411 if (m_blockIndex.
empty() ||
412 m_blockIndex.
back()->size() >= m_blockSize)
417 m_blockIndex.
back()->push_back(value);
425 BlockType& lastBlock = *m_blockIndex.
back();
428 if (lastBlock.
empty())
438 const ConstructableType defaultValue(*m_memoryManager);
440 if (newSize >
size())
442 for (size_type i = 0; i < newSize -
size(); ++i)
449 for (size_type i = 0; i <
size() - newSize; ++i)
459 MemoryManager*
const temp = m_memoryManager;
460 m_memoryManager = theRHS.m_memoryManager;
461 theRHS.m_memoryManager = temp;
463 theRHS.m_blockIndex.
swap(m_blockIndex);
464 theRHS.m_freeBlockVector.
swap(m_freeBlockVector);
472 XALAN_USING_STD(copy)
473 XALAN_USING_STD(back_inserter)
480 back_inserter(*
this));
489 assert (m_memoryManager != 0);
491 return *m_memoryManager;
504 if (m_freeBlockVector.
empty())
514 m_blockIndex.
back() = m_freeBlockVector.
back();
521 assert(m_blockIndex.
back() != 0);
525 destroyBlockList(BlockIndexType& theBlockIndex)
528 theBlockIndex.begin();
530 while (iter != theBlockIndex.end())
546 MemoryManager* m_memoryManager;
548 const size_type m_blockSize;
550 BlockIndexType m_blockIndex;
551 BlockIndexType m_freeBlockVector;
562 XALAN_CPP_NAMESPACE_END
566 #endif // XALANDEQUE_HEADER_GUARD_1357924680
XalanVector< BlockType * > BlockIndexType
XalanDequeIterator(const Iterator &iterator)
XalanDeque(MemoryManager &memoryManager, size_type initialSize=0, size_type blockSize=10)
bool operator==(const XalanDequeIterator &theRHS) const
XalanDequeIterator< XalanDequeIteratorTraits< value_type >, XalanDeque > Iterator
bool operator<(const XalanDequeIterator &theRHS) const
const_iterator end() const
XalanDequeIterator & operator--()
const_reference operator*() const
void resize(size_type newSize)
Traits::const_reference const_reference
XalanDequeIterator< XalanDequeConstIteratorTraits< value_type >, ThisType > const_iterator
Traits::value_type value_type
XalanDeque & operator=(const XalanDeque &theRHS)
XalanDequeIterator operator++(int)
void push_back(const value_type &value)
XalanDequeIterator operator-(difference_type difference) const
static XalanDeque * create(MemoryManager &theManager, size_type initialSize=0, size_type blockSize=10)
XalanVector< Type, ConstructionTraits > BlockType
void push_back(const value_type &data)
XalanDequeIterator & operator=(const Iterator &iterator)
value_type & operator[](size_type index)
ptrdiff_t difference_type
const Value & const_reference
const value_type & operator[](size_type index) const
reverse_iterator_ reverse_iterator
void reserve(size_type theSize)
Traits::reference reference
const Value & const_reference
const Type & const_reference
XalanDeque< Type, ConstructionTraits > ThisType
void XalanDestroy(Type &theArg)
const_reverse_iterator_ const_reverse_iterator
XALAN_STD_QUALIFIER reverse_iterator< const_iterator, value_type, const_reference > const_reverse_iterator_
XALAN_STD_QUALIFIER reverse_iterator< iterator, value_type > reverse_iterator_
void swap(XalanDeque &theRHS)
XALAN_STD_QUALIFIER random_access_iterator_tag iterator_category
difference_type operator-(const XalanDequeIterator &theRHS) const
const_iterator begin() const
XalanDequeIterator< XalanDequeIteratorTraits< value_type >, ThisType > iterator
MemoryManager & getMemoryManager()
XalanDeque(const XalanDeque &theRHS, MemoryManager &theMemoryManager)
XalanDequeIterator(XalanDeque *deque, size_type pos)
XalanDequeIterator operator+(difference_type difference) const
void swap(ThisType &theOther)
XalanDequeIterator & operator++()
const_reverse_iterator rbegin() const
bool operator!=(const XalanDequeIterator &theRHS) const
const_reverse_iterator rend() const
ConstructionTraits::Constructor Constructor
Type * XalanConstruct(MemoryManager &theMemoryManager, Type *&theInstance)
Constructor::ConstructableType ConstructableType
Xalan implementation of deque.