be85ff6d701096be8115d1abc63c2ec62dd7415e
[libfirm] / ir / adt / eset.h
1 /*
2  * Project:     libFIRM
3  * File name:   ir/adt/eset.h
4  * Purpose:     Datentyp: Vereinfachte Menge (hash-set) zum Speichern von
5  *              Zeigern/Adressen.
6  * Author:      Hubert Schmid
7  * Modified by:
8  * Created:     09.06.2002
9  * CVS-ID:      $Id$
10  * Copyright:   (c) 2002 Universität Karlsruhe
11  * Licence:     This file protected by GPL -  GNU GENERAL PUBLIC LICENSE.
12  */
13
14
15 #ifndef _ESET_H_
16 #define _ESET_H_
17
18 #include <stdbool.h>
19
20
21 /* "eset" ist eine Menge von Adressen. Der Vergleich und das Hashen
22  * wird über die Adresse gemacht. "NULL" sollte nicht gespeichert
23  * werden. */
24
25 typedef struct eset eset;
26
27
28 /* Erzeugt eine neue leere Menge. */
29 eset * eset_create(void);
30
31 /* Erzeugt eine Kopie der übergebenen Menge. Das Kopieren funktioniert
32  * nur, wenn in der übergebenen Menge "NULL" nicht enthalten ist. */
33 eset * eset_copy(eset *);
34
35 /* Löscht die Menge. */
36 void eset_destroy(eset *);
37
38 /* Fügt ein Adresse in die Menge ein, wenn es nicht bereits in der
39  * Menge enthalten ist. */
40 void eset_insert(eset *, void *);
41
42 /* Prüft ob eine Adresse in der Menge enthalten ist. */
43 bool eset_contains(eset *, void *);
44
45 /* Mit den Funktionen "eset_first" und "eset_next" kann man durch die
46  * Menge iterieren. Die Funktion gibt jeweils die Adresse zurück. Wenn
47  * keine weiteren Adressen in der Menge sind, geben die Funktionen
48  * "NULL" zurück. Warnung: Man sollte deshalb "NULL" nicht in der
49  * Menge speichern, weil man sonst nicht durch die Menge iterieren
50  * kann.
51  * ACHTUNG: Waehrend dem iterieren darf man keine neuen Elemente
52  * einfuergen!! */
53 void * eset_first(eset *);
54 void * eset_next(eset *);
55
56 /* Fügt alle Elemente der Menge "source" der Menge "target"
57  * hinzu. Diese Funktion funktioniert nur, wenn in der Menge "source"
58  * die "NULL"-Adresse nicht enthalten ist. */
59 void eset_insert_all(eset * target, eset * source);
60
61
62 #endif /* _ESET_H_ */