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