]>
jfr.im git - irc/gameservirc.git/blob - gameserv/list.h
19 ~List(); //deconstructor
20 T
*insertAtFront( const T
& );
21 T
*insertAtBack( T
*&);
22 ListNode
<T
> *insertAtBack_RLN( T
*&);
23 bool removeFromFront( T
& );
24 bool removeFromBack( T
& );
26 ListNode
< T
> *remove( T
* );
33 ListNode
< T
> *Find( T
* );
34 ListNode
< T
> *First() { return firstPtr
; };
35 ListNode
< T
> *Last() { return lastPtr
; };
37 ListNode
< T
> *firstPtr
;
38 ListNode
< T
> *lastPtr
;
40 ListNode
< T
> *getNewNode ( const T
& );
44 List
<T
>::List() : firstPtr (0), lastPtr (0) {}
47 void List
<T
>::deleteNodes()
51 ListNode
<T
> *it
= firstPtr
, *tempPtr
;
67 T
*List
<T
>::insertAtFront( const T
&value
)
69 ListNode
<T
> *newPtr
= getNewNode ( value
);
73 firstPtr
= lastPtr
= newPtr
;
76 newPtr
->Next
= firstPtr
;
77 firstPtr
->prev
= newPtr
;
80 return firstPtr
->getData();
84 T
*List
<T
>::insertAtBack(T
*&value
)
86 ListNode
<T
> *newPtr
= getNewNode(*value
);
90 firstPtr
= lastPtr
= newPtr
;
94 newPtr
->prev
= lastPtr
;
95 lastPtr
->next
= newPtr
;
98 return lastPtr
->getData();
102 ListNode
<T
> *List
<T
>::insertAtBack_RLN(T
*&value
)
104 ListNode
<T
> *newPtr
= getNewNode(*value
);
108 firstPtr
= lastPtr
= newPtr
;
112 newPtr
->prev
= lastPtr
;
113 lastPtr
->next
= newPtr
;
121 bool List
<T
>::removeFromFront( T
&value
)
127 ListNode
<T
> *tempPtr
= firstPtr
;
129 if ( firstPtr
== lastPtr
)
130 firstPtr
= lastPtr
= 0;
132 firstPtr
= firstPtr
->next
;
134 value
= tempPtr
->getData();
141 bool List
<T
>::removeFromBack( T
&value
)
147 ListNode
<T
> *tempPtr
= lastPtr
;
149 if ( firstPtr
== lastPtr
)
150 lastPtr
= firstPtr
= 0;
152 lastPtr
= lastPtr
->prev
;
154 value
= tempPtr
->getData();
162 bool List
<T
>::isEmpty() const
163 { return firstPtr
== 0 && lastPtr
== 0; }
166 ListNode
<T
> *List
<T
>::getNewNode( const T
&value
)
168 ListNode
<T
> *ptr
= new ListNode
<T
>(value
);
175 ListNode
<T
> *List
<T
>::Find( T
*value
)
177 if (isEmpty()) {return NULL
;}
179 ListNode
<T
> *currentPtr
;
180 currentPtr
= firstPtr
;
183 cout
<< currentPtr
->getData() << endl
<< value
<< endl
;
184 if (currentPtr
->getData() == value
)
186 currentPtr
= currentPtr
->Next();
193 void List
<T
>::print() const
197 cout
<< "Empty list" << endl
;
201 ListNode
<T
> *currentPtr
;
202 currentPtr
= firstPtr
;
206 cout << "aClient: " << *currentPtr->getData() << flush;
208 if (currentPtr->getData()->stats)
209 cout << " Player Name: " << currentPtr->getData()->stats->name
210 << " Password: " << currentPtr->getData()->stats->password << flush;
213 cout
<< currentPtr
->getData()->getString() << endl
;
214 currentPtr
= currentPtr
->next
;
220 bool List
<T
>::del(T
*remPtr
)
222 ListNode
<T
> *removed
= remove( remPtr
);
232 ListNode
<T
> *List
<T
>::remove(T
*remPtr
)
234 ListNode
<T
> *newPtr
= firstPtr
;
242 testPtr
= newPtr
->getData();
243 if (testPtr
== remPtr
)
245 if (firstPtr
== lastPtr
)
248 log("One Element. Deleting it");
250 firstPtr
= lastPtr
= NULL
;
253 else if (newPtr
!= lastPtr
&& newPtr
!= firstPtr
)
256 log("Many elements, this one is in the middle. Deleting it, linking front to back, and back to front.");
258 newPtr
->prev
->next
= newPtr
->next
;
259 newPtr
->next
->prev
= newPtr
->prev
;
262 else if (newPtr
== lastPtr
)
265 log("This was the last element. Deleting it, and pointing the tail to its previous element.");
267 lastPtr
= newPtr
->prev
;
271 else if (newPtr
== firstPtr
)
274 log("This was the first element. Deleting it, and pointing the head to its next element.");
276 firstPtr
= newPtr
->next
;
281 newPtr
= newPtr
->next
;