template <typename Key, typename Element, typename HashCmp>
class LinearProbeHashTable {
protected: // local types
// ... (insert HashEntry here)
public: // public types
// ... (insert Position here)
private: // member data
int n, N; // size and capacity
EntryPtr A; // array of entries
HashCmp hash; // the hash comparator
protected: // local utilities
EntryPtr finder(const Key& key) const; // search utility
EntryPtr inserter(const Key& key, const Element& e); // insert utility
public:
LinearProbeHashTable(int capacity = 100) // constructor
: n(0), N(capacity), hash() { A = new HashEntry[N]; }
int size() const { return n; } // size of dictionary
bool isEmpty() const { return (n == 0); } // empty dictionary?
Position find(const Key& key) const // find a key
{ return Position(finder(key)); }
void insertItem(const Key& key, const Element& element)
throw(HashTableFullException) { // insert (key,element)
EntryPtr e = inserter(key, element); // attempt to insert
if (e == NULL) // failure
throw HashTableFullException("Insertion into full hash table");
}
void removeElement(const Key& key) // remove using key
throw(NonexistentElementException) {
EntryPtr e = finder(key); // look up key
if (e == NULL) // not found?
throw NonexistentElementException("Key not found");
e->status = FREE; // mark entry as free
n--; // decrease size
}
// ... (some functions omitted)
};