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 / erc.c < prev    next >
C/C++ Source or Header  |  1997-09-03  |  2KB  |  162 lines

  1. # include <stdlib.h>
  2. # include "erc.h"
  3.  
  4. erc erc_create (void) 
  5. {
  6.   erc c;
  7.  
  8.   c = (erc) malloc (sizeof (ercInfo));
  9.  
  10.   if (c == 0) 
  11.     {
  12.       printf ("Malloc returned null in erc_create\n");
  13.       exit (1);
  14.     }
  15.   
  16.   c->vals = 0;
  17.   c->size = 0;
  18.   return c;
  19. }
  20.  
  21. void erc_clear (erc c) 
  22. {
  23.   ercList elem;
  24.   ercList next;
  25.  
  26.   for (elem = c->vals; elem != 0; elem = next) 
  27.     {
  28.       next = elem->next;
  29.       free (elem);
  30.     }
  31.   
  32.   c->vals = 0;
  33.   c->size = 0;
  34. }
  35.  
  36. void erc_final (erc c) 
  37. {
  38.   erc_clear (c);
  39.   free (c); 
  40. }
  41.  
  42. bool erc_member (eref er, erc c) 
  43. {
  44.   ercList tmpc;
  45.  
  46.   for (tmpc = c->vals; tmpc != 0; tmpc = tmpc->next)
  47.     if (tmpc->val == er) return TRUE; 
  48.  
  49.   return FALSE;
  50. }
  51.  
  52. void erc_insert (erc c, eref er) 
  53. {
  54.   ercList newElem;
  55.   newElem = (ercElem *) malloc (sizeof (ercElem));
  56.  
  57.   if (newElem == 0) 
  58.     {
  59.       printf ("Malloc returned null in erc_insert\n");
  60.       exit (1);
  61.     }
  62.  
  63.   newElem->val = er;
  64.   newElem->next = c->vals;
  65.   c->vals = newElem;
  66.   c->size++;
  67. }
  68.  
  69. bool erc_delete (erc c, eref er) 
  70. {
  71.   ercList elem;
  72.   ercList prev;
  73.   
  74.   for (prev = 0, elem = c->vals;
  75.        elem != 0;
  76.        prev = elem, elem = elem->next) 
  77.     {
  78.       if (elem->val == er) 
  79.     { 
  80.       if (prev == 0)
  81.         c->vals = elem->next;
  82.       else 
  83.         prev->next = elem->next;
  84.       
  85.       free (elem); 
  86.       c->size--;
  87.       return TRUE;
  88.     }
  89.     }
  90.   
  91.   return FALSE;
  92. }
  93.  
  94. ercIter erc_iterStart (erc c) 
  95. {
  96.   ercIter result;
  97.  
  98.   result = (ercIter) malloc (sizeof (ercList));
  99.  
  100.   if (result == 0) 
  101.     {
  102.       printf ("Malloc returned null in erc_iterStart\n");
  103.       exit (1);
  104.     }
  105.   
  106.   *result = c->vals;
  107.   return result;
  108.  
  109. eref erc_yield (ercIter it) 
  110. {
  111.   eref result;
  112.  
  113.   if (*it == 0) 
  114.     {
  115.       return erefNIL;
  116.       free (it); 
  117.     }
  118.   
  119.   result = (*it)->val;
  120.   *(it) = (*it)->next;
  121.   return result;
  122. }
  123.  
  124. void erc_join (erc c1, erc c2) 
  125. {
  126.   ercList tmpc;
  127.  
  128.   for (tmpc = c2->vals; tmpc != 0; tmpc = tmpc->next)
  129.     erc_insert (c1, tmpc->val);
  130. }
  131.  
  132. char *erc_sprint (erc c)
  133. {
  134.   int len;
  135.   eref er;
  136.   ercIter it;
  137.   char *result;
  138.  
  139.   result = (char *) 
  140.     malloc (erc_size (c) * (employeePrintSize + 1) + 1);
  141.  
  142.   if (result == 0) 
  143.     {
  144.       printf ("Malloc returned null in erc_sprint\n");
  145.       exit (1);
  146.     }
  147.  
  148.   len = 0;
  149.  
  150.   for_ercElems (er, it, c) 
  151.     { 
  152.       employee_sprint (&(result[len]), eref_get (er));
  153.       len += employeePrintSize;
  154.       result[len++] = '\n';
  155.     }
  156.   
  157.   result[len] = '\0';
  158.   return result;
  159. }
  160.  
  161.