converted comments to doxygen
[libfirm] / ir / adt / set.h
1 /* Declarations for set.
2    Copyright (C) 1995, 1996 Markus Armbruster */
3
4 /* $Id$ */
5
6 /**
7  * @file set.h
8  *
9  * Declarations for set.
10  */
11
12 #ifndef _SET_H
13 #define _SET_H
14
15 #include <stddef.h>
16
17 /** The type of a set. */
18 typedef struct set set;
19
20 /** an entry of a set */
21 typedef struct set_entry {
22   unsigned hash;
23   size_t size;
24   int dptr[1];                  /**< data copied in must not need more
25                                    alignment than this */
26 } set_entry;
27
28 /** the type of a set compare function */
29 typedef int (*set_cmp_fun) (const void *elt, const void *key, size_t size);
30
31 /** creates a new set */
32 set *new_set (set_cmp_fun, int slots);
33
34 /** deletes a set */
35 void del_set (set *);
36
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);
40
41 /** returns the first element of a set */
42 void *set_first (set *);
43
44 /** returns the next element of a set */
45 void *set_next (set *);
46
47 /** breaks the iteration of a set. Must be called before the next set_first() call */
48 void set_break (set *);
49
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))
57
58 #define SET_VRFY(set) (void)0
59
60 #ifdef STATS
61 void set_stats (set *);
62 #else
63 # define set_stats(s) ((void)0)
64 #endif
65
66 #ifdef DEBUG
67 void set_describe (set *);
68 #endif
69
70
71 /* Private */
72
73 typedef enum { _set_find, _set_insert, _set_hinsert } _set_action;
74
75 void *_set_search (set *, const void *, size_t, unsigned, _set_action);
76
77 #if defined(DEBUG) && defined(HAVE_GNU_MALLOC)
78 extern const char *set_tag;
79 # ifdef SET_ID
80 #   define SET_TRACE set_tag = SET_ID,
81 # else
82 #   define SET_TRACE set_tag = __FILE__,
83 # endif
84 #else /* !(DEBUG && HAVE_GNU_MALLOC) */
85 #   define SET_TRACE
86 #endif /* !(DEBUG && HAVE_GNU_MALLOC) */
87
88 #endif