Main Page   Class Hierarchy   Alphabetical List   Compound List   File List   Compound Members  

skHashTable.h

00001 /*
00002   Copyright 1996-2001
00003   Simon Whiteside
00004 
00005   $Id: skHashTable.h,v 1.13 2001/10/29 18:17:24 sdw Exp $
00006 */
00007 #ifndef skHASHTBL_H
00008 #define skHASHTBL_H
00009 
00010 
00011 #include "skGeneral.h"
00012 #include "skAlist.h"
00013 
00017 class  CLASSEXPORT skHashEntry 
00018 {    
00019  public:
00023   skHashEntry(void * k,void * v) 
00024     : m_Key(k), m_Value(v) {
00025   }
00029   int   operator==(const skHashEntry& h) { 
00030     return this==&h; 
00031   }
00032   void * m_Key;
00033   void * m_Value;
00034 };
00035 
00036 typedef skTAList<skHashEntry> skHashEntryList;
00037 typedef skTAListIterator<skHashEntry> skHashEntryListIterator;
00038 
00043 class   CLASSEXPORT skHashTable 
00044 {
00045  public:
00049   void clear();
00053   void clearAndDestroyKeys();
00057   void clearAndDestroyValues();
00061   void clearAndDestroy();
00065   USize entries() const;
00069   virtual ~skHashTable();
00070  protected:
00074   skHashTable(USize  size);
00078   void insertKeyAndValue(void * key, void * value);
00082   void *  value(void * key) const;
00086   void del(void * key);
00090   void delKeyNotValue(const void * key);
00094   void remove(const void * key);
00098   virtual USize hashKey(const void * key) const=0;
00102   virtual int compareKeys(const void * key1, const void * key2) const=0;
00106   virtual void deleteKey(void * key)=0; 
00110   virtual void deleteValue(void * value)=0;
00111  private:
00115   skHashTable();
00119   skHashTable(const skHashTable&);
00123   skHashTable& operator=(const skHashTable&);
00127   skHashEntry * findEntry(const void * key,USize & slot) const;
00131   skHashEntry * findEntry(const void * key) const;
00135   skHashEntryList * m_Slots;
00139   USize m_Size;
00143   USize m_NumEntries;
00144   friend class skHashTableIterator;
00145 };
00149 class  CLASSEXPORT skHashTableIterator
00150 {
00151  public:
00155   virtual ~skHashTableIterator();
00159   int operator()();
00160  protected:
00164   skHashTableIterator(const skHashTable&);
00168   void * key() const; 
00172   void * value() const;
00173  private:
00177   skHashTableIterator& operator=(const skHashTableIterator&);
00181   const skHashTable&    m_Table;
00185   USize  m_Slot;
00189   void * m_Value;
00193   void * m_Key;
00197   skHashEntryListIterator * m_ListIterator;
00198 };
00199 #define TT_PREFIX template <class TKey,class TValue> 
00200 
00201 const int DEFAULT_skHashTable_SIZE=3;
00205 template <class TKey,class TValue>  class  CLASSEXPORT skTHashTable: public skHashTable
00206 {
00207  public:
00211   skTHashTable(USize  size);
00215   skTHashTable();
00219   ~skTHashTable();
00223   void insertKeyAndValue(TKey * key, TValue * value);
00227   TValue * value(const TKey * key);
00231   void del(const TKey * key);
00235   void delKeyNotValue(const TKey * key);
00239   void remove(const TKey * key);
00240     
00241  protected:
00245   int compareKeys(const void * key1, const void * key2) const;
00249   void deleteKey(void * key);
00253   void deleteValue(void * value);
00257   USize hashKey(const void * key) const;
00258 };
00262 template <class TKey,class TValue>  class CLASSEXPORT skTHashTableIterator: public skHashTableIterator
00263 {
00264  public:
00268   skTHashTableIterator(const skTHashTable<TKey,TValue>&);
00272   TKey * key() const;
00276   TValue * value() const;
00277 };
00278 
00279 #include "skHashTable.inl"
00280 
00281 #endif

Generated on Tue Nov 20 17:56:21 2001 for Simkin by doxygen1.2.11.1 written by Dimitri van Heesch, © 1997-2001