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

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