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 pset *new_pset (pset_cmp_fun, int slots);
20 void del_pset (pset *);
22 void *pset_find (pset *, const void *key, unsigned hash);
23 void *pset_insert (pset *, const void *key, unsigned hash);
24 pset_entry *pset_hinsert (pset *, const void *key, unsigned hash);
25 void *pset_remove (pset *, const void *key, unsigned hash);
27 void *pset_first (pset *);
28 void *pset_next (pset *);
29 void pset_break (pset *);
31 #define new_pset(cmp, slots) (PSET_TRACE (new_pset) ((cmp), (slots)))
32 #define pset_find(pset, key, hash) \
33 _pset_search ((pset), (key), (hash), _pset_find)
34 #define pset_insert(pset, key, hash) \
35 _pset_search ((pset), (key), (hash), _pset_insert)
36 #define pset_hinsert(pset, key, hash) \
37 ((pset_entry *)_pset_search ((pset), (key), (hash), _pset_hinsert))
40 void pset_stats (pset *);
42 # define pset_stats(s) ((void)0)
46 void pset_describe (pset *);
50 #define PSET_VRFY(pset) (void)0
55 typedef enum { _pset_find, _pset_insert, _pset_hinsert } _pset_action;
57 void *_pset_search (pset *, const void *, unsigned, _pset_action);
59 #if defined(DEBUG) && defined(HAVE_GNU_MALLOC)
60 extern const char *pset_tag;
62 # define PSET_TRACE pset_tag = SET_ID,
64 # define PSET_TRACE pset_tag = __FILE__,
66 #else /* !(DEBUG && HAVE_GNU_MALLOC) */
68 #endif /* !(DEBUG && HAVE_GNU_MALLOC) */