1 /* -------------------------------------------------------------------
3 * -------------------------------------------------------------------
4 * Datentyp: Vereinfachte Menge (hash-set) zum Speichern von
7 * Erstellt: Hubert Schmid, 09.06.2002
8 * ---------------------------------------------------------------- */
17 int dummy; /* dummy entry */
21 static const int INITIAL_SLOTS = 64;
24 static int pcmp(const void * * p1, const void * * p2, size_t size) {
25 return *p1 == *p2 ? 0 : 1;
29 eset * eset_create(void) {
30 return (eset *) new_set((set_cmp_fun) pcmp, INITIAL_SLOTS);
34 eset * eset_copy(eset * source) {
35 eset * ret = eset_create();
37 for (p = eset_first(source); p; p = eset_next(source)) {
44 void eset_destroy(eset * s) {
49 void eset_insert(eset * s, void * p) {
50 if (!eset_contains(s, p)) {
51 set_insert((set *) s, &p, sizeof(void *), (unsigned) p);
56 bool eset_contains(eset * s, void * p) {
57 return set_find((set *) s, &p, sizeof(void *), (unsigned) p) != NULL;
61 void * eset_first(eset * s) {
62 void * p = set_first((set *) s);
63 return p == NULL ? NULL : *((void * *) p);
67 void * eset_next(eset *s) {
68 void * p = set_next((set *) s);
69 return p == NULL ? NULL : *((void * *) p);
73 void eset_insert_all(eset * target, eset * source) {
75 for (p = eset_first(source); p; p = eset_next(source)) {
76 eset_insert(target, p);