19 #if !defined(XALANLIST_HEADER_GUARD_1357924680)
20 #define XALANLIST_HEADER_GUARD_1357924680
46 template <
class Value>
54 template <
class Value>
62 template<
class XalanListTraits,
class Node>
66 typedef typename XalanListTraits::reference
reference;
67 typedef typename XalanListTraits::pointer
pointer;
81 currentNode(theRhs.currentNode)
87 currentNode = currentNode->next;
93 Node& origNode = *currentNode;
94 currentNode = currentNode->next;
100 currentNode = currentNode->prev;
106 Node* node = currentNode;
107 while (decrement > 0)
117 return currentNode->value;
122 return ¤tNode->value;
154 template <
class Type>
198 MemoryManager& theManager) :
199 m_memoryManager(&theManager),
212 destroyNode(pos++.node());
215 Node * freeNode = m_freeListHeadPtr;
216 while (freeNode != 0)
219 deallocate(freeNode);
223 deallocate(m_listHead);
230 assert(m_memoryManager != 0 );
232 return *m_memoryManager;
238 assert(m_memoryManager != 0 );
240 return *m_memoryManager;
246 return iterator(*(getListHead().next));
273 const_reverse_iterator
285 const_reverse_iterator
308 while (item != end())
319 return (begin() == end()) != 0;
325 constructNode(data, end());
331 constructNode(data, begin());
349 return iterator(constructNode(value,pos));
355 assert(pos != end());
356 freeNode(pos.
node());
369 assert(m_memoryManager == list.m_memoryManager);
374 Node & toInsertNode = toInsert.node();
380 toInsertNode.
next = &posNode;
383 posNode.
prev = &toInsertNode;
398 assert(m_memoryManager == list.m_memoryManager);
400 if (toInsertFirst != toInsertLast)
403 Node & toInsertFirstNode = toInsertFirst.node();
404 Node & toInsertLastNode = *(toInsertLast.
node().prev);
409 toInsertFirstNode.
prev = posNode.
prev;
410 toInsertLastNode.
next = &posNode;
412 posNode.
prev->
next = &toInsertFirstNode;
413 posNode.
prev = &toInsertLastNode;
423 freeNode(pos++.node());
440 Node * nextFreeNode = 0;
442 if (m_freeListHeadPtr != 0)
444 newNode = m_freeListHeadPtr;
445 nextFreeNode = m_freeListHeadPtr->
next;
449 m_freeListHeadPtr = allocate(1);
450 newNode = m_freeListHeadPtr;
453 Constructor::construct(&newNode->
value, data, *m_memoryManager);
457 pos.
node().prev->next = newNode;
458 pos.
node().prev = newNode;
460 m_freeListHeadPtr = nextFreeNode;
472 node.
next = m_freeListHeadPtr;
473 m_freeListHeadPtr = &node;
478 assert(&node != m_listHead);
487 m_listHead = allocate(1);
488 m_listHead->next = m_listHead;
489 m_listHead->prev = m_listHead;
497 return const_cast<XalanList*
>(
this)->getListHead();
505 assert(m_memoryManager != 0);
507 void*
pointer = m_memoryManager->allocate(theBytesNeeded);
518 assert(m_memoryManager != 0);
520 m_memoryManager->deallocate(
pointer);
#define XALAN_CPP_NAMESPACE
Xalan-C++ namespace, including major and minor version.
Xalan implementation of a doubly linked list.
void deallocate(Node *pointer)
std::reverse_iterator< iterator > reverse_iterator_
XalanListIteratorBase< XalanListConstIteratorTraits< value_type >, Node > const_iterator
XalanListIteratorBase< XalanListIteratorTraits< value_type >, Node > iterator
void freeNode(Node &node)
Node * allocate(size_type size)
MemoryManager & getMemoryManager()
const_reverse_iterator rbegin() const
const value_type * const_pointer
XalanList< value_type > ThisType
const_reverse_iterator rend() const
void push_back(const value_type &data)
void splice(iterator pos, ThisType &list, iterator toInsertFirst, iterator toInsertLast)
reverse_iterator rbegin()
const_iterator end() const
void destroyNode(Node &node)
const MemoryManager & getMemoryManager() const
const value_type & const_reference
reverse_iterator_ reverse_iterator
std::reverse_iterator< const_iterator > const_reverse_iterator_
Node & constructNode(const value_type &data, iterator pos)
void swap(ThisType &theRHS)
const_reverse_iterator_ const_reverse_iterator
MemoryManagedConstructionTraits< value_type >::Constructor Constructor
void splice(iterator pos, ThisType &list, iterator toInsert)
MemoryManager * m_memoryManager
XalanList(MemoryManager &theManager)
void push_front(const value_type &data)
iterator insert(const iterator &pos, const value_type &value)
const_iterator begin() const
Node & getListHead() const
void erase(XalanDOMString &theString)
Remove all elements from target string.
void swap(XalanVector< Type > &theLHS, XalanVector< Type > &theRHS)
bool operator==(const XalanVector< Type > &theLHS, const XalanVector< Type > &theRHS)
XalanListIteratorBase(Node &node)
std::bidirectional_iterator_tag iterator_category
bool operator!=(const XalanListIteratorBase &theRhs) const
XalanListIteratorBase operator--()
XalanListTraits::value_type value_type
reference operator*() const
XalanListIteratorBase(const iterator &theRhs)
XalanListIteratorBase operator-(difference_type decrement) const
pointer operator->() const
bool operator==(const XalanListIteratorBase &theRhs) const
ptrdiff_t difference_type
const XalanListIteratorBase & operator=(const XalanListIteratorBase &theRhs)
XalanListIteratorBase operator++()
XalanListIteratorBase< XalanListIteratorTraits< value_type >, Node > iterator
XalanListTraits::reference reference
XalanListIteratorBase operator++(int)
XalanListTraits::pointer pointer
Node(const value_type &theValue, Node &prevNode, Node &nextNode)