#ifndef _STRINGSET_H
#define _STRINGSET_H

#include <string>
#include "tvector.h"
using namespace std;

class StringSet
{
  public:
    StringSet();
    StringSet(int isize);  // initialize size -- for efficiency

    // accessors
    bool contains(const string& s) const;
    int  size()                    const;

    // mutators
    void insert(const string& s);
    void erase (const string& s);
    void clear();

    friend class StringSetIterator;
  private:

    int    myCount;                // # of entries stored in myList
    tvector<string> myList;        // storage for each string
    
    int search(const string & key) const; // returns index in myList of key
};

class StringSetIterator
{
  public:
    StringSetIterator(const StringSet& s);

    void Init()      const;
    bool HasMore()   const;
    void Next()      const;
    string Current() const;
  private:
    const StringSet&  mySet;
    mutable int myIndex;
};

#endif
