]>
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 // if (!tempPtr->getData()->stats || tempPtr->getData()->stats->started == 0)
49 cout
<< "Deleting Memory address: " << tempPtr
->getData() << endl
<< flush
;
53 // tempPtr->getData()->stats->started = 0;
55 cout
<< "All Nodes destroyed" << endl
;
60 void List
<T
>::insertAtFront( const T
&value
)
62 ListNode
<T
> *newPtr
= getNewNode ( value
);
66 firstPtr
= lastPtr
= newPtr
;
69 newPtr
->Next
= firstPtr
;
70 firstPtr
->prev
= newPtr
;
76 void List
<T
>::insertAtBack(T
*&value
)
78 ListNode
<T
> *newPtr
= getNewNode(*value
);
82 firstPtr
= lastPtr
= newPtr
;
86 newPtr
->prev
= lastPtr
;
87 lastPtr
->next
= newPtr
;
94 bool List
<T
>::removeFromFront( T
&value
)
100 ListNode
<T
> *tempPtr
= firstPtr
;
102 if ( firstPtr
== lastPtr
)
103 firstPtr
= lastPtr
= 0;
105 firstPtr
= firstPtr
->next
;
107 value
= tempPtr
->getData();
114 bool List
<T
>::removeFromBack( T
&value
)
120 ListNode
<T
> *tempPtr
= lastPtr
;
122 if ( firstPtr
== lastPtr
)
123 lastPtr
= firstPtr
= 0;
125 lastPtr
= lastPtr
->prev
;
127 value
= tempPtr
->getData();
135 bool List
<T
>::isEmpty() const
136 { return firstPtr
== 0 && lastPtr
== 0; }
139 ListNode
<T
> *List
<T
>::getNewNode( const T
&value
)
141 ListNode
<T
> *ptr
= new ListNode
<T
>(value
);
148 ListNode
<T
> *List
<T
>::Find( T
*value
)
150 if (isEmpty()) {return NULL
;}
152 ListNode
<T
> *currentPtr
;
153 currentPtr
= firstPtr
;
156 if (currentPtr
->getData() == value
)
158 currentPtr
= currentPtr
->Next();
164 void List
<T
>::print() const
168 cout
<< "Empty list" << endl
;
172 ListNode
<T
> *currentPtr
;
173 currentPtr
= firstPtr
;
176 cout
<< "aClient: " << *currentPtr
->getData() << flush
;
178 if (currentPtr
->getData()->stats
)
179 cout
<< " Player Name: " << currentPtr
->getData()->stats
->name
180 << " Password: " << currentPtr
->getData()->stats
->password
<< flush
;
182 currentPtr
= currentPtr
->next
;
188 bool List
<T
>::remove(T
*remPtr
)
190 ListNode
<T
> *newPtr
= firstPtr
;
198 testPtr
= newPtr
->getData();
199 if (testPtr
== remPtr
)
201 if (firstPtr
== lastPtr
)
203 cout
<< "One Element. Deleting it" << endl
<< flush
;
204 firstPtr
= lastPtr
= NULL
;
208 else if (newPtr
!= lastPtr
&& newPtr
!= firstPtr
)
210 cout
<< "Many elements, this one is in the middle. Deleting it"
211 << ", linking front to back, and back to front." << endl
<< flush
;
212 newPtr
->prev
->next
= newPtr
->next
;
213 newPtr
->next
->prev
= newPtr
->prev
;
217 else if (newPtr
== lastPtr
)
219 cout
<< "This was the last element. Deleting it, and pointing the tail to "
220 << "its previous element." << endl
<< flush
;
221 lastPtr
= newPtr
->prev
;
226 else if (newPtr
== firstPtr
)
228 cout
<< "This was the first element. Deleting it, and pointing the head to "
229 << "its next element." << endl
<< flush
;
230 firstPtr
= newPtr
->next
;
236 newPtr
= newPtr
->next
;