eset.h 1.82 KB
Newer Older
Götz Lindenmaier's avatar
Götz Lindenmaier committed
1
2
3
4
5
6
7
8
9
10
11
12
/*
 * Project:     libFIRM
 * File name:   ir/adt/eset.h
 * Purpose:     Datentyp: Vereinfachte Menge (hash-set) zum Speichern von
 *              Zeigern/Adressen.
 * Author:      Hubert Schmid
 * Modified by:
 * Created:     09.06.2002
 * CVS-ID:      $Id$
 * Copyright:   (c) 2002 Universität Karlsruhe
 * Licence:     This file protected by GPL -  GNU GENERAL PUBLIC LICENSE.
 */
Götz Lindenmaier's avatar
Götz Lindenmaier committed
13
14
15
16
17


#ifndef _ESET_H_
#define _ESET_H_

18
#include <stdbool.h>
Götz Lindenmaier's avatar
Götz Lindenmaier committed
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49


/* "eset" ist eine Menge von Adressen. Der Vergleich und das Hashen
 * wird über die Adresse gemacht. "NULL" sollte nicht gespeichert
 * werden. */

typedef struct eset eset;


/* Erzeugt eine neue leere Menge. */
eset * eset_create(void);

/* Erzeugt eine Kopie der übergebenen Menge. Das Kopieren funktioniert
 * nur, wenn in der übergebenen Menge "NULL" nicht enthalten ist. */
eset * eset_copy(eset *);

/* Löscht die Menge. */
void eset_destroy(eset *);

/* Fügt ein Adresse in die Menge ein, wenn es nicht bereits in der
 * Menge enthalten ist. */
void eset_insert(eset *, void *);

/* Prüft ob eine Adresse in der Menge enthalten ist. */
bool eset_contains(eset *, void *);

/* Mit den Funktionen "eset_first" und "eset_next" kann man durch die
 * Menge iterieren. Die Funktion gibt jeweils die Adresse zurück. Wenn
 * keine weiteren Adressen in der Menge sind, geben die Funktionen
 * "NULL" zurück. Warnung: Man sollte deshalb "NULL" nicht in der
 * Menge speichern, weil man sonst nicht durch die Menge iterieren
Götz Lindenmaier's avatar
Götz Lindenmaier committed
50
51
52
 * kann.
 * ACHTUNG: Waehrend dem iterieren darf man keine neuen Elemente
 * einfuergen!! */
Götz Lindenmaier's avatar
Götz Lindenmaier committed
53
54
55
56
57
58
59
60
61
62
void * eset_first(eset *);
void * eset_next(eset *);

/* Fügt alle Elemente der Menge "source" der Menge "target"
 * hinzu. Diese Funktion funktioniert nur, wenn in der Menge "source"
 * die "NULL"-Adresse nicht enthalten ist. */
void eset_insert_all(eset * target, eset * source);


#endif /* _ESET_H_ */