3 static bool initDone = FALSE;
5 eref _empset_get (employee e, erc s)
9 employee e1 = eref_get(er);
10 if (employee_equal(&e1, &e))
17 void empset_clear (empset s)
22 bool /*@alt void@*/ empset_insert (empset s, employee e)
24 if (!eref_equal (_empset_get (e, s), erefNIL))
29 empset_insertUnique (s, e);
33 void empset_insertUnique (empset s, employee e)
37 er = ereftab_lookup (e, known);
39 if (eref_equal (er, erefNIL))
43 ereftab_insert (known, e, er);
49 bool /*@alt void@*/ empset_delete (empset s, employee e)
53 er = _empset_get (e, s);
55 if (eref_equal (er, erefNIL))
59 return erc_delete (s, er);
62 empset empset_disjointUnion (empset s1, empset s2)
67 result = erc_create ( );
69 if (erc_size (s1) > erc_size (s2))
76 erc_join (result, s1);
78 empset_elements(s2, emp)
80 empset_insertUnique(result, emp);
81 } end_empset_elements ;
86 empset empset_union (empset s1, empset s2)
91 result = erc_create ();
93 if (erc_size (s1) > erc_size (s2))
99 erc_join (result, s2);
101 empset_elements (s1, emp)
103 if (!empset_member(emp, s2))
104 empset_insert(result, emp);
105 } end_empset_elements ;
110 void empset_intersect (empset s1, empset s2)
112 erc toDelete = erc_create();
114 empset_elements (s2, emp)
116 if (!empset_member(emp, s2))
117 empset_insert(toDelete, emp);
118 } end_empset_elements ;
120 empset_elements (toDelete, emp)
122 empset_delete(s1, emp);
123 } end_empset_elements;
125 erc_final (toDelete);
128 bool empset_subset (empset s1, empset s2)
130 empset_elements(s1, emp)
132 if (!empset_member(emp, s2)) return FALSE;
133 } end_empset_elements ;
138 void empset_initMod (void)
140 if (initDone) return;
147 known = ereftab_create ();