1 /* Declarations for set.
2 Copyright (C) 1995, 1996 Markus Armbruster */
9 typedef struct set set;
11 typedef struct set_entry {
14 int dptr[1]; /* data copied in must not need more
15 alignment than this */
19 typedef int (*set_cmp_fun) (const void *elt, const void *key, size_t size);
21 set *new_set (set_cmp_fun, int slots);
24 void *set_find (set *, const void *key, size_t, unsigned hash);
25 void *set_insert (set *, const void *key, size_t, unsigned hash);
26 set_entry *set_hinsert (set *, const void *key, size_t, unsigned hash);
28 void *set_first (set *);
29 void *set_next (set *);
30 void set_break (set *);
32 #define new_set(cmp, slots) (SET_TRACE (new_set) ((cmp), (slots)))
33 #define set_find(set, key, size, hash) \
34 _set_search ((set), (key), (size), (hash), _set_find)
35 #define set_insert(set, key, size, hash) \
36 _set_search ((set), (key), (size), (hash), _set_insert)
37 #define set_hinsert(set, key, size, hash) \
38 ((set_entry *)_set_search ((set), (key), (size), (hash), _set_hinsert))
40 #define SET_VRFY(set) (void)0
43 void set_stats (set *);
45 # define set_stats(s) ((void)0)
49 void set_describe (set *);
55 typedef enum { _set_find, _set_insert, _set_hinsert } _set_action;
57 void *_set_search (set *, const void *, size_t, unsigned, _set_action);
59 #if defined(DEBUG) && defined(HAVE_GNU_MALLOC)
60 extern const char *set_tag;
62 # define SET_TRACE set_tag = SET_ID,
64 # define SET_TRACE set_tag = __FILE__,
66 #else /* !(DEBUG && HAVE_GNU_MALLOC) */
68 #endif /* !(DEBUG && HAVE_GNU_MALLOC) */