]> jfr.im git - irc/gameservirc.git/blobdiff - gameserv/list.h
Fixed a core bug hopefully
[irc/gameservirc.git] / gameserv / list.h
index 838f8952f45e5858cf60b4ef19117c2b8b32ec85..e8b85100a499257851ef69a1c224abf924af2adb 100644 (file)
@@ -25,7 +25,11 @@ class List {
        bool del( T *);
        ListNode < T > *remove( T * );
        bool isEmpty() const;
+       #ifdef DEBUGMODE
        void print() const;
+       #endif
+        void deleteNodes();
+
        ListNode < T > *Find( T * );
         ListNode < T > *First() { return firstPtr; };
        ListNode < T > *Last() { return lastPtr; };
@@ -40,31 +44,25 @@ template <class T>
 List<T>::List() : firstPtr (0), lastPtr (0) {}
 
 template <class T>
-List<T>::~List()
+void List<T>::deleteNodes()
 {
-    if (!isEmpty())
+    if (isEmpty())
+       return;
+    ListNode<T> *it = firstPtr, *tempPtr;
+    while (it)
     {
-       #ifdef DEBUGMODE
-           log("Destroying Nodes");
-       #endif
-
-       ListNode<T> *currentPtr = firstPtr, *tempPtr;
-
-       while (currentPtr) 
-       {
-           tempPtr = currentPtr;
-           currentPtr = currentPtr->Next();
-
-           #ifdef DEBUGMODE
-               log("Deleting Memory address: %s", tempPtr->getData());
-           #endif
-           
-               delete tempPtr;
-       }
-       #ifdef DEBUGMODE
-           log("All Nodes destroyed");
-       #endif
+       tempPtr = it;
+       it = it->Next();
+       delete tempPtr;
     }
+    firstPtr = NULL;
+    lastPtr = NULL;
+}
+
+template <class T>
+List<T>::~List()
+{
+    deleteNodes();
 }
 
 template<class T>