Coverage Report

Created: 2023-09-25 06:35

/src/xpdf-4.04/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
#ifdef USE_GCC_PRAGMAS
15
#pragma interface
16
#endif
17
18
#include "gtypes.h"
19
20
class GString;
21
struct GHashBucket;
22
struct GHashIter;
23
24
//------------------------------------------------------------------------
25
26
class GHash {
27
public:
28
29
  GHash(GBool deleteKeysA = gFalse);
30
  ~GHash();
31
  void add(GString *key, void *val);
32
  void add(GString *key, int val);
33
  void replace(GString *key, void *val);
34
  void replace(GString *key, int val);
35
  void *lookup(GString *key);
36
  int lookupInt(GString *key);
37
  void *lookup(const char *key);
38
  int lookupInt(const char *key);
39
  void *remove(GString *key);
40
  int removeInt(GString *key);
41
  void *remove(const char *key);
42
  int removeInt(const char *key);
43
0
  int getLength() { return len; }
44
  void startIter(GHashIter **iter);
45
  GBool getNext(GHashIter **iter, GString **key, void **val);
46
  GBool getNext(GHashIter **iter, GString **key, int *val);
47
  void killIter(GHashIter **iter);
48
49
private:
50
51
  void expand();
52
  GHashBucket *find(GString *key, int *h);
53
  GHashBucket *find(const char *key, int *h);
54
  int hash(GString *key);
55
  int hash(const char *key);
56
57
  GBool deleteKeys;   // set if key strings should be deleted
58
  int size;     // number of buckets
59
  int len;      // number of entries
60
  GHashBucket **tab;
61
};
62
63
#define deleteGHash(hash, T)                       \
64
370k
  do {                                             \
65
370k
    GHash *_hash = (hash);                         \
66
370k
    {                                              \
67
370k
      GHashIter *_iter;                            \
68
370k
      GString *_key;                               \
69
370k
      void *_p;                                    \
70
370k
      _hash->startIter(&_iter);                    \
71
402k
      while (_hash->getNext(&_iter, &_key, &_p)) { \
72
31.7k
        delete (T*)_p;                             \
73
31.7k
      }                                            \
74
370k
      delete _hash;                                \
75
370k
    }                                              \
76
370k
  } while(0)
77
78
#endif