]> andersk Git - splint.git/blob - test/db1/erc.c
Fixed manual csvoverwrite.
[splint.git] / test / db1 / erc.c
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) /*@ensures isnull c->vals, c->elem@*/
22 {
23   ercList elem;
24   ercList next;
25
26   for (elem = c->vals; elem != 0; elem = next) 
27     {
28       next = elem->next; elem->next = NULL;
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; elem->next = 0;
82           } else {
83             prev->next = elem->next; elem->next = 0;
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
110 eref erc_yield (ercIter it) 
111 {
112   eref result;
113
114   if (*it == 0) 
115     {
116       return erefNIL;
117       free (it); 
118     }
119   
120   result = (*it)->val;
121   *(it) = (*it)->next;
122   return result;
123 }
124
125 void erc_join (erc c1, erc c2) 
126 {
127   ercList tmpc;
128
129   for (tmpc = c2->vals; tmpc != 0; tmpc = tmpc->next)
130     erc_insert (c1, tmpc->val);
131 }
132
133 char *erc_sprint (erc c)
134 {
135   int len;
136   eref er;
137   ercIter it;
138   char *result;
139
140   result = (char *) 
141     malloc (erc_size (c) * (employeePrintSize + 1) + 1);
142
143   if (result == 0) 
144     {
145       printf ("Malloc returned null in erc_sprint\n");
146       exit (1);
147     }
148
149   len = 0;
150
151   for_ercElems (er, it, c) 
152     { 
153       employee_sprint (&(result[len]), eref_get (er));
154       len += employeePrintSize;
155       result[len++] = '\n';
156     }
157   
158   result[len] = '\0';
159   return result;
160 }
161
This page took 0.096262 seconds and 5 git commands to generate.