]> andersk Git - splint.git/blob - test/db1/empset.c
noexpand always false.
[splint.git] / test / db1 / empset.c
1 # include "empset.h"
2
3 static bool initDone = FALSE;
4
5 eref _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
21 void empset_clear (empset s) 
22 {
23   erc_clear (s);
24 }
25
26 bool 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
39 void 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
55 bool 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
68 empset 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
91 empset 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
115 void 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
133 bool 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
146 void 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.088574 seconds and 5 git commands to generate.