1#ifndef __DCL_LIST_T_H__
2#error "Never include <dcl/__ListT-GCC.h> directly; use <dcl/ListT.h> instead."
7#if __DCL_HAVE_THIS_FILE__
8 static const char_t __szListT_h__[] =
__T(
"dcl/__ListT-GCC.h");
10 #define __THIS_FILE__ __szListT_h__
13template<
typename ELEMENT>
29 Iterator(
const Iterator& _it);
31 Iterator& operator++();
32 Iterator operator++(
int);
33 Iterator& operator--();
34 Iterator operator--(
int);
38 friend class List<ELEMENT>;
39 friend class ConstIterator;
46 ConstIterator(
const NodeBase* _pNode);
47 ConstIterator(
const ConstIterator& _it);
48 ConstIterator(
const Iterator& _it);
49 ConstIterator&
operator=(
const ConstIterator& _it);
50 ConstIterator& operator++();
51 ConstIterator operator++(
int);
52 ConstIterator& operator--();
53 ConstIterator operator--(
int);
54 const ELEMENT& operator*();
57 class ReverseConstIterator;
63 ReverseIterator(
const ReverseIterator& _it);
64 ReverseIterator&
operator=(
const ReverseIterator& _it);
65 ReverseIterator& operator++();
66 ReverseIterator operator++(
int);
67 ReverseIterator& operator--();
68 ReverseIterator operator--(
int);
72 friend class List<ELEMENT>;
73 friend class ReverseConstIterator;
79 ReverseConstIterator();
80 ReverseConstIterator(
const NodeBase* _pNode);
81 ReverseConstIterator(
const ReverseConstIterator& _it);
82 ReverseConstIterator(
const ReverseIterator& _it);
83 ReverseConstIterator&
operator=(
const ReverseConstIterator& _it);
84 ReverseConstIterator& operator++();
85 ReverseConstIterator operator++(
int);
86 ReverseConstIterator& operator--();
87 ReverseConstIterator operator--(
int);
88 const ELEMENT& operator*();
98 ConstIterator
end()
const;
103 ReverseConstIterator
rend()
const;
108 Iterator
insert(Iterator _pos,
const ELEMENT& _element);
109 void insert(Iterator _pos, ConstIterator _first, ConstIterator _last);
114 List<ELEMENT>& _other, Iterator _otherFirst, Iterator _otherLast);
131 size_t size(ConstIterator _first, ConstIterator _last)
const;
133 void move(Iterator posTo, Iterator _first, Iterator _last);
141template<
typename ELEMENT>
143List<ELEMENT>::Iterator::Iterator()
148template<
typename ELEMENT>
156template<
typename ELEMENT>
161 __pNode = _it.__pNode;
164template<
typename ELEMENT>
170 __pNode = _it.__pNode;
174template<
typename ELEMENT>
180 __pNode = __pNode->pNext;
184template<
typename ELEMENT>
190 NodeBase* pSaveNode = __pNode;
191 __pNode = __pNode->pNext;
192 return Iterator(pSaveNode);
195template<
typename ELEMENT>
201 __pNode = __pNode->pPrev;
205template<
typename ELEMENT>
211 NodeBase* pSaveNode = __pNode;
212 __pNode = __pNode->pPrev;
213 return Iterator(pSaveNode);
216template<
typename ELEMENT>
222 return ((ListNode*)__pNode)->data;
227template<
typename ELEMENT>
234template<
typename ELEMENT>
242template<
typename ELEMENT>
247 __pNode = _it.__pNode;
250template<
typename ELEMENT>
255 __pNode = _it.__pNode;
258template<
typename ELEMENT>
264 __pNode = _it.__pNode;
268template<
typename ELEMENT>
274 __pNode = __pNode->pNext;
278template<
typename ELEMENT>
284 const NodeBase* pSaveNode = __pNode;
285 __pNode = __pNode->pNext;
286 return ConstIterator(pSaveNode);
289template<
typename ELEMENT>
295 __pNode = __pNode->pPrev;
299template<
typename ELEMENT>
305 const NodeBase* pSaveNode = __pNode;
306 __pNode = __pNode->pPrev;
307 return ConstIterator(pSaveNode);
310template<
typename ELEMENT>
316 return ((ListNode*)__pNode)->data;
321template<
typename ELEMENT>
328template<
typename ELEMENT>
336template<
typename ELEMENT>
341 __pNode = _it.__pNode;
344template<
typename ELEMENT>
350 __pNode = _it.__pNode;
354template<
typename ELEMENT>
360 __pNode = __pNode->pPrev;
364template<
typename ELEMENT>
370 NodeBase* pSaveNode = __pNode;
371 __pNode = __pNode->pPrev;
372 return ReverseIterator(pSaveNode);
375template<
typename ELEMENT>
381 __pNode = __pNode->pNext;
385template<
typename ELEMENT>
391 NodeBase* pSaveNode = __pNode;
392 __pNode = __pNode->pNext;
393 return ReverseIterator(pSaveNode);
396template<
typename ELEMENT>
402 return ((ListNode*)__pNode)->data;
407template<
typename ELEMENT>
414template<
typename ELEMENT>
422template<
typename ELEMENT>
427 __pNode = _it.__pNode;
430template<
typename ELEMENT>
435 __pNode = _it.__pNode;
438template<
typename ELEMENT>
444 __pNode = _it.__pNode;
448template<
typename ELEMENT>
454 __pNode = __pNode->pPrev;
458template<
typename ELEMENT>
464 const NodeBase* pSaveNode = __pNode;
465 __pNode = __pNode->pPrev;
466 return ReverseConstIterator(pSaveNode);
469template<
typename ELEMENT>
475 __pNode = __pNode->pNext;
479template<
typename ELEMENT>
485 const NodeBase* pSaveNode = __pNode;
486 __pNode = __pNode->pNext;
487 return ReverseConstIterator(pSaveNode);
490template<
typename ELEMENT>
496 return ((ListNode*)__pNode)->data;
501template<
typename ELEMENT>
509template<
typename ELEMENT>
511typename List<ELEMENT>::ConstIterator
517template<
typename ELEMENT>
519typename List<ELEMENT>::Iterator
525template<
typename ELEMENT>
527typename List<ELEMENT>::Iterator
533template<
typename ELEMENT>
535typename List<ELEMENT>::ReverseConstIterator
541template<
typename ELEMENT>
543typename List<ELEMENT>::ReverseConstIterator
549template<
typename ELEMENT>
551typename List<ELEMENT>::ReverseIterator
557template<
typename ELEMENT>
559typename List<ELEMENT>::ReverseIterator
565template<
typename ELEMENT>
573template<
typename ELEMENT>
581template<
typename ELEMENT>
590template<
typename ELEMENT>
599template<
typename ELEMENT>
612template<
typename ELEMENT>
615 __DCL_NAMESPACE_STRING __S(
List),
620template<
typename ELEMENT>
626template<
typename ELEMENT>
633template<
typename ELEMENT>
641template<
typename ELEMENT>
655template<
typename ELEMENT>
671template<
typename ELEMENT>
684template<
typename ELEMENT>
688 ListNode* pNode = (ListNode*) malloc(
sizeof(ListNode));
693#if __DCL_HAVE_ALLOC_DEBUG
697 new(&(pNode->data)) ELEMENT;
699#if __DCL_HAVE_ALLOC_DEBUG
700#define new __DCL_DEBUG_NEW
703 pNode->data = _element;
707template<
typename ELEMENT>
711 _pNode->data.~ELEMENT();
715template<
typename ELEMENT>
716typename List<ELEMENT>::Iterator
721 pNewNode->pNext = _pos.
__pNode;
727 return (ListNode*)pNewNode;
730template<
typename ELEMENT>
734 for(; _first != _last; _first++)
740template<
typename ELEMENT>
744 ListNode* pNodeTemp =
NULL;
748 pNodeTemp = (ListNode*)pNode;
749 pNode = pNode->
pNext;
757template<
typename ELEMENT>
758typename List<ELEMENT>::Iterator
762 ListNode* pNodeTemp = (ListNode*)_pos.
__pNode;
764 pNodeTemp->pPrev->pNext = pNodeTemp->pNext;
765 pNodeTemp->pNext->pPrev = pNodeTemp->pPrev;
768 return (ListNode*)pNext;
771template<
typename ELEMENT>
781template<
typename ELEMENT>
792template<
typename ELEMENT>
809template<
typename ELEMENT>
812 List<ELEMENT>& _other, Iterator _otherFirst, Iterator _otherLast)
814 size_t nMoveCount =
size((ListNode*)(_otherFirst.
__pNode),
815 (ListNode*)(_otherLast.
__pNode));
817 _other.
__size -= nMoveCount;
819 move(_pos, _otherFirst, _otherLast);
822template<
typename ELEMENT>
827 for(; _first != _last; _first++)
832#if __DCL_HAVE_THIS_FILE__
834 #define __THIS_FILE__ __T(__FILE__)
#define DECLARE_CLASSINFO(class_name)
#define CLASSINFO(class_name)
#define __DCL_ASSERT(expr)
List< ELEMENT > & addHead(const ELEMENT &_element)
ConstIterator end() const
void destroyNode(ListNode *_pNode)
size_t size(ConstIterator _first, ConstIterator _last) const
void insert(Iterator _pos, ConstIterator _first, ConstIterator _last)
ListNode * createNode(const ELEMENT &_element)
void move(Iterator posTo, Iterator _first, Iterator _last)
List(const List< ELEMENT > &_src)
void splice(Iterator _pos, List< ELEMENT > &_other, Iterator _otherFirst, Iterator _otherLast)
ReverseConstIterator rend() const
Iterator insert(Iterator _pos, const ELEMENT &_element)
const List< ELEMENT > & operator=(const List< ELEMENT > &_src)
List< ELEMENT > & add(const ELEMENT &_element)
Iterator erase(Iterator _pos)
ConstIterator begin() const
ReverseConstIterator rbegin() const
List< ELEMENT > & addTail(const ELEMENT &_element)
virtual const std::type_info & typeInfo() const