Coverage Report

Created: 2025-07-11 07:47

/src/xpdf-4.05/goo/GHash.h
Line
Count
Source (jump to first uncovered line)
1
//========================================================================
2
//
3
// GHash.h
4
//
5
// Copyright 2001-2003 Glyph & Cog, LLC
6
//
7
//========================================================================
8
9
#ifndef GHASH_H
10
#define GHASH_H
11
12
#include <aconf.h>
13
14
#include "gtypes.h"
15
16
class GString;
17
struct GHashBucket;
18
struct GHashIter;
19
20
//------------------------------------------------------------------------
21
22
class GHash {
23
public:
24
25
  GHash(GBool deleteKeysA = gFalse);
26
  ~GHash();
27
  void add(GString *key, void *val);
28
  void add(GString *key, int val);
29
  void replace(GString *key, void *val);
30
  void replace(GString *key, int val);
31
  void *lookup(GString *key);
32
  int lookupInt(GString *key);
33
  void *lookup(const char *key);
34
  int lookupInt(const char *key);
35
  void *remove(GString *key);
36
  int removeInt(GString *key);
37
  void *remove(const char *key);
38
  int removeInt(const char *key);
39
0
  int getLength() { return len; }
40
  void startIter(GHashIter **iter);
41
  GBool getNext(GHashIter **iter, GString **key, void **val);
42
  GBool getNext(GHashIter **iter, GString **key, int *val);
43
  void killIter(GHashIter **iter);
44
45
private:
46
47
  void expand();
48
  GHashBucket *find(GString *key, int *h);
49
  GHashBucket *find(const char *key, int *h);
50
  int hash(GString *key);
51
  int hash(const char *key);
52
53
  GBool deleteKeys;   // set if key strings should be deleted
54
  int size;     // number of buckets
55
  int len;      // number of entries
56
  GHashBucket **tab;
57
};
58
59
#define deleteGHash(hash, T)                       \
60
2.03M
  do {                                             \
61
2.03M
    GHash *_hash = (hash);                         \
62
2.03M
    {                                              \
63
2.03M
      GHashIter *_iter;                            \
64
2.03M
      GString *_key;                               \
65
2.03M
      void *_p;                                    \
66
2.03M
      _hash->startIter(&_iter);                    \
67
2.80M
      while (_hash->getNext(&_iter, &_key, &_p)) { \
68
776k
        delete (T*)_p;                             \
69
776k
      }                                            \
70
2.03M
      delete _hash;                                \
71
2.03M
    }                                              \
72
2.03M
  } while(0)
73
74
#endif