inner let vals
[m6w6/ext-psi] / src / types / let_vals.h
1 #ifndef _PSI_TYPES_LET_VALS_H
2 #define _PSI_TYPES_LET_VALS_H
3
4 struct let_val;
5
6 typedef struct let_vals {
7 struct let_val **vals;
8 size_t count;
9 } let_vals;
10
11 static inline let_vals *init_let_vals(struct let_val *val) {
12 let_vals *vals = calloc(1, sizeof(*vals));
13 if (val) {
14 vals->count = 1;
15 vals->vals = calloc(1, sizeof(val));
16 vals->vals[0] = val;
17 }
18 return vals;
19 }
20
21 static inline let_vals *add_let_val(let_vals *vals, struct let_val *val) {
22 if (!vals) {
23 vals = calloc(1, sizeof(*vals));
24 }
25 vals->vals = realloc(vals->vals, ++vals->count * sizeof(val));
26 vals->vals[vals->count-1] = val;
27 return vals;
28 }
29
30 static inline void free_let_vals(let_vals *vals) {
31 if (vals->vals) {
32 size_t i;
33
34 for (i = 0; i < vals->count; ++i) {
35 free_let_val(vals->vals[i]);
36 }
37 free(vals->vals);
38 }
39 free(vals);
40 }
41
42 #endif