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