]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blob - qcsrc/lib/misc.qh
Merge branch 'master' into Lyberta/StandaloneOverkillWeapons
[xonotic/xonotic-data.pk3dir.git] / qcsrc / lib / misc.qh
1 #pragma once
2
3 #ifdef __STDC__
4         #define EVAL(...) EVAL1(EVAL1(EVAL1(__VA_ARGS__)))
5         #define EVAL1(...) EVAL2(EVAL2(EVAL2(__VA_ARGS__)))
6         #define EVAL2(...) EVAL3(EVAL3(EVAL3(__VA_ARGS__)))
7         #define EVAL3(...) EVAL4(EVAL4(EVAL4(__VA_ARGS__)))
8         #define EVAL4(...) EVAL5(EVAL5(EVAL5(__VA_ARGS__)))
9         #define EVAL5(...) __VA_ARGS__
10
11         #include "p99.qh"
12         #define OVERLOAD(F, ...) P99_IF_EMPTY(__VA_ARGS__)(P99_PASTE2(F, _00)())(P99_PASTE3(F, _, P00_NARG(__VA_ARGS__))(__VA_ARGS__))
13         /** for use within a macro */
14         #define OVERLOAD_(F, ...) P99_IF_EMPTY(__VA_ARGS__)(P99_PASTE2(F, _00)())(P99_PASTE3(F, _, P00_NARG(__VA_ARGS__))(__VA_ARGS__))
15 #else
16         #define EVAL(...) __VA_ARGS__
17
18         #define OVERLOAD_(F, ...) F##_##__VA_COUNT__(__VA_ARGS__)
19         #define OVERLOAD(F, ...) F##_##__VA_COUNT__(__VA_ARGS__)
20 #endif
21
22 #if defined(CSQC)
23         #define etof(e) num_for_edict(e)
24         #define ftoe(i) entitybyindex(i)
25 #elif defined(SVQC)
26         #define etof(e) num_for_edict(e)
27         #define ftoe(i) edict_num(i)
28 #elif defined(MENUQC)
29         // already defined
30 #endif
31
32 #define GET(name) name##get
33 #define GETTER(type, name) type GET(name)() { return name; }
34 #define PROPERTY(type, name) type name; GETTER(type, name)
35 #define LAMBDA(...) { __VA_ARGS__; }
36
37 // With block may not contain continue or break
38 #define WITH(type, name, value, block) \
39         MACRO_BEGIN \
40         { \
41                 type __with_save = (name); \
42                 name = (value); \
43                 LAMBDA(block) \
44                 name = __with_save; \
45         } MACRO_END