3 * File name: ir/adt/eset.h
4 * Purpose: Datentyp: Vereinfachte Menge (hash-set) zum Speichern von
6 * Author: Hubert Schmid
10 * Copyright: (c) 2002 Universität Karlsruhe
11 * Licence: This file protected by GPL - GNU GENERAL PUBLIC LICENSE.
21 /* "eset" ist eine Menge von Adressen. Der Vergleich und das Hashen
22 * wird über die Adresse gemacht. "NULL" sollte nicht gespeichert
25 typedef struct eset eset;
28 /* Erzeugt eine neue leere Menge. */
29 eset * eset_create(void);
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 *);
35 /* Löscht die Menge. */
36 void eset_destroy(eset *);
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 *);
42 /* Prüft ob eine Adresse in der Menge enthalten ist. */
43 bool eset_contains(eset *, void *);
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
51 * ACHTUNG: Waehrend dem iterieren darf man keine neuen Elemente
53 void * eset_first(eset *);
54 void * eset_next(eset *);
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);