X-Git-Url: https://de.git.xonotic.org/?p=xonotic%2Fxonotic-data.pk3dir.git;a=blobdiff_plain;f=qcsrc%2Flib%2Fmisc.qh;h=cbb1079244d2ef5a6806f94387a8826380dc9589;hp=8a6e117a774d30ca00ada81cc6ea8caf770d1672;hb=e044c33d2e56a13837659b0cdb0ac9a2e6242957;hpb=70b84d37e2cf1d5336c327cb43593024de2a2c6c diff --git a/qcsrc/lib/misc.qh b/qcsrc/lib/misc.qh index 8a6e117a7..cbb107924 100644 --- a/qcsrc/lib/misc.qh +++ b/qcsrc/lib/misc.qh @@ -1,39 +1,47 @@ -#ifndef MISC_H -#define MISC_H - -#ifdef GMQCC - #define EVAL(...) __VA_ARGS__ - - #define OVERLOAD_(F, ...) F##_##__VA_COUNT__(__VA_ARGS__) - #define OVERLOAD(F, ...) F##_##__VA_COUNT__(__VA_ARGS__) +#pragma once + +#ifdef __STDC__ + #define EVAL(...) EVAL1(EVAL1(EVAL1(__VA_ARGS__))) + #define EVAL1(...) EVAL2(EVAL2(EVAL2(__VA_ARGS__))) + #define EVAL2(...) EVAL3(EVAL3(EVAL3(__VA_ARGS__))) + #define EVAL3(...) EVAL4(EVAL4(EVAL4(__VA_ARGS__))) + #define EVAL4(...) EVAL5(EVAL5(EVAL5(__VA_ARGS__))) + #define EVAL5(...) __VA_ARGS__ + + #include "p99.qh" + #define OVERLOAD(F, ...) P99_IF_EMPTY(__VA_ARGS__)(P99_PASTE2(F, _00)())(P99_PASTE3(F, _, P00_NARG(__VA_ARGS__))(__VA_ARGS__)) + /** for use within macros */ + #define OVERLOAD_(F, ...) P99_IF_EMPTY(__VA_ARGS__)(P99_PASTE2(F, _00)())(P99_PASTE3(F, _, P00_NARG(__VA_ARGS__))(__VA_ARGS__)) + #define OVERLOAD__(F, ...) P99_IF_EMPTY(__VA_ARGS__)(P99_PASTE2(F, _00)())(P99_PASTE3(F, _, P00_NARG(__VA_ARGS__))(__VA_ARGS__)) #else - #define EMPTY() - #define DEFER(id) id EMPTY() + #define EVAL(...) __VA_ARGS__ - #define EVAL(...) EVAL1(EVAL1(EVAL1(__VA_ARGS__))) - #define EVAL1(...) EVAL2(EVAL2(EVAL2(__VA_ARGS__))) - #define EVAL2(...) EVAL3(EVAL3(EVAL3(__VA_ARGS__))) - #define EVAL3(...) EVAL4(EVAL4(EVAL4(__VA_ARGS__))) - #define EVAL4(...) EVAL5(EVAL5(EVAL5(__VA_ARGS__))) - #define EVAL5(...) __VA_ARGS__ + #define OVERLOAD(F, ...) F##_##__VA_COUNT__(__VA_ARGS__) + #define OVERLOAD_(F, ...) F##_##__VA_COUNT__(__VA_ARGS__) + #define OVERLOAD__(F, ...) F##_##__VA_COUNT__(__VA_ARGS__) +#endif - #define OVERLOAD___(F,_16,_15,_14,_13,_12,_11,_10,_9,_8,_7,_6,_5,_4,_3,_2,_1,n,...) F##_##n - #define OVERLOAD__(F, ...) OVERLOAD___(F,##__VA_ARGS__,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0) - #define OVERLOAD_(...) DEFER(OVERLOAD__(__VA_ARGS__)) - #define OVERLOAD(F, ...) OVERLOAD_(F,##__VA_ARGS__)(__VA_ARGS__) +#if defined(CSQC) + #define etof(e) num_for_edict(e) + #define ftoe(i) entitybyindex(i) +#elif defined(SVQC) + #define etof(e) num_for_edict(e) + #define ftoe(i) edict_num(i) +#elif defined(MENUQC) + // already defined #endif #define GET(name) name##get #define GETTER(type, name) type GET(name)() { return name; } - -#define LAMBDA(...) { __VA_ARGS__ ; } - -// Can't wrap with do-while as block may contain continue or break -#define WITH(type, name, value, block) { \ - type __with_save = (name); \ - name = (value); \ - LAMBDA(block) \ - name = __with_save; \ -} do { } while (0) - -#endif +#define PROPERTY(type, name) type name; GETTER(type, name) +#define LAMBDA(...) { __VA_ARGS__; } + +// With block may not contain continue or break +#define WITH(type, name, value, block) \ + MACRO_BEGIN \ + { \ + type __with_save = (name); \ + name = (value); \ + LAMBDA(block) \ + name = __with_save; \ + } MACRO_END