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++)