home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 10 Tools / 10-Tools.zip / lclint.zip / lclint-2_3h-os2-bin.zip / test / db2 / empset.c < prev    next >
Text File  |  1997-09-03  |  2KB  |  150 lines

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