53 #define MKCREFLECT_EXPAND_(X) X 54 #define MKCREFLECT_EXPAND_VA_(...) __VA_ARGS__ 55 #define MKCREFLECT_FOREACH_1_(FNC, USER_DATA, ARG) FNC(ARG, USER_DATA) 56 #define MKCREFLECT_FOREACH_2_(FNC, USER_DATA, ARG, ...) \ 57 FNC(ARG, USER_DATA) MKCREFLECT_EXPAND_(MKCREFLECT_FOREACH_1_(FNC, USER_DATA, __VA_ARGS__)) 58 #define MKCREFLECT_FOREACH_3_(FNC, USER_DATA, ARG, ...) \ 59 FNC(ARG, USER_DATA) MKCREFLECT_EXPAND_(MKCREFLECT_FOREACH_2_(FNC, USER_DATA, __VA_ARGS__)) 60 #define MKCREFLECT_FOREACH_4_(FNC, USER_DATA, ARG, ...) \ 61 FNC(ARG, USER_DATA) MKCREFLECT_EXPAND_(MKCREFLECT_FOREACH_3_(FNC, USER_DATA, __VA_ARGS__)) 62 #define MKCREFLECT_FOREACH_5_(FNC, USER_DATA, ARG, ...) \ 63 FNC(ARG, USER_DATA) MKCREFLECT_EXPAND_(MKCREFLECT_FOREACH_4_(FNC, USER_DATA, __VA_ARGS__)) 64 #define MKCREFLECT_FOREACH_6_(FNC, USER_DATA, ARG, ...) \ 65 FNC(ARG, USER_DATA) MKCREFLECT_EXPAND_(MKCREFLECT_FOREACH_5_(FNC, USER_DATA, __VA_ARGS__)) 66 #define MKCREFLECT_FOREACH_7_(FNC, USER_DATA, ARG, ...) \ 67 FNC(ARG, USER_DATA) MKCREFLECT_EXPAND_(MKCREFLECT_FOREACH_6_(FNC, USER_DATA, __VA_ARGS__)) 68 #define MKCREFLECT_FOREACH_8_(FNC, USER_DATA, ARG, ...) \ 69 FNC(ARG, USER_DATA) MKCREFLECT_EXPAND_(MKCREFLECT_FOREACH_7_(FNC, USER_DATA, __VA_ARGS__)) 70 #define MKCREFLECT_FOREACH_9_(FNC, USER_DATA, ARG, ...) \ 71 FNC(ARG, USER_DATA) MKCREFLECT_EXPAND_(MKCREFLECT_FOREACH_8_(FNC, USER_DATA, __VA_ARGS__)) 72 #define MKCREFLECT_FOREACH_10_(FNC, USER_DATA, ARG, ...) \ 73 FNC(ARG, USER_DATA) MKCREFLECT_EXPAND_(MKCREFLECT_FOREACH_9_(FNC, USER_DATA, __VA_ARGS__)) 74 #define MKCREFLECT_FOREACH_11_(FNC, USER_DATA, ARG, ...) \ 75 FNC(ARG, USER_DATA) MKCREFLECT_EXPAND_(MKCREFLECT_FOREACH_10_(FNC, USER_DATA, __VA_ARGS__)) 76 #define MKCREFLECT_FOREACH_12_(FNC, USER_DATA, ARG, ...) \ 77 FNC(ARG, USER_DATA) MKCREFLECT_EXPAND_(MKCREFLECT_FOREACH_11_(FNC, USER_DATA, __VA_ARGS__)) 78 #define MKCREFLECT_FOREACH_13_(FNC, USER_DATA, ARG, ...) \ 79 FNC(ARG, USER_DATA) MKCREFLECT_EXPAND_(MKCREFLECT_FOREACH_12_(FNC, USER_DATA, __VA_ARGS__)) 80 #define MKCREFLECT_FOREACH_14_(FNC, USER_DATA, ARG, ...) \ 81 FNC(ARG, USER_DATA) MKCREFLECT_EXPAND_(MKCREFLECT_FOREACH_13_(FNC, USER_DATA, __VA_ARGS__)) 82 #define MKCREFLECT_FOREACH_15_(FNC, USER_DATA, ARG, ...) \ 83 FNC(ARG, USER_DATA) MKCREFLECT_EXPAND_(MKCREFLECT_FOREACH_14_(FNC, USER_DATA, __VA_ARGS__)) 84 #define MKCREFLECT_FOREACH_16_(FNC, USER_DATA, ARG, ...) \ 85 FNC(ARG, USER_DATA) MKCREFLECT_EXPAND_(MKCREFLECT_FOREACH_15_(FNC, USER_DATA, __VA_ARGS__)) 86 #define MKCREFLECT_FOREACH_17_(FNC, USER_DATA, ARG, ...) \ 87 FNC(ARG, USER_DATA) MKCREFLECT_EXPAND_(MKCREFLECT_FOREACH_16_(FNC, USER_DATA, __VA_ARGS__)) 88 #define MKCREFLECT_FOREACH_18_(FNC, USER_DATA, ARG, ...) \ 89 FNC(ARG, USER_DATA) MKCREFLECT_EXPAND_(MKCREFLECT_FOREACH_17_(FNC, USER_DATA, __VA_ARGS__)) 90 #define MKCREFLECT_FOREACH_19_(FNC, USER_DATA, ARG, ...) \ 91 FNC(ARG, USER_DATA) MKCREFLECT_EXPAND_(MKCREFLECT_FOREACH_18_(FNC, USER_DATA, __VA_ARGS__)) 92 #define MKCREFLECT_FOREACH_20_(FNC, USER_DATA, ARG, ...) \ 93 FNC(ARG, USER_DATA) MKCREFLECT_EXPAND_(MKCREFLECT_FOREACH_19_(FNC, USER_DATA, __VA_ARGS__)) 94 #define MKCREFLECT_FOREACH_21_(FNC, USER_DATA, ARG, ...) \ 95 FNC(ARG, USER_DATA) MKCREFLECT_EXPAND_(MKCREFLECT_FOREACH_20_(FNC, USER_DATA, __VA_ARGS__)) 96 #define MKCREFLECT_FOREACH_22_(FNC, USER_DATA, ARG, ...) \ 97 FNC(ARG, USER_DATA) MKCREFLECT_EXPAND_(MKCREFLECT_FOREACH_21_(FNC, USER_DATA, __VA_ARGS__)) 98 #define MKCREFLECT_FOREACH_23_(FNC, USER_DATA, ARG, ...) \ 99 FNC(ARG, USER_DATA) MKCREFLECT_EXPAND_(MKCREFLECT_FOREACH_22_(FNC, USER_DATA, __VA_ARGS__)) 100 #define MKCREFLECT_FOREACH_24_(FNC, USER_DATA, ARG, ...) \ 101 FNC(ARG, USER_DATA) MKCREFLECT_EXPAND_(MKCREFLECT_FOREACH_23_(FNC, USER_DATA, __VA_ARGS__)) 102 #define MKCREFLECT_FOREACH_25_(FNC, USER_DATA, ARG, ...) \ 103 FNC(ARG, USER_DATA) MKCREFLECT_EXPAND_(MKCREFLECT_FOREACH_24_(FNC, USER_DATA, __VA_ARGS__)) 105 #define MKCREFLECT_OVERRIDE_4(_1, _2, _3, _4, FNC, ...) FNC 106 #define MKCREFLECT_OVERRIDE_4_PLACEHOLDER 1, 2, 3, 4 107 #define MKCREFLECT_OVERRIDE_5(_1, _2, _3, _4, _5, FNC, ...) FNC 108 #define MKCREFLECT_OVERRIDE_5_PLACEHOLDER MKCREFLECT_OVERRIDE_4_PLACEHOLDER, 5 109 #define MKCREFLECT_OVERRIDE_14(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, FNC, ...) FNC 110 #define MKCREFLECT_OVERRIDE_14_PLACEHOLDER MKCREFLECT_OVERRIDE_5_PLACEHOLDER, 6, 7, 8, 9, 10, 11, 12, 13, 14 111 #define MKCREFLECT_OVERRIDE_20(_1, _2, _3, _4, _5, _6, _7, _8, _9, _10, _11, _12, _13, _14, _15, _16, _17, _18, _19, _20, FNC, ...) FNC 112 #define MKCREFLECT_OVERRIDE_20_PLACEHOLDER MKCREFLECT_OVERRIDE_14_PLACEHOLDER, 15, 16, 17, 18, 19, 20 113 #define MKCREFLECT_OVERRIDE_25(_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, FNC, ...) FNC 114 #define MKCREFLECT_OVERRIDE_25_PLACEHOLDER MKCREFLECT_OVERRIDE_20_PLACEHOLDER, 21, 22, 23, 24, 25 116 #define MKCREFLECT_FOREACH(FNC, USER_DATA, ...) \ 117 MKCREFLECT_EXPAND_(MKCREFLECT_OVERRIDE_25( __VA_ARGS__, \ 118 MKCREFLECT_FOREACH_25_, \ 119 MKCREFLECT_FOREACH_24_, \ 120 MKCREFLECT_FOREACH_23_, \ 121 MKCREFLECT_FOREACH_22_, \ 122 MKCREFLECT_FOREACH_21_, \ 123 MKCREFLECT_FOREACH_20_, \ 124 MKCREFLECT_FOREACH_19_, \ 125 MKCREFLECT_FOREACH_18_, \ 126 MKCREFLECT_FOREACH_17_, \ 127 MKCREFLECT_FOREACH_16_, \ 128 MKCREFLECT_FOREACH_15_, \ 129 MKCREFLECT_FOREACH_14_, \ 130 MKCREFLECT_FOREACH_13_, \ 131 MKCREFLECT_FOREACH_12_, \ 132 MKCREFLECT_FOREACH_11_, \ 133 MKCREFLECT_FOREACH_10_, \ 134 MKCREFLECT_FOREACH_9_, \ 135 MKCREFLECT_FOREACH_8_, \ 136 MKCREFLECT_FOREACH_7_, \ 137 MKCREFLECT_FOREACH_6_, \ 138 MKCREFLECT_FOREACH_5_, \ 139 MKCREFLECT_FOREACH_4_, \ 140 MKCREFLECT_FOREACH_3_, \ 141 MKCREFLECT_FOREACH_2_, \ 142 MKCREFLECT_FOREACH_1_)(FNC, USER_DATA, __VA_ARGS__)) 144 #define MKCREFLECT_DECLARE_SIMPLE_FIELD_(IGNORE, TYPE, FIELD_NAME) \ 146 #define MKCREFLECT_DECLARE_ARRAY_FIELD_(IGNORE, TYPE, FIELD_NAME, ARRAY_SIZE) \ 147 TYPE FIELD_NAME[ARRAY_SIZE]; 149 #define MKCREFLECT_DECLARE_FIELD_(...) MKCREFLECT_EXPAND_(MKCREFLECT_OVERRIDE_4( \ 151 MKCREFLECT_DECLARE_ARRAY_FIELD_, \ 152 MKCREFLECT_DECLARE_SIMPLE_FIELD_, \ 153 MKCREFLECT_OVERRIDE_4_PLACEHOLDER)(__VA_ARGS__)) 155 #define MKCREFLECT_DECLARE_FIELD(X, USER_DATA) MKCREFLECT_DECLARE_FIELD_ X 157 #define MKCREFLECT_SIZEOF_(IGNORE, C_TYPE, ...) +sizeof(C_TYPE) 158 #define MKCREFLECT_SIZEOF(X, USER_DATA) MKCREFLECT_SIZEOF_ X 160 #define MKCREFLECT_SUM(...) +1 162 #define MKCREFLECT_IS_TYPE_SIGNED_(C_TYPE) (C_TYPE)-1 < (C_TYPE)1 163 #define MKCREFLECT_IS_SIGNED_STRUCT(C_TYPE) 0 164 #define MKCREFLECT_IS_SIGNED_STRING(C_TYPE) MKCREFLECT_IS_TYPE_SIGNED_(C_TYPE) 165 #define MKCREFLECT_IS_SIGNED_INTEGER(C_TYPE) MKCREFLECT_IS_TYPE_SIGNED_(C_TYPE) 166 #define MKCREFLECT_IS_SIGNED_FLOAT(C_TYPE) MKCREFLECT_IS_TYPE_SIGNED_(C_TYPE) 167 #define MKCREFLECT_IS_SIGNED_DOUBLE(C_TYPE) MKCREFLECT_IS_TYPE_SIGNED_(C_TYPE) 168 #define MKCREFLECT_IS_SIGNED_POINTER(C_TYPE) 0 170 #define MKCREFLECT_IS_SIGNED_(DATA_TYPE, CTYPE) MKCREFLECT_IS_SIGNED_##DATA_TYPE(CTYPE) 172 #define MKCREFLECT_ARRAY_FIELD_INFO_(TYPE_NAME, DATA_TYPE, C_TYPE, FIELD_NAME, ARRAY_SIZE) \ 173 #C_TYPE, #FIELD_NAME, sizeof(C_TYPE) * ARRAY_SIZE, offsetof(TYPE_NAME, FIELD_NAME), \ 174 MKCREFLECT_IS_SIGNED_(DATA_TYPE, C_TYPE), ARRAY_SIZE, MKCREFLECT_TYPES_##DATA_TYPE 176 #define MKCREFLECT_SIMPLE_FIELD_INFO_(TYPE_NAME, DATA_TYPE, C_TYPE, FIELD_NAME) \ 177 #C_TYPE, #FIELD_NAME, sizeof(C_TYPE), offsetof(TYPE_NAME, FIELD_NAME), \ 178 MKCREFLECT_IS_SIGNED_(DATA_TYPE, C_TYPE), -1, MKCREFLECT_TYPES_##DATA_TYPE 180 #define MKCREFLECT_FIELD_INFO_(...) \ 182 MKCREFLECT_EXPAND_(MKCREFLECT_OVERRIDE_5( \ 184 MKCREFLECT_ARRAY_FIELD_INFO_, \ 185 MKCREFLECT_SIMPLE_FIELD_INFO_, \ 186 MKCREFLECT_OVERRIDE_5_PLACEHOLDER)(__VA_ARGS__)) \ 189 #define MKCREFLECT_FIELD_INFO(X, USER_DATA) \ 190 MKCREFLECT_FIELD_INFO_(USER_DATA, MKCREFLECT_EXPAND_VA_ X) 192 #ifdef MKCREFLECT_IMPL 194 #define MKCREFLECT_DEFINE_GET_METHOD(TYPE_NAME, ...) \ 195 MKCREFLECT_TypeInfo* mkcreflect_get_##TYPE_NAME##_type_info(void) \ 197 static MKCREFLECT_FieldInfo fields_info[MKCREFLECT_FOREACH(MKCREFLECT_SUM, 0, __VA_ARGS__)] = \ 199 MKCREFLECT_FOREACH(MKCREFLECT_FIELD_INFO, TYPE_NAME, __VA_ARGS__) \ 201 static MKCREFLECT_TypeInfo type_info = \ 204 MKCREFLECT_FOREACH(MKCREFLECT_SUM, 0, __VA_ARGS__), \ 206 MKCREFLECT_FOREACH(MKCREFLECT_SIZEOF, 0, __VA_ARGS__), \ 214 #define MKCREFLECT_DEFINE_GET_METHOD(TYPE_NAME, ...) 218 #define MKCREFLECT_DEFINE_STRUCT(TYPE_NAME, ...) \ 221 MKCREFLECT_FOREACH(MKCREFLECT_DECLARE_FIELD, 0, __VA_ARGS__) \ 223 MKCREFLECT_TypeInfo* mkcreflect_get_##TYPE_NAME##_type_info(void); \ 224 MKCREFLECT_DEFINE_GET_METHOD(TYPE_NAME, __VA_ARGS__) \ MKCREFLECT_Types
Definition: mkcreflect.h:19
Definition: mkcreflect.h:23
Definition: mkcreflect.h:22
MKCREFLECT_FieldInfo * fields
Definition: mkcreflect.h:48
Definition: mkcreflect.h:42
size_t packed_size
Definition: mkcreflect.h:47
Definition: mkcreflect.h:29
size_t offset
Definition: mkcreflect.h:34
size_t fields_count
Definition: mkcreflect.h:45
size_t size
Definition: mkcreflect.h:33
Definition: mkcreflect.h:25
int array_size
Definition: mkcreflect.h:36
int is_signed
Definition: mkcreflect.h:35
MKCREFLECT_Types data_type
Definition: mkcreflect.h:37
Definition: mkcreflect.h:24
Definition: mkcreflect.h:21
size_t size
Definition: mkcreflect.h:46
Definition: mkcreflect.h:26
const char * field_name
Definition: mkcreflect.h:32
const char * field_type
Definition: mkcreflect.h:31
const char * name
Definition: mkcreflect.h:44