
// File name:  List.h

#ifndef LIST_H
#define LIST_H

#include "ListNode.h"
#include "ListItr.h"

template <class Object>
class List 
{
   public:
      List ( );
      ~List ( );
 
      // Accessor Methods
      bool isEmpty ( ) const;             
      ListItr<Object> zeroth( ) const;
      ListItr<Object> first( ) const;
      ListItr<Object> find ( const Object & x ) const;
      ListItr<Object> findPrevious ( const Object & x ) const;
   
      // Mutator Methods 
      void makeEmpty ( );
      void insert ( const Object & x, const ListItr<Object> & p );
      void remove ( const Object & x );

      void operator += (const List<Object> &rhs);

      const List & operator= ( const List & rhs );

   private: 
      // The stack is a linked list with no header.
      List ( const List & rhs );    // copy constructor is private

      ListNode<Object> * header;

};

#include "List.cpp"

#endif
