X-Git-Url: https://jfr.im/git/irc/gameservirc.git/blobdiff_plain/fb37ecc77caa85e78ea60e0ed9aa37ccaa3c2c5c..c260a8d7699447c74d9a9ee8912582cc8814cec2:/gameserv/list.h diff --git a/gameserv/list.h b/gameserv/list.h index 944035d..d49c0d9 100644 --- a/gameserv/list.h +++ b/gameserv/list.h @@ -6,22 +6,29 @@ #include "listnode.h" #include "aClient.h" #include "extern.h" +#include "options.h" using std::cout; using std::endl; +using std::flush; template class List { public: List(); //constructor ~List(); //deconstructor - void insertAtFront( const T & ); - void insertAtBack( T *&); + T *insertAtFront( const T & ); + T *insertAtBack( T *&); + ListNode *insertAtBack_RLN( T *&); bool removeFromFront( T & ); bool removeFromBack( T & ); - bool remove( T * ); + bool del( T *); + ListNode < T > *remove( T * ); bool isEmpty() const; + #ifdef DEBUGMODE void print() const; + #endif + ListNode < T > *Find( T * ); ListNode < T > *First() { return firstPtr; }; ListNode < T > *Last() { return lastPtr; }; @@ -64,7 +71,7 @@ List::~List() } template -void List::insertAtFront( const T &value ) +T *List::insertAtFront( const T &value ) { ListNode *newPtr = getNewNode ( value ); @@ -77,10 +84,29 @@ void List::insertAtFront( const T &value ) firstPtr->prev = newPtr; firstPtr = newPtr; } + return firstPtr->getData(); +} + +template +T *List::insertAtBack(T *&value ) +{ + ListNode *newPtr = getNewNode(*value); + + if (isEmpty()) + { + firstPtr = lastPtr = newPtr; + } + else + { + newPtr->prev = lastPtr; + lastPtr->next = newPtr; + lastPtr = newPtr; + } + return lastPtr->getData(); } template -void List::insertAtBack(T *&value ) +ListNode *List::insertAtBack_RLN(T *&value ) { ListNode *newPtr = getNewNode(*value); @@ -94,6 +120,7 @@ void List::insertAtBack(T *&value ) lastPtr->next = newPtr; lastPtr = newPtr; } + return lastPtr; } @@ -160,6 +187,7 @@ ListNode *List::Find( T *value ) currentPtr = firstPtr; while (currentPtr) { + cout << currentPtr->getData() << endl << value << endl; if (currentPtr->getData() == value) return currentPtr; currentPtr = currentPtr->Next(); @@ -181,20 +209,34 @@ void List::print() const currentPtr = firstPtr; while (currentPtr) { + /* cout << "aClient: " << *currentPtr->getData() << flush; if (currentPtr->getData()->stats) cout << " Player Name: " << currentPtr->getData()->stats->name << " Password: " << currentPtr->getData()->stats->password << flush; cout << endl; + */ + cout << currentPtr->getData()->getString() << endl; currentPtr = currentPtr->next; } - } #endif template -bool List::remove(T *remPtr) +bool List::del(T *remPtr) +{ + ListNode *removed = remove( remPtr ); + if (removed != NULL) + { + delete removed; + return true; + } + return false; +} + +template +ListNode *List::remove(T *remPtr) { ListNode *newPtr = firstPtr; T *testPtr; @@ -213,8 +255,7 @@ bool List::remove(T *remPtr) log("One Element. Deleting it"); #endif firstPtr = lastPtr = NULL; - delete newPtr; - return true; + return newPtr; } else if (newPtr != lastPtr && newPtr != firstPtr) { @@ -223,8 +264,7 @@ bool List::remove(T *remPtr) #endif newPtr->prev->next = newPtr->next; newPtr->next->prev = newPtr->prev; - delete newPtr; - return true; + return newPtr; } else if (newPtr == lastPtr) { @@ -233,8 +273,7 @@ bool List::remove(T *remPtr) #endif lastPtr = newPtr->prev; lastPtr->next = 0; - delete newPtr; - return true; + return newPtr; } else if (newPtr == firstPtr) { @@ -243,12 +282,11 @@ bool List::remove(T *remPtr) #endif firstPtr = newPtr->next; firstPtr->prev = 0; - delete newPtr; - return true; + return newPtr; } } newPtr = newPtr->next; } - return false; + return NULL; } #endif