3 * File name: ir/adt/eset.c
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.
19 int dummy; /* dummy entry */
23 static const int INITIAL_SLOTS = 64;
26 static int pcmp(const void ** p1, const void ** p2, size_t size) {
31 eset * eset_create(void) {
32 return (eset *) new_set((set_cmp_fun) pcmp, INITIAL_SLOTS);
36 eset * eset_copy(eset * source) {
37 eset * ret = eset_create();
39 for (p = eset_first(source); p; p = eset_next(source)) {
46 void eset_destroy(eset * s) {
51 void eset_insert(eset * s, void * p) {
52 if (!eset_contains(s, p)) {
53 set_insert((set *) s, &p, sizeof(void *), (unsigned) p);
58 bool eset_contains(eset * s, void * p) {
59 return set_find((set *) s, &p, sizeof(void *), (unsigned) p) != NULL;
63 void * eset_first(eset * s) {
64 void * p = set_first((set *) s);
65 return p == NULL ? NULL : *((void * *) p);
69 void * eset_next(eset *s) {
70 void * p = set_next((set *) s);
71 return p == NULL ? NULL : *((void * *) p);
75 void eset_insert_all(eset * target, eset * source) {
77 for (p = eset_first(source); p; p = eset_next(source)) {
78 eset_insert(target, p);