0debc0a919dc7c78ef870551059c6c2050ddd330
[m6w6/ext-psi] / src / types / decl_enum_items.h
1 #ifndef _PSI_TYPES_DECL_ENUM_ITEMS_H
2 #define _PSI_TYPES_DECL_ENUM_ITEMS_H
3
4 typedef struct decl_enum_items {
5 decl_enum_item **list;
6 size_t count;
7 } decl_enum_items;
8
9 static inline decl_enum_items *init_decl_enum_items(decl_enum_item *i) {
10 decl_enum_items *l = calloc(1, sizeof(*l));
11
12 if (i) {
13 l->count = 1;
14 l->list = calloc(1, sizeof(*l->list));
15 l->list[0] = i;
16 }
17 return l;
18 }
19
20 static inline decl_enum_items *add_decl_enum_item(decl_enum_items *l, decl_enum_item *i) {
21 l->list = realloc(l->list, sizeof(*l->list) * (l->count + 1));
22 l->list[l->count] = i;
23 if (l->count) {
24 i->prev = l->list[l->count - 1];
25 }
26 ++l->count;
27 return l;
28 }
29
30 static inline void free_decl_enum_items(decl_enum_items *l) {
31 if (l->list) {
32 size_t j;
33
34 for (j = 0; j < l->count; ++j) {
35 free_decl_enum_item(l->list[j]);
36 }
37 free(l->list);
38 }
39 free(l);
40 }
41
42 #endif