]> git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blob - qcsrc/lib/enumclass.qh
86948075b1c0078f6b874edb7b2813c6f4723836
[xonotic/xonotic-data.pk3dir.git] / qcsrc / lib / enumclass.qh
1 #pragma once
2
3 #include "oo.qh"
4
5 // purpose: prevent transposed parameter passing
6
7 #if NDEBUG
8
9 // zero overhead mode, use this for releases
10
11 // *INDENT-OFF* uncrustify doesn't like the braces in different macros
12 #define ENUMCLASS(id) USING(id, int); enum { CASE(id, Null)
13 #define CASE(class, id) class##_##id,
14 #define ENUMCLASS_END(id) };
15 #define ORDINAL(it) (it)
16 #define ENUMCAST(T, it) (it)
17 // *INDENT-ON*
18
19 #else
20
21 // edict overhead mode, use this for type checking
22
23 .int enum_ordinal;
24 #define ENUMCLASS(id) CLASS(id, Object) int id##_count; const noref entity id##_Null = nil; CASE(id, Null__)
25 #define CASE(class, id) class class##_##id; STATIC_INIT(class##_##id) { entity e = class##_##id = NEW(class); e.enum_ordinal = class##_count++; }
26 #define ENUMCLASS_END(id) ENDCLASS(id)
27 #define ORDINAL(it) ((it).enum_ordinal)
28 #define ENUMCAST(T, it) ftoe(etof(T##_Null__) + (it))
29
30 #endif