]> jfr.im git - irc/gameservirc.git/blobdiff - gameserv/list.h
I've begun to add daily news and split up gameserv.cpp a bit
[irc/gameservirc.git] / gameserv / list.h
index 5469257ce90da415c23ec89043fcc9cad6fdde84..d49c0d98d1610a67cd22576cd302e4d052cd4741 100644 (file)
@@ -1,24 +1,34 @@
 #ifndef LIST_H
 #define LIST_H
 
-#include <iostream.h>
+#include <iostream>
 #include <cassert>
 #include "listnode.h"
 #include "aClient.h"
 #include "extern.h"
+#include "options.h"
+
+using std::cout;
+using std::endl;
+using std::flush;
 
 template <class T>
 class List {
     public:
        List();         //constructor
        ~List();        //deconstructor
-       void insertAtFront( const T & );
-       void insertAtBack( T *&);
+       T *insertAtFront( const T & );
+       T *insertAtBack( T *&);
+       ListNode<T> *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; };
@@ -61,7 +71,7 @@ List<T>::~List()
 }
 
 template<class T>
-void List<T>::insertAtFront( const T &value )
+T *List<T>::insertAtFront( const T &value )
 {
     ListNode<T> *newPtr = getNewNode ( value );
 
@@ -74,10 +84,11 @@ void List<T>::insertAtFront( const T &value )
        firstPtr->prev = newPtr;
        firstPtr = newPtr;
     }
+    return firstPtr->getData();
 }
 
 template<class T>
-void List<T>::insertAtBack(T *&value )
+T *List<T>::insertAtBack(T *&value )
 {
     ListNode<T> *newPtr = getNewNode(*value);
 
@@ -91,6 +102,25 @@ void List<T>::insertAtBack(T *&value )
        lastPtr->next = newPtr;
        lastPtr = newPtr;
     }
+    return lastPtr->getData();
+}
+
+template<class T>
+ListNode<T> *List<T>::insertAtBack_RLN(T *&value )
+{
+    ListNode<T> *newPtr = getNewNode(*value);
+
+    if (isEmpty())
+    {
+       firstPtr = lastPtr = newPtr;
+    }
+    else
+    {
+       newPtr->prev = lastPtr;
+       lastPtr->next = newPtr;
+       lastPtr = newPtr;
+    }
+    return lastPtr;
 }
 
 
@@ -157,6 +187,7 @@ ListNode<T> *List<T>::Find( T *value )
     currentPtr = firstPtr;
     while (currentPtr)
     {
+       cout << currentPtr->getData() << endl << value << endl;
        if (currentPtr->getData() == value)
            return currentPtr;
        currentPtr = currentPtr->Next();
@@ -178,20 +209,34 @@ void List<T>::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 <class T>
-bool List<T>::remove(T *remPtr)
+bool List<T>::del(T *remPtr)
+{
+    ListNode<T> *removed = remove( remPtr );
+    if (removed != NULL)
+    {
+       delete removed;
+       return true;
+    }
+    return false;
+}
+
+template <class T>
+ListNode<T> *List<T>::remove(T *remPtr)
 {
     ListNode<T> *newPtr = firstPtr;
     T *testPtr;
@@ -210,8 +255,7 @@ bool List<T>::remove(T *remPtr)
                    log("One Element. Deleting it");
                #endif
                firstPtr = lastPtr = NULL;
-               delete newPtr;
-               return true;
+               return newPtr;
            }
            else if (newPtr != lastPtr && newPtr != firstPtr)
            {
@@ -220,8 +264,7 @@ bool List<T>::remove(T *remPtr)
                #endif
                newPtr->prev->next = newPtr->next;
                newPtr->next->prev = newPtr->prev;
-               delete newPtr;
-               return true;
+               return newPtr;
            }
            else if (newPtr == lastPtr)
            {
@@ -230,8 +273,7 @@ bool List<T>::remove(T *remPtr)
                #endif
                lastPtr = newPtr->prev;
                lastPtr->next = 0;
-               delete newPtr;
-               return true;
+               return newPtr;
            }
            else if (newPtr == firstPtr)
            {
@@ -240,12 +282,11 @@ bool List<T>::remove(T *remPtr)
                #endif
                firstPtr = newPtr->next;
                firstPtr->prev = 0;
-               delete newPtr;
-               return true;
+               return newPtr;
            }
        }
        newPtr = newPtr->next;
     }
-    return false;
+    return NULL;
 }
 #endif