annotate lib/hash.h @ 1170:8de2d981b46f

Use PARAMS, not __P.
author Jim Meyering <jim@meyering.net>
date Sun, 21 Dec 1997 11:22:51 +0000
parents c58834e11c55
children 20f35a1b786a
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>
1130
aa231bb87550 add PARAMS around prototype lists
Jim Meyering <jim@meyering.net>
parents: 1032
diff changeset
13 # endif
aa231bb87550 add PARAMS around prototype lists
Jim Meyering <jim@meyering.net>
parents: 1032
diff changeset
14
1168
c58834e11c55 s/HAVE_DECLARATION_/HAVE_DECL_/.
Jim Meyering <jim@meyering.net>
parents: 1130
diff changeset
15 # ifndef HAVE_DECL_FREE
1032
0b6b7e10fe5f use HASH_H, not _hash_h_ in #ifndef
Jim Meyering <jim@meyering.net>
parents: 1031
diff changeset
16 void free ();
1130
aa231bb87550 add PARAMS around prototype lists
Jim Meyering <jim@meyering.net>
parents: 1032
diff changeset
17 # endif
aa231bb87550 add PARAMS around prototype lists
Jim Meyering <jim@meyering.net>
parents: 1032
diff changeset
18
1168
c58834e11c55 s/HAVE_DECLARATION_/HAVE_DECL_/.
Jim Meyering <jim@meyering.net>
parents: 1130
diff changeset
19 # ifndef HAVE_DECL_MALLOC
1032
0b6b7e10fe5f use HASH_H, not _hash_h_ in #ifndef
Jim Meyering <jim@meyering.net>
parents: 1031
diff changeset
20 char *malloc ();
0b6b7e10fe5f use HASH_H, not _hash_h_ in #ifndef
Jim Meyering <jim@meyering.net>
parents: 1031
diff changeset
21 # endif
0b6b7e10fe5f use HASH_H, not _hash_h_ in #ifndef
Jim Meyering <jim@meyering.net>
parents: 1031
diff changeset
22
1170
8de2d981b46f Use PARAMS, not __P.
Jim Meyering <jim@meyering.net>
parents: 1168
diff changeset
23 # ifndef PARAMS
8de2d981b46f Use PARAMS, not __P.
Jim Meyering <jim@meyering.net>
parents: 1168
diff changeset
24 # if defined PROTOTYPES || (defined __STDC__ && __STDC__)
8de2d981b46f Use PARAMS, not __P.
Jim Meyering <jim@meyering.net>
parents: 1168
diff changeset
25 # define PARAMS(Args) Args
8de2d981b46f Use PARAMS, not __P.
Jim Meyering <jim@meyering.net>
parents: 1168
diff changeset
26 # else
8de2d981b46f Use PARAMS, not __P.
Jim Meyering <jim@meyering.net>
parents: 1168
diff changeset
27 # define PARAMS(Args) ()
8de2d981b46f Use PARAMS, not __P.
Jim Meyering <jim@meyering.net>
parents: 1168
diff changeset
28 # endif
8de2d981b46f Use PARAMS, not __P.
Jim Meyering <jim@meyering.net>
parents: 1168
diff changeset
29 # endif
8de2d981b46f Use PARAMS, not __P.
Jim Meyering <jim@meyering.net>
parents: 1168
diff changeset
30
1032
0b6b7e10fe5f use HASH_H, not _hash_h_ in #ifndef
Jim Meyering <jim@meyering.net>
parents: 1031
diff changeset
31 # define USE_OBSTACK
1031
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
32 # ifdef USE_OBSTACK
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
33 # include "obstack.h"
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
34 # endif
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
35
1032
0b6b7e10fe5f use HASH_H, not _hash_h_ in #ifndef
Jim Meyering <jim@meyering.net>
parents: 1031
diff changeset
36 # define obstack_chunk_alloc malloc
1031
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
37 # define obstack_chunk_free free
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 struct hash_ent
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
40 {
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
41 void *key;
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
42 struct hash_ent *next;
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
43 };
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
44 typedef struct hash_ent HASH_ENT;
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
45
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
46 /* This is particularly useful to cast uses in hash_initialize of the
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
47 system free function. */
1130
aa231bb87550 add PARAMS around prototype lists
Jim Meyering <jim@meyering.net>
parents: 1032
diff changeset
48 typedef void (*Hash_key_freer_type) PARAMS((void *key));
1031
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
49
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
50 struct HT
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
51 {
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
52 /* 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
53 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
54 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
55 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
56 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
57 have malloc'd to aggregate several values. */
1031
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
58 Hash_key_freer_type hash_key_freer;
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
59
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
60 /* User-supplied hash function that hashes entry E to an integer
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
61 in the range 0..TABLE_SIZE-1. */
1130
aa231bb87550 add PARAMS around prototype lists
Jim Meyering <jim@meyering.net>
parents: 1032
diff changeset
62 unsigned int (*hash_hash) PARAMS((const void *e, unsigned int table_size));
1031
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
63
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
64 /* User-supplied function that determines whether a new entry is
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
65 unique by comparing the new entry to entries that hashed to the
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
66 same bucket index. It should return zero for a pair of entries
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
67 that compare equal, non-zero otherwise. */
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
68
1130
aa231bb87550 add PARAMS around prototype lists
Jim Meyering <jim@meyering.net>
parents: 1032
diff changeset
69 int (*hash_key_comparator) PARAMS((const void *, const void *));
1031
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
70
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
71 HASH_ENT **hash_table;
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
72 unsigned int hash_table_size;
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
73 unsigned int hash_n_slots_used;
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
74 unsigned int hash_max_chain_length;
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
75
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
76 /* Gets set when an entry is deleted from a chain of length
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
77 hash_max_chain_length. Indicates that hash_max_chain_length
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
78 may no longer be valid. */
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
79 unsigned int hash_dirty_max_chain_length;
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
80
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
81 /* Sum of lengths of all chains (not counting any dummy
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
82 header entries). */
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
83 unsigned int hash_n_keys;
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 /* A linked list of freed HASH_ENT structs.
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
86 FIXME: Perhaps this is unnecessary and we should simply free
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
87 and reallocate such structs. */
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
88 HASH_ENT *hash_free_entry_list;
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
89
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
90 /* FIXME: comment. */
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
91 # ifdef USE_OBSTACK
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
92 struct obstack ht_obstack;
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
93 # endif
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
94 };
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
95
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
96 typedef struct HT HT;
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
97
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
98 unsigned int
1130
aa231bb87550 add PARAMS around prototype lists
Jim Meyering <jim@meyering.net>
parents: 1032
diff changeset
99 hash_get_n_slots_used PARAMS((const HT *ht));
1031
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
100
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
101 unsigned int
1130
aa231bb87550 add PARAMS around prototype lists
Jim Meyering <jim@meyering.net>
parents: 1032
diff changeset
102 hash_get_max_chain_length PARAMS((HT *ht));
1031
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
103
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
104 int
1130
aa231bb87550 add PARAMS around prototype lists
Jim Meyering <jim@meyering.net>
parents: 1032
diff changeset
105 hash_rehash PARAMS((HT *ht, unsigned int new_table_size));
1031
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
106
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
107 unsigned int
1130
aa231bb87550 add PARAMS around prototype lists
Jim Meyering <jim@meyering.net>
parents: 1032
diff changeset
108 hash_get_table_size PARAMS((const HT *ht));
1031
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
109
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
110 HT *
1130
aa231bb87550 add PARAMS around prototype lists
Jim Meyering <jim@meyering.net>
parents: 1032
diff changeset
111 hash_initialize PARAMS((unsigned int table_size,
aa231bb87550 add PARAMS around prototype lists
Jim Meyering <jim@meyering.net>
parents: 1032
diff changeset
112 void (*key_freer) PARAMS((void *key)),
aa231bb87550 add PARAMS around prototype lists
Jim Meyering <jim@meyering.net>
parents: 1032
diff changeset
113 unsigned int (*hash) PARAMS((const void *,
aa231bb87550 add PARAMS around prototype lists
Jim Meyering <jim@meyering.net>
parents: 1032
diff changeset
114 unsigned int)),
aa231bb87550 add PARAMS around prototype lists
Jim Meyering <jim@meyering.net>
parents: 1032
diff changeset
115 int (*equality_tester) PARAMS((const void *,
aa231bb87550 add PARAMS around prototype lists
Jim Meyering <jim@meyering.net>
parents: 1032
diff changeset
116 const void *))));
1031
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 unsigned int
1130
aa231bb87550 add PARAMS around prototype lists
Jim Meyering <jim@meyering.net>
parents: 1032
diff changeset
119 hash_get_n_keys PARAMS((const HT *ht));
1031
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
1130
aa231bb87550 add PARAMS around prototype lists
Jim Meyering <jim@meyering.net>
parents: 1032
diff changeset
122 hash_query_in_table PARAMS((const HT *ht, const void *e));
aa231bb87550 add PARAMS around prototype lists
Jim Meyering <jim@meyering.net>
parents: 1032
diff changeset
123
aa231bb87550 add PARAMS around prototype lists
Jim Meyering <jim@meyering.net>
parents: 1032
diff changeset
124 void *
aa231bb87550 add PARAMS around prototype lists
Jim Meyering <jim@meyering.net>
parents: 1032
diff changeset
125 hash_lookup PARAMS((const HT *ht, const void *e));
1031
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
126
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
127 void *
1130
aa231bb87550 add PARAMS around prototype lists
Jim Meyering <jim@meyering.net>
parents: 1032
diff changeset
128 hash_insert_if_absent PARAMS((HT *ht,
aa231bb87550 add PARAMS around prototype lists
Jim Meyering <jim@meyering.net>
parents: 1032
diff changeset
129 const void *e,
aa231bb87550 add PARAMS around prototype lists
Jim Meyering <jim@meyering.net>
parents: 1032
diff changeset
130 int *failed));
1031
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 void *
1130
aa231bb87550 add PARAMS around prototype lists
Jim Meyering <jim@meyering.net>
parents: 1032
diff changeset
133 hash_delete_if_present PARAMS((HT *ht, const void *e));
1031
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 void
1130
aa231bb87550 add PARAMS around prototype lists
Jim Meyering <jim@meyering.net>
parents: 1032
diff changeset
136 hash_print_statistics PARAMS((const HT *ht, FILE *stream));
1031
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
137
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
138 int
1130
aa231bb87550 add PARAMS around prototype lists
Jim Meyering <jim@meyering.net>
parents: 1032
diff changeset
139 hash_get_statistics PARAMS((const HT *ht, unsigned int *n_slots_used,
aa231bb87550 add PARAMS around prototype lists
Jim Meyering <jim@meyering.net>
parents: 1032
diff changeset
140 unsigned int *n_keys,
aa231bb87550 add PARAMS around prototype lists
Jim Meyering <jim@meyering.net>
parents: 1032
diff changeset
141 unsigned int *max_chain_length));
1031
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
142
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
143 int
1130
aa231bb87550 add PARAMS around prototype lists
Jim Meyering <jim@meyering.net>
parents: 1032
diff changeset
144 hash_table_ok PARAMS((HT *ht));
1031
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
145
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
146 void
1130
aa231bb87550 add PARAMS around prototype lists
Jim Meyering <jim@meyering.net>
parents: 1032
diff changeset
147 hash_do_for_each PARAMS((HT *ht,
aa231bb87550 add PARAMS around prototype lists
Jim Meyering <jim@meyering.net>
parents: 1032
diff changeset
148 void (*f) PARAMS((void *e, void *aux)),
aa231bb87550 add PARAMS around prototype lists
Jim Meyering <jim@meyering.net>
parents: 1032
diff changeset
149 void *aux));
1031
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
150
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
151 int
1130
aa231bb87550 add PARAMS around prototype lists
Jim Meyering <jim@meyering.net>
parents: 1032
diff changeset
152 hash_do_for_each_2 PARAMS((HT *ht,
aa231bb87550 add PARAMS around prototype lists
Jim Meyering <jim@meyering.net>
parents: 1032
diff changeset
153 int (*f) PARAMS((void *e, void *aux)),
aa231bb87550 add PARAMS around prototype lists
Jim Meyering <jim@meyering.net>
parents: 1032
diff changeset
154 void *aux));
1031
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 int
1130
aa231bb87550 add PARAMS around prototype lists
Jim Meyering <jim@meyering.net>
parents: 1032
diff changeset
157 hash_do_for_each_in_selected_bucket PARAMS((HT *ht,
aa231bb87550 add PARAMS around prototype lists
Jim Meyering <jim@meyering.net>
parents: 1032
diff changeset
158 const void *key,
aa231bb87550 add PARAMS around prototype lists
Jim Meyering <jim@meyering.net>
parents: 1032
diff changeset
159 int (*f) PARAMS((const void *bucket_key,
aa231bb87550 add PARAMS around prototype lists
Jim Meyering <jim@meyering.net>
parents: 1032
diff changeset
160 void *e,
aa231bb87550 add PARAMS around prototype lists
Jim Meyering <jim@meyering.net>
parents: 1032
diff changeset
161 void *aux)),
aa231bb87550 add PARAMS around prototype lists
Jim Meyering <jim@meyering.net>
parents: 1032
diff changeset
162 void *aux));
1031
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
163
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
164 void
1130
aa231bb87550 add PARAMS around prototype lists
Jim Meyering <jim@meyering.net>
parents: 1032
diff changeset
165 hash_clear PARAMS((HT *ht));
1031
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
166
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
167 void
1130
aa231bb87550 add PARAMS around prototype lists
Jim Meyering <jim@meyering.net>
parents: 1032
diff changeset
168 hash_free PARAMS((HT *ht));
1031
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
169
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
170 void
1130
aa231bb87550 add PARAMS around prototype lists
Jim Meyering <jim@meyering.net>
parents: 1032
diff changeset
171 hash_get_key_list PARAMS((const HT *ht,
aa231bb87550 add PARAMS around prototype lists
Jim Meyering <jim@meyering.net>
parents: 1032
diff changeset
172 unsigned int bufsize,
aa231bb87550 add PARAMS around prototype lists
Jim Meyering <jim@meyering.net>
parents: 1032
diff changeset
173 void **buf));
1031
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
174
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
175 void *
1130
aa231bb87550 add PARAMS around prototype lists
Jim Meyering <jim@meyering.net>
parents: 1032
diff changeset
176 hash_get_first PARAMS((const HT *ht));
1031
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
177
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
178 void *
1130
aa231bb87550 add PARAMS around prototype lists
Jim Meyering <jim@meyering.net>
parents: 1032
diff changeset
179 hash_get_next PARAMS((const HT *ht, const void *e));
1031
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
180
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
181 /* This interface to hash_insert_if_absent is used frequently enough to
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
182 merit a macro here. */
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
183
1032
0b6b7e10fe5f use HASH_H, not _hash_h_ in #ifndef
Jim Meyering <jim@meyering.net>
parents: 1031
diff changeset
184 # define HASH_INSERT_NEW_ITEM(Ht, Item, Failp) \
1031
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
185 do \
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
186 { \
1032
0b6b7e10fe5f use HASH_H, not _hash_h_ in #ifndef
Jim Meyering <jim@meyering.net>
parents: 1031
diff changeset
187 void *_already; \
0b6b7e10fe5f use HASH_H, not _hash_h_ in #ifndef
Jim Meyering <jim@meyering.net>
parents: 1031
diff changeset
188 _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
189 assert (_already == NULL); \
1031
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
190 } \
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
191 while (0)
e34b8e81638f from ti/hdlsv
Jim Meyering <jim@meyering.net>
parents:
diff changeset
192
1032
0b6b7e10fe5f use HASH_H, not _hash_h_ in #ifndef
Jim Meyering <jim@meyering.net>
parents: 1031
diff changeset
193 #endif /* HASH_H */