]>
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) {}
40 cout
<< "Destroying Nodes" << endl
;
42 ListNode
<T
> *currentPtr
= firstPtr
, *tempPtr
;
47 currentPtr
= currentPtr
->Next();
48 cout
<< "Deleting Memory address: " << tempPtr
->getData() << endl
<< flush
;
52 cout
<< "All Nodes destroyed" << endl
;
57 void List
<T
>::insertAtFront( const T
&value
)
59 ListNode
<T
> *newPtr
= getNewNode ( value
);
63 firstPtr
= lastPtr
= newPtr
;
66 newPtr
->Next
= firstPtr
;
67 firstPtr
->prev
= newPtr
;
73 void List
<T
>::insertAtBack(T
*&value
)
75 ListNode
<T
> *newPtr
= getNewNode(*value
);
79 firstPtr
= lastPtr
= newPtr
;
83 newPtr
->prev
= lastPtr
;
84 lastPtr
->next
= newPtr
;
91 bool List
<T
>::removeFromFront( T
&value
)
97 ListNode
<T
> *tempPtr
= firstPtr
;
99 if ( firstPtr
== lastPtr
)
100 firstPtr
= lastPtr
= 0;
102 firstPtr
= firstPtr
->next
;
104 value
= tempPtr
->getData();
111 bool List
<T
>::removeFromBack( T
&value
)
117 ListNode
<T
> *tempPtr
= lastPtr
;
119 if ( firstPtr
== lastPtr
)
120 lastPtr
= firstPtr
= 0;
122 lastPtr
= lastPtr
->prev
;
124 value
= tempPtr
->getData();
132 bool List
<T
>::isEmpty() const
133 { return firstPtr
== 0 && lastPtr
== 0; }
136 ListNode
<T
> *List
<T
>::getNewNode( const T
&value
)
138 ListNode
<T
> *ptr
= new ListNode
<T
>(value
);
145 ListNode
<T
> *List
<T
>::Find( T
*value
)
147 if (isEmpty()) {return NULL
;}
149 ListNode
<T
> *currentPtr
;
150 currentPtr
= firstPtr
;
153 if (currentPtr
->getData() == value
)
155 currentPtr
= currentPtr
->Next();
161 void List
<T
>::print() const
165 cout
<< "Empty list" << endl
;
169 ListNode
<T
> *currentPtr
;
170 currentPtr
= firstPtr
;
173 cout
<< "aClient: " << *currentPtr
->getData() << flush
;
175 if (currentPtr
->getData()->stats
)
176 cout
<< " Player Name: " << currentPtr
->getData()->stats
->name
177 << " Password: " << currentPtr
->getData()->stats
->password
<< flush
;
179 currentPtr
= currentPtr
->next
;
185 bool List
<T
>::remove(T
*remPtr
)
187 ListNode
<T
> *newPtr
= firstPtr
;
195 testPtr
= newPtr
->getData();
196 if (testPtr
== remPtr
)
198 if (firstPtr
== lastPtr
)
200 cout
<< "One Element. Deleting it" << endl
<< flush
;
201 firstPtr
= lastPtr
= NULL
;
205 else if (newPtr
!= lastPtr
&& newPtr
!= firstPtr
)
207 cout
<< "Many elements, this one is in the middle. Deleting it"
208 << ", linking front to back, and back to front." << endl
<< flush
;
209 newPtr
->prev
->next
= newPtr
->next
;
210 newPtr
->next
->prev
= newPtr
->prev
;
214 else if (newPtr
== lastPtr
)
216 cout
<< "This was the last element. Deleting it, and pointing the tail to "
217 << "its previous element." << endl
<< flush
;
218 lastPtr
= newPtr
->prev
;
223 else if (newPtr
== firstPtr
)
225 cout
<< "This was the first element. Deleting it, and pointing the head to "
226 << "its next element." << endl
<< flush
;
227 firstPtr
= newPtr
->next
;
233 newPtr
= newPtr
->next
;