removed entity_visited flag - use type_visited instead
[libfirm] / ir / adt / set.h
1 /* Declarations for set.
2    Copyright (C) 1995, 1996 Markus Armbruster */
3
4 /* $Id$ */
5
6 #ifndef _SET_H
7 #define _SET_H
8
9 #include <stddef.h>
10
11 typedef struct set set;
12
13 typedef struct set_entry {
14   unsigned hash;
15   size_t size;
16   int dptr[1];                  /* data copied in must not need more
17                                    alignment than this */
18 } set_entry;
19
20
21 typedef int (*set_cmp_fun) (const void *elt, const void *key, size_t size);
22
23 set *new_set (set_cmp_fun, int slots);
24 void del_set (set *);
25
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);
29
30 void *set_first (set *);
31 void *set_next (set *);
32 void set_break (set *);
33
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))
41
42 #define SET_VRFY(set) (void)0
43
44 #ifdef STATS
45 void set_stats (set *);
46 #else
47 # define set_stats(s) ((void)0)
48 #endif
49
50 #ifdef DEBUG
51 void set_describe (set *);
52 #endif
53
54
55 /* Private */
56
57 typedef enum { _set_find, _set_insert, _set_hinsert } _set_action;
58
59 void *_set_search (set *, const void *, size_t, unsigned, _set_action);
60
61 #if defined(DEBUG) && defined(HAVE_GNU_MALLOC)
62 extern const char *set_tag;
63 # ifdef SET_ID
64 #   define SET_TRACE set_tag = SET_ID,
65 # else
66 #   define SET_TRACE set_tag = __FILE__,
67 # endif
68 #else /* !(DEBUG && HAVE_GNU_MALLOC) */
69 #   define SET_TRACE
70 #endif /* !(DEBUG && HAVE_GNU_MALLOC) */
71
72 #endif