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