]>
jfr.im git - irc/gameservirc.git/blob - gameserv/list.h
19 ~List(); //deconstructor
20 void insertAtFront( const T
& );
21 void insertAtBack( T
*&);
22 bool removeFromFront( T
& );
23 bool removeFromBack( T
& );
27 ListNode
< T
> *Find( T
* );
28 ListNode
< T
> *First() { return firstPtr
; };
29 ListNode
< T
> *Last() { return lastPtr
; };
31 ListNode
< T
> *firstPtr
;
32 ListNode
< T
> *lastPtr
;
34 ListNode
< T
> *getNewNode ( const T
& );
38 List
<T
>::List() : firstPtr (0), lastPtr (0) {}
46 log("Destroying Nodes");
49 ListNode
<T
> *currentPtr
= firstPtr
, *tempPtr
;
54 currentPtr
= currentPtr
->Next();
57 log("Deleting Memory address: %s", tempPtr
->getData());
63 log("All Nodes destroyed");
69 void List
<T
>::insertAtFront( const T
&value
)
71 ListNode
<T
> *newPtr
= getNewNode ( value
);
75 firstPtr
= lastPtr
= newPtr
;
78 newPtr
->Next
= firstPtr
;
79 firstPtr
->prev
= newPtr
;
85 void List
<T
>::insertAtBack(T
*&value
)
87 ListNode
<T
> *newPtr
= getNewNode(*value
);
91 firstPtr
= lastPtr
= newPtr
;
95 newPtr
->prev
= lastPtr
;
96 lastPtr
->next
= newPtr
;
103 bool List
<T
>::removeFromFront( T
&value
)
109 ListNode
<T
> *tempPtr
= firstPtr
;
111 if ( firstPtr
== lastPtr
)
112 firstPtr
= lastPtr
= 0;
114 firstPtr
= firstPtr
->next
;
116 value
= tempPtr
->getData();
123 bool List
<T
>::removeFromBack( T
&value
)
129 ListNode
<T
> *tempPtr
= lastPtr
;
131 if ( firstPtr
== lastPtr
)
132 lastPtr
= firstPtr
= 0;
134 lastPtr
= lastPtr
->prev
;
136 value
= tempPtr
->getData();
144 bool List
<T
>::isEmpty() const
145 { return firstPtr
== 0 && lastPtr
== 0; }
148 ListNode
<T
> *List
<T
>::getNewNode( const T
&value
)
150 ListNode
<T
> *ptr
= new ListNode
<T
>(value
);
157 ListNode
<T
> *List
<T
>::Find( T
*value
)
159 if (isEmpty()) {return NULL
;}
161 ListNode
<T
> *currentPtr
;
162 currentPtr
= firstPtr
;
165 if (currentPtr
->getData() == value
)
167 currentPtr
= currentPtr
->Next();
174 void List
<T
>::print() const
178 cout
<< "Empty list" << endl
;
182 ListNode
<T
> *currentPtr
;
183 currentPtr
= firstPtr
;
186 cout
<< "aClient: " << *currentPtr
->getData() << flush
;
188 if (currentPtr
->getData()->stats
)
189 cout
<< " Player Name: " << currentPtr
->getData()->stats
->name
190 << " Password: " << currentPtr
->getData()->stats
->password
<< flush
;
192 currentPtr
= currentPtr
->next
;
198 bool List
<T
>::remove(T
*remPtr
)
200 ListNode
<T
> *newPtr
= firstPtr
;
208 testPtr
= newPtr
->getData();
209 if (testPtr
== remPtr
)
211 if (firstPtr
== lastPtr
)
214 log("One Element. Deleting it");
216 firstPtr
= lastPtr
= NULL
;
220 else if (newPtr
!= lastPtr
&& newPtr
!= firstPtr
)
223 log("Many elements, this one is in the middle. Deleting it, linking front to back, and back to front.");
225 newPtr
->prev
->next
= newPtr
->next
;
226 newPtr
->next
->prev
= newPtr
->prev
;
230 else if (newPtr
== lastPtr
)
233 log("This was the last element. Deleting it, and pointing the tail to its previous element.");
235 lastPtr
= newPtr
->prev
;
240 else if (newPtr
== firstPtr
)
243 log("This was the first element. Deleting it, and pointing the head to its next element.");
245 firstPtr
= newPtr
->next
;
251 newPtr
= newPtr
->next
;