6 KND_MMGRS, KND_FMGRS, KND_MNON, KND_FNON
9 /*@constant static employeeKinds firstERC;@*/
10 # define firstERC KND_MMGRS
12 /*@constant static employeeKinds lastERC;@*/
13 # define lastERC KND_FNON
15 /*@constant static int numERCS;@*/
16 # define numERCS (/*@+enumint@*/ (lastERC - firstERC + 1) /*@=enumint@*/)
18 typedef /*@only@*/ erc o_erc;
19 static o_erc db[numERCS];
21 /*@iter employeeKinds_all (yield employeeKinds ek); @*/
22 # define employeeKinds_all(m_ek) \
23 { employeeKinds m_ek; for (m_ek = firstERC; m_ek <= lastERC; m_ek++) {
25 # define end_employeeKinds_all }}
27 static bool initDone = FALSE;
29 void db_initMod (void)
30 /*@globals initDone, undef db, internalState@*/
31 /*@modifies initDone, db, internalState@*/
44 employeeKinds_all (ek)
46 db[(int)ek] = erc_create ();
47 } end_employeeKinds_all ;
52 static eref db_ercKeyGet(erc c, int key) /*@*/
56 if (eref_get(er).ssNum == key)
62 return eref_undefined;
65 static eref db_keyGet (int key) /*@globals db@*/
69 employeeKinds_all (ek)
71 er = db_ercKeyGet (db[(int) ek], key);
73 if (eref_isDefined (er))
77 } end_employeeKinds_all ;
79 return eref_undefined;
82 static int db_addEmpls (erc c, int l, int h, empset s)
83 /*@globals internalState@*/
84 /*@modifies s, internalState@*/
93 if ((e.salary >= l) && (e.salary <= h))
103 db_status db_hire (employee e) /*@globals db@*/
105 if (e.gen == GENDER_UNKNOWN)
107 return DBS_GENDERERR;
110 if (e.j == JOB_UNKNOWN)
120 if (eref_isDefined (db_keyGet (e.ssNum)))
125 db_uncheckedHire (e);
129 void db_uncheckedHire (employee e)
130 /*@globals db@*/ /*@modifies db@*/
141 erc_insert (db[(int) KND_MMGRS], er);
145 erc_insert (db[(int) KND_MNON], er);
152 erc_insert (db[(int) KND_FMGRS], er);
156 erc_insert (db[(int) KND_FNON], er);
161 bool db_fire (int ssNum)
162 /*@globals db@*/ /*@modifies db@*/
164 employeeKinds_all (ek)
166 erc_elements (db[(int) ek], er)
168 if (eref_get(er).ssNum == ssNum)
170 erc_delete (db[(int) ek], er);
174 } end_employeeKinds_all ;
179 bool db_promote (int ssNum)
180 /*@globals db@*/ /*@modifies db@*/
187 er = db_ercKeyGet (db[(int) KND_MNON], ssNum);
189 if (!eref_isDefined (er))
191 er = db_ercKeyGet (db[(int) KND_FNON], ssNum);
193 if (!eref_isDefined (er))
207 erc_delete (db[(int) KND_MNON], er);
208 erc_insert (db[(int) KND_MMGRS], er);
212 erc_delete (db[(int) KND_FNON], er);
213 erc_insert (db[(int) KND_FMGRS], er);
219 db_status db_setSalary (int ssNum, int sal) /*@globals db@*/
229 er = db_keyGet (ssNum);
231 if (!eref_isDefined (er))
243 int db_query (db_q q, empset s)
260 employeeKinds_all (ek)
262 numAdded += db_addEmpls (db[(int) ek], l, h, s);
263 } end_employeeKinds_all
267 numAdded = db_addEmpls (db[(int) KND_MMGRS], l, h, s);
268 numAdded += db_addEmpls (db[(int) KND_FMGRS], l, h, s);
271 numAdded = db_addEmpls (db[(int) KND_MNON], l, h, s);
272 numAdded += db_addEmpls (db[(int) KND_FNON], l, h, s);
279 numAdded = db_addEmpls (db[(int) KND_MMGRS], l, h, s);
280 numAdded += db_addEmpls (db[(int) KND_MNON], l, h, s);
283 return db_addEmpls (db[(int) KND_MMGRS], l, h, s);
285 return db_addEmpls (db[(int) KND_MNON], l, h, s);
291 numAdded = db_addEmpls (db[(int) KND_FMGRS], l, h, s);
292 numAdded += db_addEmpls (db[(int) KND_FNON], l, h, s);
295 return db_addEmpls (db[(int) KND_FMGRS], l, h, s);
297 return db_addEmpls (db[(int) KND_FNON], l, h, s);
307 printf ("Employees:\n");
309 employeeKinds_all (ek)
311 printVal = erc_sprint (db[(int) ek]);
312 printf ("%s", printVal);
314 } end_employeeKinds_all ;