X-Git-Url: https://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Flib%2Fenumclass.qh;h=532db1deb613bad7d39293f39b458fe437f416d1;hb=451e02a2857d8c671f6dcf6a0639ea7c609b3ba9;hp=412e9db6bd3a7720344c2e37babde9ee925d72f9;hpb=692cb758fe8f25fa078bfd5885333ee031885600;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/lib/enumclass.qh b/qcsrc/lib/enumclass.qh index 412e9db6b..532db1deb 100644 --- a/qcsrc/lib/enumclass.qh +++ b/qcsrc/lib/enumclass.qh @@ -8,16 +8,21 @@ // zero overhead mode, use this for releases -#define ENUMCLASS(id) typedef int id; enum { +#define ENUMCLASS(id) USING(id, int); enum { CASE(id, Null) #define CASE(class, id) class##_##id, #define ENUMCLASS_END(id) }; +#define ORDINAL(it) (it) +#define ENUMCAST(T, it) (it) #else // edict overhead mode, use this for type checking -#define ENUMCLASS(id) CLASS(id, Object) -#define CASE(class, id) class class##_##id; STATIC_INIT(class##_##id) { class##_##id = NEW(class); } +.int enum_ordinal; +#define ENUMCLASS(id) CLASS(id, Object) int id##_count; const noref entity id##_Null = nil; CASE(id, Null__) +#define CASE(class, id) class class##_##id; STATIC_INIT(class##_##id) { entity e = class##_##id = NEW(class); e.enum_ordinal = class##_count++; } #define ENUMCLASS_END(id) ENDCLASS(id) +#define ORDINAL(it) ((it).enum_ordinal) +#define ENUMCAST(T, it) ftoe(etof(T##_Null__) + (it)) #endif