#include <cassert>
#include "listnode.h"
#include "aClient.h"
-#include "extern.h"
#include "options.h"
using std::cout;
using std::endl;
using std::flush;
+void log(const char *fmt, ...);
+
template <class T>
class List {
public:
~List(); //deconstructor
T *insertAtFront( const T & );
T *insertAtBack( T *&);
+ T *random(); // Returns a random element in the list
ListNode<T> *insertAtBack_RLN( T *&);
bool removeFromFront( T & );
bool removeFromBack( T & );
ListNode < T > *Find( T * );
ListNode < T > *First() { return firstPtr; };
ListNode < T > *Last() { return lastPtr; };
+ int elements; // Number of elements in the list
private:
ListNode < T > *firstPtr;
ListNode < T > *lastPtr;
ListNode < T > *getNewNode ( const T & );
+ ListNode < T > *getNewNode ( T & );
};
template <class T>
-List<T>::List() : firstPtr (0), lastPtr (0) {}
+List<T>::List() : firstPtr (0), lastPtr (0) {elements = 0;}
template <class T>
void List<T>::deleteNodes()
it = it->Next();
delete tempPtr;
}
+ firstPtr = NULL;
+ lastPtr = NULL;
+ elements = 0;
}
template <class T>
deleteNodes();
}
+template<class T>
+T *List<T>::random()
+{
+ if (isEmpty())
+ return NULL;
+
+ int num = rand() % elements;
+ ListNode<T> *it = firstPtr;
+ for (int x = 0; x < num; x++)
+ {
+ it = it->Next();
+ }
+ return it->getData();
+}
+
template<class T>
T *List<T>::insertAtFront( const T &value )
{
firstPtr->prev = newPtr;
firstPtr = newPtr;
}
+ elements++;
return firstPtr->getData();
}
lastPtr->next = newPtr;
lastPtr = newPtr;
}
+ elements++;
return lastPtr->getData();
}
lastPtr->next = newPtr;
lastPtr = newPtr;
}
+ elements++;
return lastPtr;
}
value = tempPtr->getData();
delete tempPtr;
+ elements--;
return true;
}
}
value = tempPtr->getData();
delete tempPtr;
+ elements--;
return true;
-
}
}
return ptr;
}
+
+template <class T>
+ListNode<T> *List<T>::getNewNode( T &value)
+{
+ ListNode<T> *ptr = new ListNode<T>(value);
+
+ assert( ptr != 0);
+
+ return ptr;
+}
+
template<class T>
ListNode<T> *List<T>::Find( T *value )
{
<< " Password: " << currentPtr->getData()->stats->password << flush;
cout << endl;
*/
+ /*
cout << currentPtr->getData()->getString() << endl;
currentPtr = currentPtr->next;
+ */
+ T *dat;
+ dat = currentPtr->getData();
+ log("name: %s", dat->name);
+ log("weapon: %s", dat->weapon);
+ log("death: %s", dat->death);
+ log("strength: %d", dat->strength);
+ log("exp: %ld", dat->exp);
+ log("gold: %ld", dat->gold);
+ log("maxhp: %d", dat->maxhp);
+ log("hp: %d", dat->hp);
+ currentPtr = currentPtr->next;
}
}
#endif
firstPtr->prev = 0;
return newPtr;
}
+ elements--;
}
newPtr = newPtr->next;
}