]>
jfr.im git - irc/gameservirc.git/blob - gameserv/list.h
14 ~List(); //deconstructor
15 void insertAtFront( const T
& );
16 void insertAtBack( T
*&);
17 bool removeFromFront( T
& );
18 bool removeFromBack( T
& );
22 ListNode
< T
> *Find( T
* );
23 ListNode
< T
> *First() { return firstPtr
; };
24 ListNode
< T
> *Last() { return lastPtr
; };
26 ListNode
< T
> *firstPtr
;
27 ListNode
< T
> *lastPtr
;
29 ListNode
< T
> *getNewNode ( const T
& );
33 List
<T
>::List() : firstPtr (0), lastPtr (0) {}
41 log("Destroying Nodes");
44 ListNode
<T
> *currentPtr
= firstPtr
, *tempPtr
;
49 currentPtr
= currentPtr
->Next();
52 log("Deleting Memory address: %s", tempPtr
->getData());
58 log("All Nodes destroyed");
64 void List
<T
>::insertAtFront( const T
&value
)
66 ListNode
<T
> *newPtr
= getNewNode ( value
);
70 firstPtr
= lastPtr
= newPtr
;
73 newPtr
->Next
= firstPtr
;
74 firstPtr
->prev
= newPtr
;
80 void List
<T
>::insertAtBack(T
*&value
)
82 ListNode
<T
> *newPtr
= getNewNode(*value
);
86 firstPtr
= lastPtr
= newPtr
;
90 newPtr
->prev
= lastPtr
;
91 lastPtr
->next
= newPtr
;
98 bool List
<T
>::removeFromFront( T
&value
)
104 ListNode
<T
> *tempPtr
= firstPtr
;
106 if ( firstPtr
== lastPtr
)
107 firstPtr
= lastPtr
= 0;
109 firstPtr
= firstPtr
->next
;
111 value
= tempPtr
->getData();
118 bool List
<T
>::removeFromBack( T
&value
)
124 ListNode
<T
> *tempPtr
= lastPtr
;
126 if ( firstPtr
== lastPtr
)
127 lastPtr
= firstPtr
= 0;
129 lastPtr
= lastPtr
->prev
;
131 value
= tempPtr
->getData();
139 bool List
<T
>::isEmpty() const
140 { return firstPtr
== 0 && lastPtr
== 0; }
143 ListNode
<T
> *List
<T
>::getNewNode( const T
&value
)
145 ListNode
<T
> *ptr
= new ListNode
<T
>(value
);
152 ListNode
<T
> *List
<T
>::Find( T
*value
)
154 if (isEmpty()) {return NULL
;}
156 ListNode
<T
> *currentPtr
;
157 currentPtr
= firstPtr
;
160 if (currentPtr
->getData() == value
)
162 currentPtr
= currentPtr
->Next();
169 void List
<T
>::print() const
173 cout
<< "Empty list" << endl
;
177 ListNode
<T
> *currentPtr
;
178 currentPtr
= firstPtr
;
181 cout
<< "aClient: " << *currentPtr
->getData() << flush
;
183 if (currentPtr
->getData()->stats
)
184 cout
<< " Player Name: " << currentPtr
->getData()->stats
->name
185 << " Password: " << currentPtr
->getData()->stats
->password
<< flush
;
187 currentPtr
= currentPtr
->next
;
194 bool List
<T
>::remove(T
*remPtr
)
196 ListNode
<T
> *newPtr
= firstPtr
;
204 testPtr
= newPtr
->getData();
205 if (testPtr
== remPtr
)
207 if (firstPtr
== lastPtr
)
210 log("One Element. Deleting it");
212 firstPtr
= lastPtr
= NULL
;
216 else if (newPtr
!= lastPtr
&& newPtr
!= firstPtr
)
219 log("Many elements, this one is in the middle. Deleting it, linking front to back, and back to front.");
221 newPtr
->prev
->next
= newPtr
->next
;
222 newPtr
->next
->prev
= newPtr
->prev
;
226 else if (newPtr
== lastPtr
)
229 log("This was the last element. Deleting it, and pointing the tail to its previous element.");
231 lastPtr
= newPtr
->prev
;
236 else if (newPtr
== firstPtr
)
239 log("This was the first element. Deleting it, and pointing the head to its next element.");
241 firstPtr
= newPtr
->next
;
247 newPtr
= newPtr
->next
;