]> andersk Git - splint.git/blob - test/db2/erc.c
Initial revision
[splint.git] / test / db2 / erc.c
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
This page took 0.068233 seconds and 5 git commands to generate.