X-Git-Url: https://git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Flib%2Fmisc.qh;h=474484c64e5f85aa279835a1826983c1eb0b080f;hb=c6494490daa287dd5817c77e9c3d8416df182ed0;hp=938e2e6aca98fe671c737c0859ae4e88d1ed2c1d;hpb=948c08402a7b9b7af36059104937650e343ecefe;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/lib/misc.qh b/qcsrc/lib/misc.qh index 938e2e6ac..474484c64 100644 --- a/qcsrc/lib/misc.qh +++ b/qcsrc/lib/misc.qh @@ -1,39 +1,46 @@ -#ifndef MISC_H -#define MISC_H +#pragma once -#ifdef GMQCC - #define EVAL(...) __VA_ARGS__ +#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__ - #define OVERLOAD_(F, ...) F##_##__VA_COUNT__(__VA_ARGS__) - #define OVERLOAD(F, ...) F##_##__VA_COUNT__(__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 PROPERTY(type, name) type name; GETTER(type, 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) +#define LAMBDA(...) { __VA_ARGS__; } -#endif +// 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