home *** CD-ROM | disk | FTP | other *** search
/ Informática Multimedia: Special Games / INFESPGAMES.mdf / os2 / ribble / support / cdlist.h < prev    next >
Encoding:
C/C++ Source or Header  |  1994-09-06  |  2.6 KB  |  108 lines

  1. // -------------------------------
  2. //  $Source: C:\logical\store\classes/RCS/CDLIST.H,v $
  3. //  $Revision: 1.10 $
  4. //  $Date: 1994/02/18 11:35:43 $
  5. //  $Author: jason $
  6. //  J.R.Shannon (jrs@larch.demon.co.uk)
  7. //  Language:       C++ (BC3.1, BC4.0, BCOS2 1.0, CSET++, WATCOM10.0)
  8. //  Licence:        Public Domain
  9. //  Purpose:        Doubly linked list & iterator classes
  10. // -------------------------------
  11.  
  12. #ifndef _CDList_h
  13. #define _CDList_h
  14.  
  15. // Forward declaration of list iterator
  16.  
  17. template <class T> class CDListIterator;
  18. template <class T> class CDList;
  19.  
  20.  
  21. template <class T>
  22. class CDListNode
  23. {
  24.   friend class CDList<T>;
  25.   friend class CDListIterator<T>;
  26.  
  27. public:
  28.   CDListNode(const T& _item);
  29.   CDListNode(void);
  30.  
  31. private:
  32.   T               item;
  33.   CDListNode<T>*  next;
  34.   CDListNode<T>*  prev;
  35. };
  36.  
  37.  
  38. // -------------------------------------------------------------
  39. // The CDList class.  Assumes meaningful copy characteristics
  40. // for the item type to be stored, and a meaningful default
  41. // constructor.
  42. // -------------------------------------------------------------
  43.  
  44. template <class T>
  45. class CDList
  46. {
  47.   friend class CDListIterator<T>;
  48.  
  49. private:
  50.   CDListNode<T>  head;
  51.   CDListNode<T>  tail;
  52.  
  53. public:
  54.   CDList(void);
  55.   CDList(const CDList<T>& _list);
  56.   CDList<T>& operator=(const CDList<T>& _list);
  57.   ~CDList();
  58.   int isEmpty(void) const;
  59.   operator int() const;
  60.   T& getHead(void) const;
  61.   T& getTail(void) const;
  62.   void destroy(void);
  63.   void addHead(const T item);
  64.   void addTail(const T item);
  65.   T remHead(void);
  66.   T remTail(void);
  67.   int detach(const T item);
  68.   int count(void) const;
  69.   CDList<T>& operator+=(const T item);
  70. };
  71.  
  72. // -------------------------------------------------------------
  73. // The CDListIterator class.  Allows sequential preusal
  74. // of a CDList class's contents.
  75. // -------------------------------------------------------------
  76.  
  77. template <class T>
  78. class CDListIterator
  79. {
  80. public:
  81.   CDListIterator(const CDList<T>& _list); 
  82.   CDListIterator(const CDListIterator<T>& _it);
  83.   CDListIterator<T>& operator=(const CDListIterator<T>& _it);
  84.   T& current(void) const;                                 
  85.   void rewind(void);                                      
  86.   void fastforward(void);                                 
  87.   operator int();                                         
  88.   T& operator++(int);
  89.   T& operator++();
  90.   T& operator--(int);
  91.   T& operator--();
  92.   void insertAfter(const T item);
  93.   void insertBefore(const T item);
  94.   void remove(void);
  95.  
  96. private:
  97.   const CDList<T>* list;
  98.   CDListNode<T>*   cur;
  99. };
  100.  
  101. #ifndef _CSET2
  102. #include "CDList.c"
  103. #endif
  104.  
  105.  
  106. #endif
  107.  
  108.