#ifndef XLUA_H #define XLUA_H #include struct key { enum key_type { KT_NULL, KT_STRING, KT_NUMBER, } type; union { const char *str; double num; } key; enum value_type { VT_STRING, VT_NUMBER, VT_BOOLEAN, } vtype; }; #define _STR(s) #s #define STR(s) _STR(s) #define KEY_STR(k, vt) (struct key){ .type = KT_STRING, .key.str = _STR(k), .vtype = (vt)} #define KEY_NUM(k, vt) (struct key){ .type = KT_NUMBER, .key.mum = (k), .vtype = (vt)} #define KEY_END (struct key){ .type = KT_NULL } void pushtable(lua_State *L, const struct key *keys, ...); void pushsetmember(lua_State *L, int index, const char *name, bool in_set); #endif /* !XLUA_H */