Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members | Related Pages

GHash.h

Go to the documentation of this file.
00001 //========================================================================
00002 //
00003 // GHash.h
00004 //
00005 // Copyright 2001 Derek B. Noonburg
00006 //
00007 //========================================================================
00008 
00009 #ifndef GHASH_H
00010 #define GHASH_H
00011 
00012 #ifdef __GNUC__
00013 #pragma interface
00014 #endif
00015 
00016 #include "gtypes.h"
00017 
00018 class GString;
00019 struct GHashBucket;
00020 struct GHashIter;
00021 
00022 //------------------------------------------------------------------------
00023 
00024 class GHash {
00025 public:
00026 
00027   GHash(GBool deleteKeysA = gFalse);
00028   ~GHash();
00029   void add(GString *key, void *val);
00030   void *lookup(GString *key);
00031   void *lookup(char *key);
00032   void *remove(GString *key);
00033   void *remove(char *key);
00034   int getLength() { return len; }
00035   void startIter(GHashIter **iter);
00036   GBool getNext(GHashIter **iter, GString **key, void **val);
00037   void killIter(GHashIter **iter);
00038 
00039 private:
00040 
00041   GHashBucket *find(GString *key, int *h);
00042   GHashBucket *find(char *key, int *h);
00043   int hash(GString *key);
00044   int hash(char *key);
00045 
00046   GBool deleteKeys;             // set if key strings should be deleted
00047   int size;                     // number of buckets
00048   int len;                      // number of entries
00049   GHashBucket **tab;
00050 };
00051 
00052 #define deleteGHash(hash, T)                       \
00053   do {                                             \
00054     GHash *_hash = (hash);                         \
00055     {                                              \
00056       GHashIter *_iter;                            \
00057       GString *_key;                               \
00058       void *_p;                                    \
00059       _hash->startIter(&_iter);                    \
00060       while (_hash->getNext(&_iter, &_key, &_p)) { \
00061         delete (T*)_p;                             \
00062       }                                            \
00063       delete _hash;                                \
00064     }                                              \
00065   } while(0)
00066 
00067 #endif

Generated on Sat Nov 5 16:18:11 2005 for OPIE by  doxygen 1.4.2