api refactoring
[m6w6/ext-psi] / src / types / impls.h
1 #ifndef _PSI_TYPES_IMPLS_H
2 #define _PSI_TYPES_IMPLS_H
3
4 typedef struct impls {
5 size_t count;
6 impl **list;
7 } impls;
8
9 static inline impls *add_impl(impls *impls, impl *impl) {
10 if (!impls) {
11 impls = calloc(1, sizeof(*impls));
12 }
13 impls->list = realloc(impls->list, ++impls->count * sizeof(*impls->list));
14 impls->list[impls->count-1] = impl;
15 return impls;
16 }
17
18 static inline void free_impls(impls *impls) {
19 size_t i;
20
21 for (i = 0; i < impls->count; ++i) {
22 free_impl(impls->list[i]);
23 }
24 free(impls->list);
25 free(impls);
26 }
27
28 #endif