#ifndef _LIST_H
#define _LIST_H

#include <string>
#include <iostream>
#include "Object.h"
#include "Iterator.h"

using namespace std;

namespace uprm_icom4035 {
  class list {
  public:
    typedef Iterator::value_type value_type;
    typedef std::size_t size_type;

    list(){};
    virtual ~list(){;}
    virtual Iterator *find(const value_type& obj) const =0;
    virtual Iterator *first() const = 0;
    virtual void insert(const value_type& obj) = 0;
    virtual bool erase(const value_type& obj) = 0;
    virtual size_type size() const = 0;
    virtual bool is_empty() const= 0;
    virtual void make_empty() = 0;
    virtual void print_list(ostream& out) const=0;

  };
}
#endif
