disabled show after showgraph, as it is (or was?) buggy
[libfirm] / ir / ana2 / qset.h
1 /* -*- c -*- */
2
3 /*
4  * Time-stamp: <30.11.2004 14:16:04h liekweg>
5  * Project:     libFIRM
6  * File name:   ir/ana2/qset.h
7  * Purpose:     yet another set implementation
8  * Author:      Florian
9  * Modified by:
10  * Created:     Mon 18 Oct 2004
11  * CVS-ID:      $Id$
12  * Copyright:   (c) 1999-2004 Universität Karlsruhe
13  * Licence:     This file is protected by GPL -  GNU GENERAL PUBLIC LICENSE.
14  */
15
16 #ifndef _QSET_H_
17 #define _QSET_H_
18
19 # ifndef TRUE
20 #  define TRUE 1
21 #  define FALSE 0
22 # endif /* nof defined TRUE */
23
24 /* define this as needed */
25 # define COMPARE(A,B)       (A<B)
26 # define EQUAL(A,B)       (A==B)
27 /* typedef unsigned int sortable_t; */
28 typedef void* sortable_t;
29
30 struct obstack;                 /* forward decl */
31
32 typedef struct qset_str
33 {
34   struct obstack *obst;
35   sortable_t *values;
36   int n_slots;
37   int n_elems;
38   int is_sorted;
39   int cursor;                   /* for qset_start/qset_next */
40   int id;
41 } qset_t;
42
43
44 /* QSET INTERFACE */
45
46 /* Allocate a new qset with initial space for up to n_elems.
47    If a non-NULL obstack is given, it is used for all allocations of this qset
48    and must be initialised and deleted by the user of the qset. */
49 qset_t *qset_new (const int, struct obstack*);
50
51 /* Sort the entries of the given qset. */
52 void qset_sort (qset_t*);
53
54 /* Compact a qset to take up no more space than required. */
55 void qset_compact (qset_t*);
56
57 /* Free the memory associated with the given qset */
58 void qset_delete (qset_t*);
59
60 /* Test whether the given qset contains the given value. */
61 int qset_contains (qset_t*, sortable_t);
62
63 /* Delete the given value from the given qset (if it exists) */
64 void qset_remove (qset_t*, sortable_t);
65
66 /* Insert the given elem into the given qset; return nonzero iff any involved values change. */
67 int qset_insert (qset_t*, sortable_t);
68
69 /* Insert all elems of qset2 into qset1. qset2 is deleted; return
70    nonzero iff any involved values change. */
71 int qset_insert_all (qset_t*, qset_t*);
72
73 /* Compare two qsets. */
74 int qset_compare (qset_t*, qset_t*);
75
76 /* Returns the union of two qsets. */
77 qset_t *qset_union (qset_t *qset1, qset_t *qset2);
78
79 /* Report the size of the given qset. */
80 int qset_size (qset_t *qset);
81
82 /* Print the given qset to the given stream. */
83 void qset_print (qset_t*, FILE*);
84
85 /* Check wether the given qset is empty */
86 int qset_is_empty (qset_t*);
87
88 /*
89    Iterate over a qset
90 */
91 /* initialise the iteration, return the first element */
92 sortable_t *qset_start (qset_t*);
93 /* step to the next element, return NULL iff no more elems are available */
94 sortable_t *qset_next (qset_t*);
95
96 #endif /* def _QSET_H_ */
97
98 /*
99  $Log$
100  Revision 1.5  2004/11/30 14:47:11  liekweg
101  insert report changes
102
103  Revision 1.4  2004/11/24 14:53:56  liekweg
104  Bugfixes
105
106  Revision 1.3  2004/11/18 16:35:46  liekweg
107  Added unique ids for debugging
108
109  Revision 1.2  2004/11/08 12:32:00  liekweg
110  Moved q_* methods into private section
111
112  Revision 1.1  2004/11/04 14:55:13  liekweg
113  added qset
114
115
116 */