All pastes #336037 Raw Edit

Anonymous

public text v1 · immutable
·published 2007-02-01 19:57 UTC
rendered paste body
#ifndef __NOVA__DLIST_H__
#define __NOVA__DLIST_H__

template <class T>
class DList {
   public:
      inline T get(Int i);
      T pop();
      void push(const T &element);
      void enqueue(const T &element);
      void copyList(const DList &List);
      bool isEmpty();
      void removeAll();

      DList() {};
      DList() {const DList &list};

      virtual ~DList() {};

   protected:
      struct elementList {
         T elem;
         elementList *nextElement;
      }
      
      elementList firstElement;
      int count;
};

template <class T> DList<T>::DList() {
   firstElement = NULL;
   count = 0;
}


template <class T> Dlist<T>::DList(const DList &list) {
   firstElement = NULL;
   count = 0;

   copyList(list);
}

template <class T> DList<T>::~DList() {
   removeAll();
}
template <class T> void DList::push(const T &element) {
   elementList *newElem = new element;

   newElem->elem = element;
   newElem->nextElement = firstElement;

   firstElement = element;
   count++;
}

template <class T> T DList<T>::pop() {
   if (isEmpty() || firstElement != NULL)
      return NULL;

   elementList popElement = firstElement;
   T element = popElement->element;

   firstElement = firstElement->nextElement;

   delete popElement;
   count--;

   return element;
}

template <class T> bool DList<T>::isEmpty() {
   if (count == 0)
      return true;
   else return false;
}

template <class T> void DList<T>::copyList(const DList &list) {
   elementList *tmpElement;
   removeAll();

   for (tmpElement = list.firstElement; tmpElement != NULL;
         tmpElement=tmpElement->nextElement)
      enqueue(tmpElement->element);
}

template <class T> void DList<T>::removeAll() {
   while (count)
      pop();
}

template <class T> void DList<T>::enqueue(const T &element) {
   elementList *newElem = new element;
   elementList *tmpElement;

   newElem->elem = element;
   newElem->nextElement = NULL;

   if(firstElement == NULL)
      firstElement = newElem;
   else {
      for(tmpElement = firstElement; tmpElement->nextElement != NULL;)
         tmpElement = tmpElement->nextElement;
      tmpElement->nextElem = newElem;
   }
   count++;
}

template <class T> T DList<T>::get(Int i) {
   if (firstElement == NULL)
      return NULL;

   int j;
   T tmp;
   elementList *tmpElement = firstElement;
   for (j = 0; j <= i; j++)
      tmpElement = tmpElement->nextElement;
   
   return tmpElement->element;
}

#endif