doxygen docu added, cleaned up a bit
[libfirm] / ir / adt / eset.c
1 /*
2  * Project:     libFIRM
3  * File name:   ir/adt/eset.c
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 #include "eset.h"
15 #include "set.h"
16
17
18 struct eset {
19   int dummy; /* dummy entry */
20 };
21
22
23 static const int INITIAL_SLOTS = 64;
24
25
26 static int pcmp(const void ** p1, const void ** p2, size_t size) {
27   return *p1 != *p2;
28 }
29
30
31 eset * eset_create(void) {
32   return (eset *) new_set((set_cmp_fun) pcmp, INITIAL_SLOTS);
33 }
34
35
36 eset * eset_copy(eset * source) {
37   eset * ret = eset_create();
38   void * p;
39   for (p = eset_first(source); p; p = eset_next(source)) {
40     eset_insert(ret, p);
41   }
42   return ret;
43 }
44
45
46 void eset_destroy(eset * s) {
47   del_set((set *) s);
48 }
49
50
51 void eset_insert(eset * s, void * p) {
52   if (!eset_contains(s, p)) {
53     set_insert((set *) s, &p, sizeof(void *), (unsigned) p);
54   }
55 }
56
57
58 bool eset_contains(eset * s, void * p) {
59   return set_find((set *) s, &p, sizeof(void *), (unsigned) p) != NULL;
60 }
61
62
63 void * eset_first(eset * s) {
64   void * p = set_first((set *) s);
65   return p == NULL ? NULL : *((void * *) p);
66 }
67
68
69 void * eset_next(eset *s) {
70   void * p = set_next((set *) s);
71   return p == NULL ? NULL : *((void * *) p);
72 }
73
74
75 void eset_insert_all(eset * target, eset * source) {
76   void * p;
77   for (p = eset_first(source); p; p = eset_next(source)) {
78     eset_insert(target, p);
79   }
80 }