api refactoring
[m6w6/ext-psi] / src / types / free_calls.h
1 #ifndef _PSI_TYPES_FREE_CALLS_H
2 #define _PSI_TYPES_FREE_CALLS_H
3
4 typedef struct free_calls {
5 free_call **list;
6 size_t count;
7 } free_calls;
8
9 static inline free_calls *init_free_calls(free_call *f) {
10 free_calls *fcs = calloc(1, sizeof(*fcs));
11 if (f) {
12 fcs->count = 1;
13 fcs->list = calloc(1, sizeof(*fcs->list));
14 fcs->list[0] = f;
15 }
16 return fcs;
17 }
18
19 static inline void free_free_calls(free_calls *fcs) {
20 size_t i;
21
22 for (i = 0; i < fcs->count; ++i) {
23 free_free_call(fcs->list[i]);
24 }
25 free(fcs->list);
26 free(fcs);
27 }
28
29 static inline free_calls *add_free_call(free_calls *fcs, free_call *f) {
30 fcs->list = realloc(fcs->list, ++fcs->count * sizeof(*fcs->list));
31 fcs->list[fcs->count-1] = f;
32 return fcs;
33 }
34
35 #endif