blob: 7dcd2c6b9bd000528ae2f1a450af5be954b9d0bf (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
#include "symlist.h"
struct symlist *symlist_create() {
struct symlist *ret;
ret = malloc(sizeof(struct symlist));
ret->size = 2;
ret->pos = 0;
ret->array = malloc(ret->size * sizeof(struct symlist_el));
return ret;
}
void symlist_add(struct symlist *sl, char *name) {
if (sl->pos >= sl->size) {
sl->size *= 2;
sl->array =
realloc(sl->array, sl->size * sizeof(struct symlist_el));
}
sl->array[sl->pos].id = sl->pos + 1;
sl->array[sl->pos].name = name;
sl->array[sl->pos].be = NULL;
sl->pos++;
}
struct symlist_el *symlist_find(struct symlist *sl, char *name) {
int i = 0;
while (i < sl->pos) {
if (!strcmp(name, sl->array[i].name))
return &sl->array[i];
i++;
}
return NULL;
}
void symlist_print(struct symlist *sl) {
int i;
for (i = 0; i < sl->pos; i++) {
printf("%d:%s\n", sl->array[i].id, sl->array[i].name);
if (sl->array[i].be != NULL) {
printf(" ");
boolexp_print(sl->array[i].be);
printf("\n");
}
}
}
void symlist_free(struct symlist *sl) {
free(sl->array);
free(sl);
}
|