X-Git-Url: https://jfr.im/git/irc/gameservirc.git/blobdiff_plain/fc9d2643d68c266370c183d78bd1be20ae3b3b40..7df8f13679b674515640f895ea3acc50e9193164:/gameserv/list.h diff --git a/gameserv/list.h b/gameserv/list.h index e51d6f5..4053e4a 100644 --- a/gameserv/list.h +++ b/gameserv/list.h @@ -17,11 +17,13 @@ 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; void print() const; ListNode < T > *Find( T * ); @@ -66,7 +68,7 @@ List::~List() } template -void List::insertAtFront( const T &value ) +T *List::insertAtFront( const T &value ) { ListNode *newPtr = getNewNode ( value ); @@ -79,10 +81,11 @@ void List::insertAtFront( const T &value ) firstPtr->prev = newPtr; firstPtr = newPtr; } + return firstPtr->getData(); } template -void List::insertAtBack(T *&value ) +T *List::insertAtBack(T *&value ) { ListNode *newPtr = getNewNode(*value); @@ -96,6 +99,25 @@ void List::insertAtBack(T *&value ) lastPtr->next = newPtr; lastPtr = newPtr; } + return lastPtr->getData(); +} + +template +ListNode *List::insertAtBack_RLN(T *&value ) +{ + ListNode *newPtr = getNewNode(*value); + + if (isEmpty()) + { + firstPtr = lastPtr = newPtr; + } + else + { + newPtr->prev = lastPtr; + lastPtr->next = newPtr; + lastPtr = newPtr; + } + return lastPtr; } @@ -162,6 +184,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(); @@ -195,7 +218,19 @@ void List::print() const #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; @@ -214,8 +249,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) { @@ -224,8 +258,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) { @@ -234,8 +267,7 @@ bool List::remove(T *remPtr) #endif lastPtr = newPtr->prev; lastPtr->next = 0; - delete newPtr; - return true; + return newPtr; } else if (newPtr == firstPtr) { @@ -244,12 +276,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