#ifndef __DIRECTORY_HPP #define __DIRECTORY_HPP template class dirkey { public: static int hasKey(const T *e, const K& key) { return *e==key; } }; template class aDirectory { protected: struct elem { T e; elem *next,*prev; elem(const T& ne) : e(ne) {} }; elem *list; public: aDirectory(); virtual ~aDirectory(); virtual int insert(const T& e); virtual int remove(const K& key); virtual int member(const K& key) { return lookup(key)!=0; } virtual T *lookup(const K& key); virtual void clear(); int empty() const; int count() const; friend class aDirectoryIterator; }; template class aDirectoryIterator { aDirectory *theDir; aDirectory::elem *e; public: aDirectoryIterator(aDirectory& aDir); aDirectoryIterator(aDirectory *aDir); int more(); void next(); void prev(); T *get(); void remove(); }; #endif