diff options
Diffstat (limited to 'Build/source/libs/poppler/poppler-0.20.0/goo/GooHash.h')
-rw-r--r-- | Build/source/libs/poppler/poppler-0.20.0/goo/GooHash.h | 76 |
1 files changed, 76 insertions, 0 deletions
diff --git a/Build/source/libs/poppler/poppler-0.20.0/goo/GooHash.h b/Build/source/libs/poppler/poppler-0.20.0/goo/GooHash.h new file mode 100644 index 00000000000..b973a93a48d --- /dev/null +++ b/Build/source/libs/poppler/poppler-0.20.0/goo/GooHash.h @@ -0,0 +1,76 @@ +//======================================================================== +// +// GooHash.h +// +// Copyright 2001-2003 Glyph & Cog, LLC +// +//======================================================================== + +#ifndef GHASH_H +#define GHASH_H + +#ifdef USE_GCC_PRAGMAS +#pragma interface +#endif + +#include "gtypes.h" + +class GooString; +struct GooHashBucket; +struct GooHashIter; + +//------------------------------------------------------------------------ + +class GooHash { +public: + + GooHash(GBool deleteKeysA = gFalse); + ~GooHash(); + void add(GooString *key, void *val); + void add(GooString *key, int val); + void replace(GooString *key, void *val); + void replace(GooString *key, int val); + void *lookup(GooString *key); + int lookupInt(GooString *key); + void *lookup(const char *key); + int lookupInt(const char *key); + void *remove(GooString *key); + int removeInt(GooString *key); + void *remove(const char *key); + int removeInt(const char *key); + int getLength() { return len; } + void startIter(GooHashIter **iter); + GBool getNext(GooHashIter **iter, GooString **key, void **val); + GBool getNext(GooHashIter **iter, GooString **key, int *val); + void killIter(GooHashIter **iter); + +private: + + void expand(); + GooHashBucket *find(GooString *key, int *h); + GooHashBucket *find(const char *key, int *h); + int hash(GooString *key); + int hash(const char *key); + + GBool deleteKeys; // set if key strings should be deleted + int size; // number of buckets + int len; // number of entries + GooHashBucket **tab; +}; + +#define deleteGooHash(hash, T) \ + do { \ + GooHash *_hash = (hash); \ + { \ + GooHashIter *_iter; \ + GooString *_key; \ + void *_p; \ + _hash->startIter(&_iter); \ + while (_hash->getNext(&_iter, &_key, &_p)) { \ + delete (T*)_p; \ + } \ + delete _hash; \ + } \ + } while(0) + +#endif |