#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 {
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 * );
{
if (!isEmpty())
{
- cout << "Destroying Nodes" << endl;
+ #ifdef DEBUGMODE
+ log("Destroying Nodes");
+ #endif
ListNode<T> *currentPtr = firstPtr, *tempPtr;
{
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
}
}
return NULL;
}
+#ifdef DEBUGMODE
template <class T>
void List<T>::print() const
{
cout << endl;
currentPtr = currentPtr->next;
}
+}
+#endif
+template <class T>
+bool List<T>::del(T *remPtr)
+{
+ ListNode<T> *removed = remove( remPtr );
+ if (removed != NULL)
+ {
+ delete removed;
+ return true;
+ }
+ return false;
}
template <class T>
-bool List<T>::remove(T *remPtr)
+ListNode<T> *List<T>::remove(T *remPtr)
{
ListNode<T> *newPtr = firstPtr;
T *testPtr;
{
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