move backend into libfirm
[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 #ifdef HAVE_CONFIG_H
15 # include "config.h"
16 #endif
17
18 #include "eset.h"
19 #include "set.h"
20 #include "hashptr.h"
21
22 struct eset {
23   int dummy; /* dummy entry */
24 };
25
26
27 #define INITIAL_SLOTS 64
28
29 static int pcmp(const void *p1, const void *p2, size_t size) {
30   const void **q1 = (const void **)p1;
31   const void **q2 = (const void **)p2;
32
33   return *q1 != *q2;
34 }
35
36
37 eset * eset_create(void) {
38   return (eset *) new_set(pcmp, INITIAL_SLOTS);
39 }
40
41
42 eset * eset_copy(eset *source) {
43   eset * ret = eset_create();
44   void * p;
45   for (p = eset_first(source); p; p = eset_next(source)) {
46     eset_insert(ret, p);
47   }
48   return ret;
49 }
50
51
52 void eset_destroy(eset *s) {
53   del_set((set *)s);
54 }
55
56 /* Returns the number of elements in the set. */
57 int eset_count(eset *s) {
58   return set_count((set *)s);
59 }
60
61 void eset_insert(eset *s, void *p) {
62   if (!eset_contains(s, p)) {
63     set_insert((set *)s, &p, sizeof(p), HASH_PTR(p));
64   }
65 }
66
67
68 int eset_contains(eset *s, void *p) {
69   return set_find((set *)s, &p, sizeof(p), HASH_PTR(p)) != NULL;
70 }
71
72
73 void * eset_first(eset *s) {
74   void * p = set_first((set *) s);
75   return p == NULL ? NULL : *((void **)p);
76 }
77
78
79 void * eset_next(eset *s) {
80   void *p = set_next((set *) s);
81   return p == NULL ? NULL : *((void **)p);
82 }
83
84
85 void eset_insert_all(eset *target, eset *source) {
86   void *p;
87   for (p = eset_first(source); p; p = eset_next(source)) {
88     eset_insert(target, p);
89   }
90 }