source: trunk/poppler/mypoppler/goo/GooHash.h @ 257

Last change on this file since 257 was 2, checked in by Eugene Romanenko, 16 years ago

First import

File size: 2.2 KB
Line 
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
18class GooString;
19struct GooHashBucket;
20struct GooHashIter;
21
22//------------------------------------------------------------------------
23
24class GooHash {
25public:
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
47private:
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
Note: See TracBrowser for help on using the repository browser.