X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Flib%2Fenumclass.qh;h=532db1deb613bad7d39293f39b458fe437f416d1;hb=73295fdedbff00283c27cd8d96c1074606374e0f;hp=412e9db6bd3a7720344c2e37babde9ee925d72f9;hpb=f41d9f31538bef0259d2b2c74536bb977901f99d;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