1 /* Declarations for set.
2 Copyright (C) 1995, 1996 Markus Armbruster */
9 * Declarations for set.
17 /** The type of a set. */
18 typedef struct set set;
20 /** an entry of a set */
21 typedef struct set_entry {
24 int dptr[1]; /**< data copied in must not need more
25 alignment than this */
28 /** the type of a set compare function */
29 typedef int (*set_cmp_fun) (const void *elt, const void *key, size_t size);
31 /** creates a new set */
32 set *new_set (set_cmp_fun, int slots);
37 void *set_find (set *, const void *key, size_t, unsigned hash);
38 void *set_insert (set *, const void *key, size_t, unsigned hash);
39 set_entry *set_hinsert (set *, const void *key, size_t, unsigned hash);
41 /** returns the first element of a set */
42 void *set_first (set *);
44 /** returns the next element of a set */
45 void *set_next (set *);
47 /** breaks the iteration of a set. Must be called before the next set_first() call */
48 void set_break (set *);
50 #define new_set(cmp, slots) (SET_TRACE (new_set) ((cmp), (slots)))
51 #define set_find(set, key, size, hash) \
52 _set_search ((set), (key), (size), (hash), _set_find)
53 #define set_insert(set, key, size, hash) \
54 _set_search ((set), (key), (size), (hash), _set_insert)
55 #define set_hinsert(set, key, size, hash) \
56 ((set_entry *)_set_search ((set), (key), (size), (hash), _set_hinsert))
58 #define SET_VRFY(set) (void)0
61 void set_stats (set *);
63 # define set_stats(s) ((void)0)
67 void set_describe (set *);
73 typedef enum { _set_find, _set_insert, _set_hinsert } _set_action;
75 void *_set_search (set *, const void *, size_t, unsigned, _set_action);
77 #if defined(DEBUG) && defined(HAVE_GNU_MALLOC)
78 extern const char *set_tag;
80 # define SET_TRACE set_tag = SET_ID,
82 # define SET_TRACE set_tag = __FILE__,
84 #else /* !(DEBUG && HAVE_GNU_MALLOC) */
86 #endif /* !(DEBUG && HAVE_GNU_MALLOC) */