#include "listnode.h"
#include "aClient.h"
+
template <class T>
class List {
public:
bool remove( T * );
bool isEmpty() const;
void print() const;
+ ListNode < T > *Find( T * );
ListNode < T > *First() { return firstPtr; };
ListNode < T > *Last() { return lastPtr; };
private:
ListNode<T> *currentPtr = firstPtr, *tempPtr;
- while (currentPtr != 0)
+ while (currentPtr)
{
tempPtr = currentPtr;
- currentPtr = currentPtr->next;
-// if (!tempPtr->getData()->stats || tempPtr->getData()->stats->started == 0)
+ currentPtr = currentPtr->Next();
+ cout << "Deleting Memory address: " << tempPtr->getData() << endl << flush;
+
delete tempPtr;
-// else
-// tempPtr->getData()->stats->started = 0;
}
cout << "All Nodes destroyed" << endl;
}
template <class T>
bool List<T>::isEmpty() const
- { return firstPtr == 0; }
+ { return firstPtr == 0 && lastPtr == 0; }
template <class T>
ListNode<T> *List<T>::getNewNode( const T &value)
return ptr;
}
+template<class T>
+ListNode<T> *List<T>::Find( T *value )
+{
+ if (isEmpty()) {return NULL;}
+
+ ListNode<T> *currentPtr;
+ currentPtr = firstPtr;
+ while (currentPtr)
+ {
+ if (currentPtr->getData() == value)
+ return currentPtr;
+ currentPtr = currentPtr->Next();
+ }
+ return NULL;
+}
template <class T>
void List<T>::print() const
currentPtr = firstPtr;
while (currentPtr)
{
- cout << "aClient: " << *currentPtr->getData();
+ cout << "aClient: " << *currentPtr->getData() << flush;
if (currentPtr->getData()->stats)
- cout << " Player Name: " << currentPtr->getData()->stats->name;
+ cout << " Player Name: " << currentPtr->getData()->stats->name
+ << " Password: " << currentPtr->getData()->stats->password << flush;
cout << endl;
currentPtr = currentPtr->next;
}
- cout << endl;
}
template <class T>
ListNode<T> *newPtr = firstPtr;
T *testPtr;
+ if (isEmpty())
+ return false;
+
while (newPtr)
{
testPtr = newPtr->getData();
{
if (firstPtr == lastPtr)
{
- firstPtr = lastPtr = 0;
+ cout << "One Element. Deleting it" << endl << flush;
+ firstPtr = lastPtr = NULL;
delete newPtr;
return true;
}
else if (newPtr != lastPtr && newPtr != firstPtr)
{
+ cout << "Many elements, this one is in the middle. Deleting it"
+ << ", linking front to back, and back to front." << endl << flush;
newPtr->prev->next = newPtr->next;
newPtr->next->prev = newPtr->prev;
delete newPtr;
}
else if (newPtr == lastPtr)
{
+ cout << "This was the last element. Deleting it, and pointing the tail to "
+ << "its previous element." << endl << flush;
lastPtr = newPtr->prev;
lastPtr->next = 0;
delete newPtr;
}
else if (newPtr == firstPtr)
{
+ cout << "This was the first element. Deleting it, and pointing the head to "
+ << "its next element." << endl << flush;
firstPtr = newPtr->next;
firstPtr->prev = 0;
delete newPtr;