annotate lib/hash.h @ 1032:0b6b7e10fe5f

use HASH_H, not _hash_h_ in #ifndef fix comment: hash_rehash does *not* use hash_key_freer (HASH_INSERT_NEW_ITEM): Take new arg: Failp.
author Jim Meyering <jim@meyering.net>
date Wed, 17 Sep 1997 17:04:21 +0000
parents e34b8e81638f
children aa231bb87550
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1032
0b6b7e10fe5f use HASH_H, not _hash_h_ in #ifndef
Jim Meyering <jim@meyering.net>
parents: 1031
diff changeset
1 #ifndef HASH_H
0b6b7e10fe5f use HASH_H, not _hash_h_ in #ifndef
Jim Meyering <jim@meyering.net>
parents: 1031
diff changeset
2 # define HASH_H 1
0b6b7e10fe5f use HASH_H, not _hash_h_ in #ifndef
Jim Meyering <jim@meyering.net>
parents: 1031
diff changeset
3
0b6b7e10fe5f use HASH_H, not _hash_h_ in #ifndef
Jim Meyering <jim@meyering.net>
parents: 1031
diff changeset
4 # if HAVE_CONFIG_H
0b6b7e10fe5f use HASH_H, not _hash_h_ in #ifndef
Jim Meyering <jim@meyering.net>
parents: 1031
diff changeset
5 # include <config.h>
0b6b7e10fe5f use HASH_H, not _hash_h_ in #ifndef
Jim Meyering <jim@meyering.net>
parents: 1031
diff changeset
6 # endif
1031
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
7
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
8 # include <stdio.h>
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
9 # include <assert.h>
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
10
1032
0b6b7e10fe5f use HASH_H, not _hash_h_ in #ifndef
Jim Meyering <jim@meyering.net>
parents: 1031
diff changeset
11 # ifdef STDC_HEADERS
0b6b7e10fe5f use HASH_H, not _hash_h_ in #ifndef
Jim Meyering <jim@meyering.net>
parents: 1031
diff changeset
12 # include <stdlib.h>
0b6b7e10fe5f use HASH_H, not _hash_h_ in #ifndef
Jim Meyering <jim@meyering.net>
parents: 1031
diff changeset
13 # else
0b6b7e10fe5f use HASH_H, not _hash_h_ in #ifndef
Jim Meyering <jim@meyering.net>
parents: 1031
diff changeset
14 void free ();
0b6b7e10fe5f use HASH_H, not _hash_h_ in #ifndef
Jim Meyering <jim@meyering.net>
parents: 1031
diff changeset
15 char *malloc ();
0b6b7e10fe5f use HASH_H, not _hash_h_ in #ifndef
Jim Meyering <jim@meyering.net>
parents: 1031
diff changeset
16 # endif
0b6b7e10fe5f use HASH_H, not _hash_h_ in #ifndef
Jim Meyering <jim@meyering.net>
parents: 1031
diff changeset
17
0b6b7e10fe5f use HASH_H, not _hash_h_ in #ifndef
Jim Meyering <jim@meyering.net>
parents: 1031
diff changeset
18 # define USE_OBSTACK
1031
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
19 # ifdef USE_OBSTACK
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
20 # include "obstack.h"
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
21 # endif
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
22
1032
0b6b7e10fe5f use HASH_H, not _hash_h_ in #ifndef
Jim Meyering <jim@meyering.net>
parents: 1031
diff changeset
23 # define obstack_chunk_alloc malloc
1031
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
24 # define obstack_chunk_free free
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
25
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
26 struct hash_ent
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
27 {
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
28 void *key;
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
29 struct hash_ent *next;
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
30 };
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
31 typedef struct hash_ent HASH_ENT;
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
32
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
33 /* This is particularly useful to cast uses in hash_initialize of the
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
34 system free function. */
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
35 typedef void (*Hash_key_freer_type) (void *key);
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
36
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
37 struct HT
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
38 {
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
39 /* User-supplied function for freeing keys. It is specified in
1032
0b6b7e10fe5f use HASH_H, not _hash_h_ in #ifndef
Jim Meyering <jim@meyering.net>
parents: 1031
diff changeset
40 hash_initialize. If non-null, it is used by hash_free and
0b6b7e10fe5f use HASH_H, not _hash_h_ in #ifndef
Jim Meyering <jim@meyering.net>
parents: 1031
diff changeset
41 hash_clear. You should specify `free' here only if you want
0b6b7e10fe5f use HASH_H, not _hash_h_ in #ifndef
Jim Meyering <jim@meyering.net>
parents: 1031
diff changeset
42 these functions to free all of your `key' data. This is typically
0b6b7e10fe5f use HASH_H, not _hash_h_ in #ifndef
Jim Meyering <jim@meyering.net>
parents: 1031
diff changeset
43 the case when your key is simply an auxilliary struct that you
0b6b7e10fe5f use HASH_H, not _hash_h_ in #ifndef
Jim Meyering <jim@meyering.net>
parents: 1031
diff changeset
44 have malloc'd to aggregate several values. */
1031
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
45 Hash_key_freer_type hash_key_freer;
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
46
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
47 /* User-supplied hash function that hashes entry E to an integer
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
48 in the range 0..TABLE_SIZE-1. */
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
49 unsigned int (*hash_hash) (const void *e, unsigned int table_size);
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
50
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
51 /* User-supplied function that determines whether a new entry is
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
52 unique by comparing the new entry to entries that hashed to the
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
53 same bucket index. It should return zero for a pair of entries
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
54 that compare equal, non-zero otherwise. */
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
55
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
56 int (*hash_key_comparator) (const void *, const void *);
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
57
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
58 HASH_ENT **hash_table;
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
59 unsigned int hash_table_size;
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
60 unsigned int hash_n_slots_used;
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
61 unsigned int hash_max_chain_length;
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
62
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
63 /* Gets set when an entry is deleted from a chain of length
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
64 hash_max_chain_length. Indicates that hash_max_chain_length
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
65 may no longer be valid. */
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
66 unsigned int hash_dirty_max_chain_length;
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
67
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
68 /* Sum of lengths of all chains (not counting any dummy
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
69 header entries). */
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
70 unsigned int hash_n_keys;
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
71
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
72 /* A linked list of freed HASH_ENT structs.
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
73 FIXME: Perhaps this is unnecessary and we should simply free
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
74 and reallocate such structs. */
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
75 HASH_ENT *hash_free_entry_list;
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
76
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
77 /* FIXME: comment. */
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
78 # ifdef USE_OBSTACK
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
79 struct obstack ht_obstack;
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
80 # endif
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
81 };
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
82
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
83 typedef struct HT HT;
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
84
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
85 unsigned int
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
86 hash_get_n_slots_used (const HT *ht);
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
87
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
88 unsigned int
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
89 hash_get_max_chain_length (HT *ht);
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
90
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
91 int
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
92 hash_rehash (HT *ht, unsigned int new_table_size);
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
93
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
94 unsigned int
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
95 hash_get_table_size (const HT *ht);
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
96
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
97 HT *
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
98 hash_initialize (unsigned int table_size,
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
99 void (*key_freer) (void *key),
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
100 unsigned int (*hash) (const void *, unsigned int),
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
101 int (*equality_tester) (const void *, const void *));
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
102
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
103 unsigned int
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
104 hash_get_n_keys (const HT *ht);
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
105
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
106 int
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
107 hash_query_in_table (const HT *ht, const void *e);
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
108
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
109 void *
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
110 hash_lookup (const HT *ht, const void *e);
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
111
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
112 void *
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
113 hash_insert_if_absent (HT *ht, const void *e, int *failed);
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
114
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
115 void *
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
116 hash_delete_if_present (HT *ht, const void *e);
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
117
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
118 void
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
119 hash_print_statistics (const HT *ht, FILE *stream);
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
120
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
121 int
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
122 hash_get_statistics (const HT *ht, unsigned int *n_slots_used,
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
123 unsigned int *n_keys,
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
124 unsigned int *max_chain_length);
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
125
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
126 int
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
127 hash_table_ok (HT *ht);
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
128
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
129 void
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
130 hash_do_for_each (HT *ht, void (*f) (void *e, void *aux), void *aux);
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
131
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
132 int
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
133 hash_do_for_each_2 (HT *ht, int (*f) (void *e, void *aux), void *aux);
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
134
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
135 int
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
136 hash_do_for_each_in_selected_bucket (HT *ht, const void *key,
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
137 int (*f) (const void *bucket_key,
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
138 void *e, void *aux),
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
139 void *aux);
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
140
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
141 void
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
142 hash_clear (HT *ht);
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
143
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
144 void
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
145 hash_free (HT *ht);
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
146
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
147 void
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
148 hash_get_key_list (const HT *ht, unsigned int bufsize, void **buf);
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
149
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
150 void *
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
151 hash_get_first (const HT *ht);
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
152
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
153 void *
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
154 hash_get_next (const HT *ht, const void *e);
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
155
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
156 /* This interface to hash_insert_if_absent is used frequently enough to
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
157 merit a macro here. */
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
158
1032
0b6b7e10fe5f use HASH_H, not _hash_h_ in #ifndef
Jim Meyering <jim@meyering.net>
parents: 1031
diff changeset
159 # define HASH_INSERT_NEW_ITEM(Ht, Item, Failp) \
1031
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
160 do \
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
161 { \
1032
0b6b7e10fe5f use HASH_H, not _hash_h_ in #ifndef
Jim Meyering <jim@meyering.net>
parents: 1031
diff changeset
162 void *_already; \
0b6b7e10fe5f use HASH_H, not _hash_h_ in #ifndef
Jim Meyering <jim@meyering.net>
parents: 1031
diff changeset
163 _already = hash_insert_if_absent ((Ht), (Item), Failp); \
0b6b7e10fe5f use HASH_H, not _hash_h_ in #ifndef
Jim Meyering <jim@meyering.net>
parents: 1031
diff changeset
164 assert (_already == NULL); \
1031
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
165 } \
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
166 while (0)
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
167
1032
0b6b7e10fe5f use HASH_H, not _hash_h_ in #ifndef
Jim Meyering <jim@meyering.net>
parents: 1031
diff changeset
168 #endif /* HASH_H */