3 static bool initDone = FALSE;
5 eref _empset_get (employee e, erc s)
11 for_ercElems (er, it, s)
14 if (employee_equal (&e1, &e))
15 erc_iterReturn (it, er);
21 void empset_clear (empset s)
26 bool empset_insert (empset s, employee e)
30 if (!eref_equal (_empset_get (e, s), erefNIL))
35 empset_insertUnique (s, e);
39 void empset_insertUnique (empset s, employee e)
43 er = ereftab_lookup (e, known);
45 if (eref_equal (er, erefNIL))
49 ereftab_insert (known, e, er);
55 bool empset_delete (empset s, employee e)
59 er = _empset_get (e, s);
61 if (eref_equal (er, erefNIL))
65 return erc_delete (s, er);
68 empset empset_disjointUnion (empset s1, empset s2)
75 result = erc_create ( );
77 if (erc_size (s1) > erc_size (s2))
84 erc_join (result, s1);
85 for_ercElems (er, it, s2)
86 empset_insertUnique (result, eref_get (er));
91 empset empset_union (empset s1, empset s2)
98 result = erc_create ();
100 if (erc_size (s1) > erc_size (s2))
106 erc_join (result, s2);
108 for_ercElems (er, it, s1)
109 if (!empset_member (eref_get (er), s2))
110 erc_insert (result, er);
115 void empset_intersect (empset s1, empset s2)
121 toDelete = erc_create ();
123 for_ercElems (er, it, s1)
124 if (!empset_member (eref_get (er), s2))
125 erc_insert (toDelete, er);
127 for_ercElems (er, it, toDelete)
130 erc_final (toDelete);
133 bool empset_subset (empset s1, empset s2)
139 for_ercElems (er, it, s1)
140 if (!empset_member (eref_get (er), s2))
141 erc_iterReturn (it, FALSE);
146 void empset_initMod (void)
148 if (initDone) return;
155 known = ereftab_create ();