SmartPDF - lightweight pdf viewer app for rosapps
[reactos.git] / rosapps / smartpdf / poppler / goo / GooHash.h
1 //========================================================================
2 //
3 // GooHash.h
4 //
5 // Copyright 2001-2003 Glyph & Cog, LLC
6 //
7 //========================================================================
8
9 #ifndef GHASH_H
10 #define GHASH_H
11
12 #ifdef USE_GCC_PRAGMAS
13 #pragma interface
14 #endif
15
16 #include "gtypes.h"
17
18 class GooString;
19 struct GooHashBucket;
20 struct GooHashIter;
21
22 //------------------------------------------------------------------------
23
24 class GooHash {
25 public:
26
27 GooHash(GBool deleteKeysA = gFalse);
28 ~GooHash();
29 void add(GooString *key, void *val);
30 void add(GooString *key, int val);
31 void replace(GooString *key, void *val);
32 void replace(GooString *key, int val);
33 void *lookup(GooString *key);
34 int lookupInt(GooString *key);
35 void *lookup(char *key);
36 int lookupInt(char *key);
37 void *remove(GooString *key);
38 int removeInt(GooString *key);
39 void *remove(char *key);
40 int removeInt(char *key);
41 int getLength() { return len; }
42 void startIter(GooHashIter **iter);
43 GBool getNext(GooHashIter **iter, GooString **key, void **val);
44 GBool getNext(GooHashIter **iter, GooString **key, int *val);
45 void killIter(GooHashIter **iter);
46
47 private:
48
49 void expand();
50 GooHashBucket *find(GooString *key, int *h);
51 GooHashBucket *find(char *key, int *h);
52 int hash(GooString *key);
53 int hash(char *key);
54
55 GBool deleteKeys; // set if key strings should be deleted
56 int size; // number of buckets
57 int len; // number of entries
58 GooHashBucket **tab;
59 };
60
61 #define deleteGooHash(hash, T) \
62 do { \
63 GooHash *_hash = (hash); \
64 { \
65 GooHashIter *_iter; \
66 GooString *_key; \
67 void *_p; \
68 _hash->startIter(&_iter); \
69 while (_hash->getNext(&_iter, &_key, &_p)) { \
70 delete (T*)_p; \
71 } \
72 delete _hash; \
73 } \
74 } while(0)
75
76 #endif