X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Flib%2Fenumclass.qh;h=532db1deb613bad7d39293f39b458fe437f416d1;hb=52cdd440f6cfdc9544099ac68455e5361ace00d2;hp=2959565c50bc5dfae107199936d6e8953a009fc6;hpb=43eba8ca70f00458db385630f86009f6d7fa849a;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/lib/enumclass.qh b/qcsrc/lib/enumclass.qh index 2959565c5..532db1deb 100644 --- a/qcsrc/lib/enumclass.qh +++ b/qcsrc/lib/enumclass.qh @@ -1,5 +1,4 @@ -#ifndef ENUMCLASS_H -#define ENUMCLASS_H +#pragma once #include "oo.qh" @@ -9,18 +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) - -#endif +#define ORDINAL(it) ((it).enum_ordinal) +#define ENUMCAST(T, it) ftoe(etof(T##_Null__) + (it)) #endif