X-Git-Url: https://jfr.im/git/irc/gameservirc.git/blobdiff_plain/42ec1800d32eafe1a3f55ac73d830061e66f2de7..59dc3990c7a62a9c3ad35142d5ef8a3d2cd02d8e:/gameserv/list.h diff --git a/gameserv/list.h b/gameserv/list.h index 19237f1..d19e556 100644 --- a/gameserv/list.h +++ b/gameserv/list.h @@ -1,11 +1,16 @@ #ifndef LIST_H #define LIST_H -#include +#include #include #include "listnode.h" #include "aClient.h" +#include "extern.h" +#include "options.h" +using std::cout; +using std::endl; +using std::flush; template class List { @@ -16,7 +21,8 @@ class List { void insertAtBack( T *&); bool removeFromFront( T & ); bool removeFromBack( T & ); - bool remove( T * ); + bool del( T *); + ListNode < T > *remove( T * ); bool isEmpty() const; void print() const; ListNode < T > *Find( T * ); @@ -37,7 +43,9 @@ List::~List() { if (!isEmpty()) { - cout << "Destroying Nodes" << endl; + #ifdef DEBUGMODE + log("Destroying Nodes"); + #endif ListNode *currentPtr = firstPtr, *tempPtr; @@ -45,11 +53,16 @@ List::~List() { tempPtr = currentPtr; currentPtr = currentPtr->Next(); - cout << "Deleting Memory address: " << tempPtr->getData() << endl << flush; + + #ifdef DEBUGMODE + log("Deleting Memory address: %s", tempPtr->getData()); + #endif delete tempPtr; } - cout << "All Nodes destroyed" << endl; + #ifdef DEBUGMODE + log("All Nodes destroyed"); + #endif } } @@ -157,6 +170,7 @@ ListNode *List::Find( T *value ) return NULL; } +#ifdef DEBUGMODE template void List::print() const { @@ -178,11 +192,23 @@ void List::print() const cout << endl; currentPtr = currentPtr->next; } +} +#endif +template +bool List::del(T *remPtr) +{ + ListNode *removed = remove( remPtr ); + if (removed != NULL) + { + delete removed; + return true; + } + return false; } template -bool List::remove(T *remPtr) +ListNode *List::remove(T *remPtr) { ListNode *newPtr = firstPtr; T *testPtr; @@ -197,41 +223,42 @@ bool List::remove(T *remPtr) { if (firstPtr == lastPtr) { - cout << "One Element. Deleting it" << endl << flush; + #ifdef DEBUGMODE + log("One Element. Deleting it"); + #endif firstPtr = lastPtr = NULL; - delete newPtr; - return true; + return newPtr; } 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; + #ifdef DEBUGMODE + log("Many elements, this one is in the middle. Deleting it, linking front to back, and back to front."); + #endif newPtr->prev->next = newPtr->next; newPtr->next->prev = newPtr->prev; - delete newPtr; - return true; + return newPtr; } else if (newPtr == lastPtr) { - cout << "This was the last element. Deleting it, and pointing the tail to " - << "its previous element." << endl << flush; + #ifdef DEBUGMODE + log("This was the last element. Deleting it, and pointing the tail to its previous element."); + #endif lastPtr = newPtr->prev; lastPtr->next = 0; - delete newPtr; - return true; + return newPtr; } else if (newPtr == firstPtr) { - cout << "This was the first element. Deleting it, and pointing the head to " - << "its next element." << endl << flush; + #ifdef DEBUGMODE + log("This was the first element. Deleting it, and pointing the head to its next element."); + #endif firstPtr = newPtr->next; firstPtr->prev = 0; - delete newPtr; - return true; + return newPtr; } } newPtr = newPtr->next; } - return false; + return NULL; } #endif