1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59
|
#ifndef GENERATOR_H
#define GENERATOR_H
#define ARRAY_SIZE(a) (sizeof(a) / sizeof 0 [a])
enum e_Type
{
TYPE_CLASS = 0,
TYPE_INTEGER,
TYPE_BUFFER,
TYPE_LIST,
TYPE_STRING,
TYPE_DOMSTRING
};
struct s_Type_Integer
{
const char *int_type;
};
struct s_Member
{
const char *name;
enum e_Type type;
const char *type_name;
const char *header;
};
/* clang-format off */
#define INIT_MEMBER(NAME, TYPE, TYPE_NAME, HEADER) \
{ \
.name = #NAME, \
.type = TYPE, \
.type_name = #TYPE_NAME, \
.header = HEADER \
}
/* clang-format on */
struct s_Class
{
const char *name;
unsigned n_members;
struct s_Member *members;
const char *source;
const char *header;
};
/* clang-format off */
#define INIT_CLASS(CLASS) \
{ \
.name = #CLASS, \
.n_members = ARRAY_SIZE(CLASS##_members), \
.members = CLASS##_members, \
.source = #CLASS ".c", \
.header = #CLASS ".h", \
}
/* clang-format on */
#endif /* GENERATOR_H */
|