]>
Commit | Line | Data |
---|---|---|
885824d3 | 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 | ||
80ee600a | 21 | void erc_clear (erc c) /*@ensures isnull c->vals, c->elem@*/ |
885824d3 | 22 | { |
23 | ercList elem; | |
24 | ercList next; | |
25 | ||
26 | for (elem = c->vals; elem != 0; elem = next) | |
27 | { | |
80ee600a | 28 | next = elem->next; elem->next = NULL; |
885824d3 | 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 | { | |
80ee600a | 80 | if (prev == 0) { |
81 | c->vals = elem->next; elem->next = 0; | |
82 | } else { | |
83 | prev->next = elem->next; elem->next = 0; | |
84 | } | |
885824d3 | 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 |