]>
jfr.im git - irc/gameservirc.git/blob - gameserv/list.h
17 ~List(); //deconstructor
18 void insertAtFront( const T
& );
19 void insertAtBack( T
*&);
20 bool removeFromFront( T
& );
21 bool removeFromBack( T
& );
25 ListNode
< T
> *Find( T
* );
26 ListNode
< T
> *First() { return firstPtr
; };
27 ListNode
< T
> *Last() { return lastPtr
; };
29 ListNode
< T
> *firstPtr
;
30 ListNode
< T
> *lastPtr
;
32 ListNode
< T
> *getNewNode ( const T
& );
36 List
<T
>::List() : firstPtr (0), lastPtr (0) {}
44 log("Destroying Nodes");
47 ListNode
<T
> *currentPtr
= firstPtr
, *tempPtr
;
52 currentPtr
= currentPtr
->Next();
55 log("Deleting Memory address: %s", tempPtr
->getData());
61 log("All Nodes destroyed");
67 void List
<T
>::insertAtFront( const T
&value
)
69 ListNode
<T
> *newPtr
= getNewNode ( value
);
73 firstPtr
= lastPtr
= newPtr
;
76 newPtr
->Next
= firstPtr
;
77 firstPtr
->prev
= newPtr
;
83 void List
<T
>::insertAtBack(T
*&value
)
85 ListNode
<T
> *newPtr
= getNewNode(*value
);
89 firstPtr
= lastPtr
= newPtr
;
93 newPtr
->prev
= lastPtr
;
94 lastPtr
->next
= newPtr
;
101 bool List
<T
>::removeFromFront( T
&value
)
107 ListNode
<T
> *tempPtr
= firstPtr
;
109 if ( firstPtr
== lastPtr
)
110 firstPtr
= lastPtr
= 0;
112 firstPtr
= firstPtr
->next
;
114 value
= tempPtr
->getData();
121 bool List
<T
>::removeFromBack( T
&value
)
127 ListNode
<T
> *tempPtr
= lastPtr
;
129 if ( firstPtr
== lastPtr
)
130 lastPtr
= firstPtr
= 0;
132 lastPtr
= lastPtr
->prev
;
134 value
= tempPtr
->getData();
142 bool List
<T
>::isEmpty() const
143 { return firstPtr
== 0 && lastPtr
== 0; }
146 ListNode
<T
> *List
<T
>::getNewNode( const T
&value
)
148 ListNode
<T
> *ptr
= new ListNode
<T
>(value
);
155 ListNode
<T
> *List
<T
>::Find( T
*value
)
157 if (isEmpty()) {return NULL
;}
159 ListNode
<T
> *currentPtr
;
160 currentPtr
= firstPtr
;
163 if (currentPtr
->getData() == value
)
165 currentPtr
= currentPtr
->Next();
172 void List
<T
>::print() const
176 cout
<< "Empty list" << endl
;
180 ListNode
<T
> *currentPtr
;
181 currentPtr
= firstPtr
;
184 cout
<< "aClient: " << *currentPtr
->getData() << flush
;
186 if (currentPtr
->getData()->stats
)
187 cout
<< " Player Name: " << currentPtr
->getData()->stats
->name
188 << " Password: " << currentPtr
->getData()->stats
->password
<< flush
;
190 currentPtr
= currentPtr
->next
;
197 bool List
<T
>::remove(T
*remPtr
)
199 ListNode
<T
> *newPtr
= firstPtr
;
207 testPtr
= newPtr
->getData();
208 if (testPtr
== remPtr
)
210 if (firstPtr
== lastPtr
)
213 log("One Element. Deleting it");
215 firstPtr
= lastPtr
= NULL
;
219 else if (newPtr
!= lastPtr
&& newPtr
!= firstPtr
)
222 log("Many elements, this one is in the middle. Deleting it, linking front to back, and back to front.");
224 newPtr
->prev
->next
= newPtr
->next
;
225 newPtr
->next
->prev
= newPtr
->prev
;
229 else if (newPtr
== lastPtr
)
232 log("This was the last element. Deleting it, and pointing the tail to its previous element.");
234 lastPtr
= newPtr
->prev
;
239 else if (newPtr
== firstPtr
)
242 log("This was the first element. Deleting it, and pointing the head to its next element.");
244 firstPtr
= newPtr
->next
;
250 newPtr
= newPtr
->next
;