1 /* Declarations for pset.
2 Copyright (C) 1995, 1996 Markus Armbruster */
9 typedef struct pset pset;
17 typedef int (*pset_cmp_fun) (const void *, const void *);
19 /* Makes new hash table. Needs function to compare two nodes to
20 resolve hash value collision and the size. */
21 pset *new_pset (pset_cmp_fun, int slots);
22 /* Deletes hash table */
23 void del_pset (pset *);
25 /* Returns the pointer associated with pointer key. Hash is
26 the hash value computed from key. Returns Null if key not
28 void *pset_find (pset *, const void *key, unsigned hash);
29 void *pset_insert (pset *, const void *key, unsigned hash);
30 pset_entry *pset_hinsert (pset *, const void *key, unsigned hash);
31 void *pset_remove (pset *, const void *key, unsigned hash);
33 void *pset_first (pset *);
34 void *pset_next (pset *);
35 void pset_break (pset *);
37 #define new_pset(cmp, slots) (PSET_TRACE (new_pset) ((cmp), (slots)))
38 #define pset_find(pset, key, hash) \
39 _pset_search ((pset), (key), (hash), _pset_find)
40 #define pset_insert(pset, key, hash) \
41 _pset_search ((pset), (key), (hash), _pset_insert)
42 #define pset_hinsert(pset, key, hash) \
43 ((pset_entry *)_pset_search ((pset), (key), (hash), _pset_hinsert))
46 void pset_stats (pset *);
48 # define pset_stats(s) ((void)0)
52 void pset_describe (pset *);
56 #define PSET_VRFY(pset) (void)0
61 typedef enum { _pset_find, _pset_insert, _pset_hinsert } _pset_action;
63 void *_pset_search (pset *, const void *, unsigned, _pset_action);
65 #if defined(DEBUG) && defined(HAVE_GNU_MALLOC)
66 extern const char *pset_tag;
68 # define PSET_TRACE pset_tag = SET_ID,
70 # define PSET_TRACE pset_tag = __FILE__,
72 #else /* !(DEBUG && HAVE_GNU_MALLOC) */
74 #endif /* !(DEBUG && HAVE_GNU_MALLOC) */