#include <stdint.h> #define SCOPES_BEGIN_MODULE namespace scopes { #define SCOPES_END_MODULE } #define SCOPES_DEFINE_BITSET_MEMBER(NAME, IDX) \ NAME = 1 << IDX, #define SCOPES_DEFINE_TYPE_BITSET(NAME) \ namespace n_bitset_ ## NAME { \ enum bitset_ ## NAME { \ TYPE_BITSET_ ## NAME(SCOPES_DEFINE_BITSET_MEMBER) \ }; \ } \ typedef n_bitset_ ## NAME::bitset_ ## NAME NAME; #define SCOPES_DEFINE_ENUM_MEMBER(NAME) NAME, #define SCOPES_INHERIT_ENUM_MEMBER(NAME, SUPER) NAME = (int)SUPER::NAME, #define SCOPES_DEFINE_TYPE_ENUM(NAME) \ enum class NAME { \ TYPE_ENUM_ ## NAME(SCOPES_DEFINE_ENUM_MEMBER, SCOPES_INHERIT_ENUM_MEMBER) \ }; #define SCOPES_i32 int32_t #define SCOPES_OPTIONAL_TYPE(T) T::OptionalType #define SCOPES_DEFINE_STRUCT_MEMBER(NAME, TYPE) TYPE NAME; #define SCOPES_DEFINE_STRUCT(NAME) \ struct NAME { \ STRUCT_FIELDS_ ## NAME(SCOPES_DEFINE_STRUCT_MEMBER) \ }; #define SCOPES_BEGIN_ROOT_TYPE(NAME) \ struct NAME { \ typedef NAME ThisType; \ typedef ThisType OptionalType; #define SCOPES_BEGIN_TYPE(NAME, SUPER) \ struct NAME : SUPER { #define SCOPES_BEGIN_SUPERTYPE(NAME, SUPER) \ struct NAME : SUPER { #define SCOPES_TYPE_USES_ENUM(NAME) \ typedef NAME EnumType; #define SCOPES_END_TYPE };
https://cdn.masto.host/mastodongamedevplace/media_attachments/files/114/262/324/250/109/120/original/4627537e56be3321.png