]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blob - qcsrc/lib/misc.qh
Merge branch 'terencehill/slider_drag_fix' into 'master'
[xonotic/xonotic-data.pk3dir.git] / qcsrc / lib / misc.qh
1 #ifndef MISC_H
2 #define MISC_H
3
4 #ifdef GMQCC
5     #define EVAL(...)           __VA_ARGS__
6
7     #define OVERLOAD_(F, ...)   F##_##__VA_COUNT__(__VA_ARGS__)
8     #define OVERLOAD(F, ...)    F##_##__VA_COUNT__(__VA_ARGS__)
9 #else
10     #define EMPTY()
11     #define DEFER(id) id EMPTY()
12
13     #define EVAL(...)  EVAL1(EVAL1(EVAL1(__VA_ARGS__)))
14     #define EVAL1(...) EVAL2(EVAL2(EVAL2(__VA_ARGS__)))
15     #define EVAL2(...) EVAL3(EVAL3(EVAL3(__VA_ARGS__)))
16     #define EVAL3(...) EVAL4(EVAL4(EVAL4(__VA_ARGS__)))
17     #define EVAL4(...) EVAL5(EVAL5(EVAL5(__VA_ARGS__)))
18     #define EVAL5(...) __VA_ARGS__
19
20     #define OVERLOAD___(F,_16,_15,_14,_13,_12,_11,_10,_9,_8,_7,_6,_5,_4,_3,_2,_1,n,...) F##_##n
21     #define OVERLOAD__(F, ...)  OVERLOAD___(F,##__VA_ARGS__,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0)
22     #define OVERLOAD_(...)      DEFER(OVERLOAD__(__VA_ARGS__))
23     #define OVERLOAD(F, ...)    OVERLOAD_(F,##__VA_ARGS__)(__VA_ARGS__)
24 #endif
25
26 #define GET(name) name##get
27 #define GETTER(type, name) type GET(name)() { return name; }
28
29 #define LAMBDA(...) { __VA_ARGS__ ; }
30
31 // Can't wrap with do-while as block may contain continue or break
32 #define WITH(type, name, value, block) { \
33     type __with_save = (name); \
34     name = (value); \
35     LAMBDA(block) \
36     name = __with_save; \
37 } do { } while (0)
38
39 #endif