]> andersk Git - splint.git/blob - test/db2/empset.c
Initial revision
[splint.git] / test / db2 / empset.c
1 # include "empset.h"
2
3 static bool initDone = FALSE;
4
5 eref _empset_get (employee e, erc s) 
6 {
7   erc_elements(s, er)
8     {
9       employee e1 = eref_get(er);
10       if (employee_equal(&e1, &e))
11         return er;
12     } end_erc_elements ;
13   
14   return erefNIL;
15 }
16
17 void empset_clear (empset s) 
18 {
19   erc_clear (s);
20 }
21
22 bool /*@alt void@*/ empset_insert (empset s, employee e) 
23 {
24   if (!eref_equal (_empset_get (e, s), erefNIL)) 
25     {
26       return FALSE;
27     }
28   
29   empset_insertUnique (s, e);
30   return TRUE;
31 }
32
33 void empset_insertUnique (empset s, employee e) 
34 {
35   eref er;
36
37   er = ereftab_lookup (e, known);
38
39   if (eref_equal (er, erefNIL)) 
40     {
41       er = eref_alloc ( );
42       eref_assign (er,e);
43       ereftab_insert (known, e, er);
44     }
45   
46   erc_insert (s, er);
47 }
48
49 bool /*@alt void@*/ empset_delete (empset s, employee e) 
50 {
51   eref er;
52
53   er = _empset_get (e, s);
54
55   if (eref_equal (er, erefNIL)) 
56     {
57       return FALSE;
58     }
59   return erc_delete (s, er);
60 }
61
62 empset empset_disjointUnion (empset s1, empset s2) 
63 {
64   erc result;
65   empset tmp;
66   
67   result = erc_create ( );
68
69   if (erc_size (s1) > erc_size (s2)) 
70     {
71       tmp = s1;
72       s1 = s2;
73       s2 = tmp;
74     }
75   
76   erc_join (result, s1);
77
78   empset_elements(s2, emp)
79     {
80       empset_insertUnique(result, emp);
81     } end_empset_elements ;
82
83   return result;
84 }
85
86 empset empset_union (empset s1, empset s2) 
87 {
88   erc result;
89   empset tmp;
90
91   result = erc_create ();
92
93   if (erc_size (s1) > erc_size (s2)) 
94     {
95       tmp = s1;
96       s1 = s2;
97       s2 = tmp;
98     }
99   erc_join (result, s2);
100
101   empset_elements (s1, emp)
102     {
103       if (!empset_member(emp, s2))
104         empset_insert(result, emp);
105     } end_empset_elements ;
106
107   return result;
108 }
109
110 void empset_intersect (empset s1, empset s2) 
111 {
112   erc toDelete = erc_create();
113
114   empset_elements (s2, emp)
115     {
116       if (!empset_member(emp, s2))
117         empset_insert(toDelete, emp);
118     } end_empset_elements ;
119
120   empset_elements (toDelete, emp)
121     {
122       empset_delete(s1, emp);
123     } end_empset_elements;
124
125   erc_final (toDelete);
126 }
127
128 bool empset_subset (empset s1, empset s2) 
129 {
130   empset_elements(s1, emp)
131     {
132       if (!empset_member(emp, s2)) return FALSE;
133     } end_empset_elements ;
134
135   return TRUE;
136 }
137
138 void empset_initMod (void) 
139 {
140   if (initDone) return;
141
142   bool_initMod ();
143   employee_initMod ();
144   eref_initMod ();
145   erc_initMod ();
146   ereftab_initMod ();
147   known = ereftab_create ();
148   initDone = TRUE;
149 }
This page took 0.057064 seconds and 5 git commands to generate.