57 template<
class E>
class List;
58 template<
class E>
class ListPure;
59 template<
class E>
class ListIterator;
60 template<
class E>
class ListConstIterator;
407 return (pX->m_next) ? pX->m_next :
m_head;
417 return (pX->m_prev) ? pX->m_prev :
m_tail;
427 return (pX->m_prev) ? pX->m_prev :
m_tail;
437 if (
pos-- == 0)
break;
448 if (
pos-- == 0)
break;
510 while(pX != 0 && pY != 0) {
511 if(pX->
m_x != pY->m_x)
516 return (pX == 0 && pY == 0);
528 m_head = m_head->
m_prev = pX;
559 if (pYnext) pYnext->
m_prev = pX;
564 if (pYprev) pYprev->
m_next = pX;
579 if (pYprev) pYprev->
m_next = pX;
593 if (pYnext) pYnext->
m_prev = pX;
650 ListElement<E> *pX = it, *pPrev = pX->m_prev, *pNext = pX->m_next;
652 if (pPrev) pPrev->m_next = pNext;
654 if (pNext) pNext->m_prev = pPrev;
666 std::swap(pX->m_next,pY->m_next);
667 std::swap(pX->m_prev,pY->m_prev);
669 if(pX->m_next == pX) {
670 pX->m_next = pY; pY->m_prev = pX;
672 if(pX->m_prev == pX) {
673 pX->m_prev = pY; pY->m_next = pX;
676 if(pX->m_prev) pX->m_prev->m_next = pX;
679 if(pY->m_prev) pY->m_prev->m_next = pY;
682 if(pX->m_next) pX->m_next->m_prev = pX;
685 if(pY->m_next) pY->m_next->m_prev = pY;
696 ListElement<E> *pX = it, *pPrev = pX->m_prev, *pNext = pX->m_next;
701 if (pPrev) pPrev->m_next = pNext;
702 if (pNext) pNext->m_prev = pPrev;
717 ListElement<E> *pX = it, *pPrev = pX->m_prev, *pNext = pX->m_next;
722 if (pPrev) pPrev->m_next = pNext;
724 if (pNext) pNext->m_prev = pPrev;
738 ListElement<E> *pX = it, *pPrev = pX->m_prev, *pNext = pX->m_next;
741 if(pX == pY || pPrev == pY)
return;
744 if (pPrev) pPrev->m_next = pNext;
746 if (pNext) pNext->m_prev = pPrev;
750 (pX->m_prev = pY)->m_next = pX;
751 if (pYnext) pYnext->
m_prev = pX;
762 ListElement<E> *pX = it, *pPrev = pX->m_prev, *pNext = pX->m_next;
765 if(pX == pY || pNext == pY)
return;
768 if (pPrev) pPrev->m_next = pNext;
770 if (pNext) pNext->m_prev = pPrev;
774 (pX->m_next = pY)->m_prev = pX;
775 if (pYprev) pYprev->
m_next = pX;
788 if (pPrev) pPrev->m_next = pNext;
790 if (pNext) pNext->m_prev = pPrev;
809 if (pPrev) pPrev->m_next = pNext;
811 if (pNext) pNext->m_prev = pPrev;
831 if (pPrev) pPrev->m_next = pNext;
833 if (pNext) pNext->m_prev = pPrev;
838 (pX->
m_prev = pY)->m_next = pX;
839 if (pYnext) pYnext->
m_prev = pX;
853 if (pPrev) pPrev->m_next = pNext;
855 if (pNext) pNext->m_prev = pPrev;
860 (pX->
m_next = pY)->m_prev = pX;
861 if (pYprev) pYprev->
m_next = pX;
918 if (&L1 !=
this) L1.
clear();
919 if (&L2 !=
this) L2.
clear();
940 if (
this != &L1 &&
this != &L2) {
989 #if (_MSC_VER == 1100)
1014 template<
class COMPARER>
1038 if(*i == e)
return x;
1043 template<
class COMPARER>
1044 int search (
const E& e,
const COMPARER &comp)
const {
1047 if(comp.equal(*i,e))
return x;
1089 #define forall_listiterators(type, it, L) \
1090 for(ListConstIterator< type > it = (L).begin(); it.valid(); ++it)
1097 #define forall_rev_listiterators(type, it, L) \
1098 for(ListConstIterator< type > it = (L).rbegin(); it.valid(); --it)
1105 #define forall_nonconst_listiterators(type, it, L) \
1106 for(ListIterator< type > it = (L).begin(); it.valid(); ++it)
1113 #define forall_rev_nonconst_listiterators(type, it, L) \
1114 for(ListIterator< type > it = (L).rbegin(); it.valid(); --it)
1121 #define forall_slistiterators(type, it, L) \
1122 for(SListConstIterator< type > it = (L).begin(); it.valid(); ++it)
1129 #define forall_nonconst_slistiterators(type, it, L) \
1130 for(SListIterator< type > it = (L).begin(); it.valid(); ++it)
1296 if(pX->
m_x != pY->m_x)
1476 int countL =
m_count, countL1 = 0;
1481 L2.
m_count = countL - countL1;
1503 template<
class COMPARER>
1524 template<
class COMPARER>
1525 int search (
const E& e,
const COMPARER &comp)
const {
1538 if (m_head == m_tail)
return;
1543 for (pX = m_head; pX; pX = pX->
m_next) {
1546 tail[i] = ((pX->
m_prev = tail[i])->m_next = pX);
1548 head[i] = tail[i] = pX;
1552 for (
int i = l; i <= h; i++) {
1556 (pY->
m_next = pX)->m_prev = pY;
1558 (m_head = pX)->
m_prev = 0;
1577 for (pX = m_head; pX; pX = pX->
m_next)
1582 for (i = 1; i <= n; i++) {
1600 for(++pX; pX.valid(); ++pX)
1614 ostream &operator<<(ostream &os, const ListPure<E> &L)
1622 ostream &operator<<(ostream &os, const List<E> &L)
1624 return os << L.getListPure();