#ifndef __INC_LIST_HPP__
#define __INC_LIST_HPP__

#include "base.hpp"


/*********************************************************************************
**
**  CLASS: CLink : A link in a doubly linked list. Use this class as a 
**                 base class to make linked lists of other classes.
**
**  PRIVATE MEMBERS:
**        next = pointer to next CLink in the list or NULL if last in list
**        prev = pointer to previous CLink in the list or NULL if first in list
**
**  PUBLIC MEMBERS:
**        Next ()    = Returns a pointer to the next link in chain or NULL if 
**                     last link in chain.
**        Prev ()    = Returns a pointer to the previous link in chain or NULL if 
**                     first link in chain.
**
*********************************************************************************/

class CLink : public CBase
{
     friend class CList; 
     protected:
          CLink *next;
          CLink *prev;

     public:
          CLink () : next(0), prev(0) {;}
          CLink *Next () { return (next); }
          CLink *Prev () { return (prev); }
          virtual ~CLink () {;}
};



/*********************************************************************************
**
**  CLASS: CList : A Doubly link list class
**
**  PRIVATE MEMBERS:
**        _base = pointer to first CLink in the list or NULL if no items in list
**
**  PUBLIC MEMBERS:
**        AddItem ()   = Adds a new CLink Object to the begining of the list.
**        FirstItem () = Returns a pointer to the first CLink in the list.  
**        DeleteItem ()= deletes an item and removes it from the list.  
**        DeleteAll () = deletes all the items in the list.  
**
*********************************************************************************/

class CList : public CBase
{
     protected:
          CLink *base;               

     public:
          CList () { base = 0; }
          void AddItem (CLink *link);
          void DeleteItem (CLink *link);
          void DeleteAll ();
          CLink *FirstItem () { return (base); }
          ~CList ();
};

#endif
