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 / db1 / empset.c < prev    next >
Text File  |  1997-09-03  |  2KB  |  158 lines

  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. }
  158.