30 #define VDKListIterator VDKListiterator
37 template <
class T>
class VDKItem
43 VDKItem(T* x): x(x), next((VDKItem<T>*) 0),prev((VDKItem<T>*)0)
67 VDKItem<T>* head,* tail;
71 void addToTail(VDKItem<T>* i)
73 if(! head) head = tail = i;
74 else { tail->next = i; i->prev=tail; tail = i; }
78 void addToHead(VDKItem<T>* i)
80 if(! head) head = tail = i;
81 else { head->prev = i; i->next = head; head = i; }
85 void insertVDKItem(VDKItem<T>* i,
int pos);
88 VDKItem<T>* fetch(
int n);
96 head = tail = (VDKItem<T>* ) 0;
103 if(
this != &l) {
flush(); assign(l); }
132 addToTail(
new VDKItem<T>(t));
142 addToHead(
new VDKItem<T>(t));
153 insertVDKItem(
new VDKItem<T>(t),pos);
163 T* listhead() {
return fetch(0)->x; }
189 VDKItem<T>* Head() {
return head; }
193 VDKItem<T>* Tail() {
return tail; }
203 VDKItem<T> *head,*tail,*p;
241 operator int() {
return p != (VDKItem<T>*) 0; }
249 VDKItem<T>* Next(VDKItem<T> *t) {
return t->next;}
253 VDKItem<T>* Head() {
return head; }
257 T* Now(VDKItem<T> * t) {
return t->x; }
274 while(ci) { add(ci.current()); ci++; }
284 if(n >= count || n < 0)
return (VDKItem<T>*) 0;
285 VDKItem<T>* p = head;
286 for( ;p && (t < n) ; t++, p = p->next);
298 VDKItem<T>* p = head;
299 for(; p && (p->x != x);p = p->next,t++) ;
330 for(p = head; p && (p->x != x); p = p->next) ;
331 return p ? p->x : (T*) 0;
352 if(head != (VDKItem<T>*) 0) head->prev = (VDKItem<T>*) 0;
353 else tail = (VDKItem<T>*) 0;
356 cur->prev->next = cur->next;
357 if(cur != tail) cur->next->prev = cur->prev;
359 else tail = cur->prev;
372 VDKItem<T>* p = NULL;
373 for(p = head; p && t < pos; p=p->next,t++)
Provides a reference semantic double linked list.
Definition: dlist.h:65
VDKList()
Definition: dlist.h:112
int at(T *x)
Definition: dlist.h:296
T * operator[](int n)
Definition: dlist.h:172
~VDKList()
Definition: dlist.h:123
void insertAt(T *t, int pos)
Definition: dlist.h:150
int remove(T *x)
Definition: dlist.h:341
void add(T *t)
Definition: dlist.h:129
int size()
Definition: dlist.h:181
void flush()
Definition: dlist.h:306
T * find(T *x)
Definition: dlist.h:328
Provides a VDKList iterator.
Definition: dlist.h:201
void operator++()
Definition: dlist.h:217
void last()
Definition: dlist.h:237
void operator--(int)
Definition: dlist.h:229
void operator--()
Definition: dlist.h:225
T * current()
Definition: dlist.h:245
void operator++(int)
Definition: dlist.h:221
VDKListiterator(VDKList< T > &c)
Definition: dlist.h:209
void first()
Definition: dlist.h:233
void restart()
Definition: dlist.h:261
virtual ~VDKListiterator()
Definition: dlist.h:213