/* -*- c -*- */
/*
- * Time-stamp: <31.10.2004 22:36:22h liekweg>
+ * Time-stamp: <30.11.2004 14:16:04h liekweg>
* Project: libFIRM
* File name: ir/ana2/qset.h
* Purpose: yet another set implementation
/* typedef unsigned int sortable_t; */
typedef void* sortable_t;
+struct obstack; /* forward decl */
+
typedef struct qset_str
{
+ struct obstack *obst;
sortable_t *values;
int n_slots;
int n_elems;
int is_sorted;
int cursor; /* for qset_start/qset_next */
+ int id;
} qset_t;
-/* QSET INTERFACE */
-/* Print a list of sortables. */
-void q_print (sortable_t*, const int, FILE*);
-
-/* Check whether the given list of sortables is sorted. */
-void q_check (sortable_t*, const int);
-
-/* Test whether the given val is among values. Return the index of
- val in values, or -1. */
-int q_test (sortable_t*, const sortable_t, const int);
-
-/* Sort n_elems entries in 'values' */
-void q_sort (sortable_t*, const int);
-
-/* Merge two sorted lists */
-sortable_t *q_merge (sortable_t*, const int,
- sortable_t*, const int);
-
/* QSET INTERFACE */
-/* Allocate a new qset with initial space for up to n_elems. */
-qset_t *qset_new (const int);
+/* Allocate a new qset with initial space for up to n_elems.
+ If a non-NULL obstack is given, it is used for all allocations of this qset
+ and must be initialised and deleted by the user of the qset. */
+qset_t *qset_new (const int, struct obstack*);
/* Sort the entries of the given qset. */
void qset_sort (qset_t*);
/* Delete the given value from the given qset (if it exists) */
void qset_remove (qset_t*, sortable_t);
-/* Insert the given elem into the given qset. */
-void qset_insert (qset_t*, sortable_t);
+/* Insert the given elem into the given qset; return nonzero iff any involved values change. */
+int qset_insert (qset_t*, sortable_t);
-/* Insert all elems of qset2 into qset1. qset2 is deleted. */
-void qset_insert_all (qset_t*, qset_t*);
+/* Insert all elems of qset2 into qset1. qset2 is deleted; return
+ nonzero iff any involved values change. */
+int qset_insert_all (qset_t*, qset_t*);
/* Compare two qsets. */
int qset_compare (qset_t*, qset_t*);
/* Print the given qset to the given stream. */
void qset_print (qset_t*, FILE*);
+/* Check wether the given qset is empty */
+int qset_is_empty (qset_t*);
+
/*
Iterate over a qset
*/
/*
$Log$
+ Revision 1.5 2004/11/30 14:47:11 liekweg
+ insert report changes
+
+ Revision 1.4 2004/11/24 14:53:56 liekweg
+ Bugfixes
+
+ Revision 1.3 2004/11/18 16:35:46 liekweg
+ Added unique ids for debugging
+
+ Revision 1.2 2004/11/08 12:32:00 liekweg
+ Moved q_* methods into private section
+
Revision 1.1 2004/11/04 14:55:13 liekweg
added qset