X-Git-Url: http://de.git.xonotic.org/?p=xonotic%2Fxonotic-data.pk3dir.git;a=blobdiff_plain;f=qcsrc%2Fcommon%2Futil-pre.qh;h=9d60ae0a9ae2797bfdaedea9632237e81554f564;hp=f39c30c0007cb03165d06d181c6c04e534497e25;hb=eaefffb161cd24ed84ba5c03c9ebc4a651ebbae9;hpb=5c4ae3ec7458cf4e8d07f6eed4fe24fceea13b70 diff --git a/qcsrc/common/util-pre.qh b/qcsrc/common/util-pre.qh index f39c30c000..9d60ae0a9a 100644 --- a/qcsrc/common/util-pre.qh +++ b/qcsrc/common/util-pre.qh @@ -1,24 +1,114 @@ -#ifdef FTEQCC -#pragma flag enable subscope -#pragma flag enable lo +#ifndef UTIL_PRE_H +#define UTIL_PRE_H + +#ifndef NOCOMPAT + #define COMPAT_NO_MOD_IS_XONOTIC #endif -// FTEQCC can do this -// #define HAVE_YO_DAWG_CPP -// No, this is an ex-"feature" and non-C11. +#ifndef QCC_SUPPORT_ACCUMULATE + #ifdef GMQCC + #define QCC_SUPPORT_ACCUMULATE + #endif +#endif -#ifndef NOCOMPAT -//# define WORKAROUND_XON010 -//# define COMPAT_XON010_CHANNELS -//# define COMPAT_XON050_ENGINE -# define COMPAT_NO_MOD_IS_XONOTIC -# define COMPAT_XON060_DONTCRASH_CHECKPVS +#ifndef QCC_SUPPORT_NIL + #ifdef GMQCC + #define QCC_SUPPORT_NIL + #endif +#endif + +#ifndef QCC_SUPPORT_INT + #define int float + + #define stoi(s) stof(s) + #define stob(s) stof(s) + #define itos(i) ftos(i) +#else + #define stoi(s) ((int) stof(s)) + #define stob(s) ((bool) stof(s)) + #define itos(i) ftos(i) #endif -#ifdef FTEQCC -#ifdef WATERMARK -const string FTEQCC_SUCKS_WATERMARKS_THROUGH_C60_FULLERENES = WATERMARK(); -#undef WATERMARK -#define WATERMARK FTEQCC_SUCKS_WATERMARKS_THROUGH_C60_FULLERENES +#ifndef QCC_SUPPORT_BOOL + #define bool float + + // Boolean Constants + const int true = 1; + const int false = 0; +#endif + +#ifndef QCC_SUPPORT_ENTITYCLASS + #define entityclass(name) typedef entity name + #define class(name) + #define new(class) spawn() +#else + #define entityclass(name) entityclass name {} + #define class(name) [[class(name)]] + #define new(class) ((class) spawn()) #endif + +// Transitional aliases +[[deprecated("use true")]] [[alias("true")]] const bool TRUE; +[[deprecated("use false")]] [[alias("false")]] const bool FALSE; + +#ifdef GMQCC + #define OVERLOAD(F, ...) F##_##__VA_COUNT__(__VA_ARGS__) +#else + #define OVERLOAD_(F,_9,_8,_7,_6,_5,_4,_3,_2,_1,n,...) F##_##n + #define OVERLOAD(F, ...) OVERLOAD_(F,__VA_ARGS__,9,8,7,6,5,4,3,2,1)(__VA_ARGS__) +#endif + +#define LAMBDA(...) { __VA_ARGS__ ; } + +#define MAP(f, ...) OVERLOAD(MAP, f, __VA_ARGS__) +#define MAP_2(f, it) f(it) +#define MAP_3(f, it, ...) f(it)MAP_2(f, __VA_ARGS__) +#define MAP_4(f, it, ...) f(it)MAP_3(f, __VA_ARGS__) +#define MAP_5(f, it, ...) f(it)MAP_4(f, __VA_ARGS__) +#define MAP_6(f, it, ...) f(it)MAP_5(f, __VA_ARGS__) +#define MAP_7(f, it, ...) f(it)MAP_6(f, __VA_ARGS__) +#define MAP_8(f, it, ...) f(it)MAP_7(f, __VA_ARGS__) +#define MAP_9(f, it, ...) f(it)MAP_8(f, __VA_ARGS__) +#define MAP_10(f, it, ...) f(it)MAP_9(f, __VA_ARGS__) +#define MAP_11(f, it, ...) f(it)MAP_10(f, __VA_ARGS__) +#define MAP_12(f, it, ...) f(it)MAP_11(f, __VA_ARGS__) +#define MAP_13(f, it, ...) f(it)MAP_12(f, __VA_ARGS__) +#define MAP_14(f, it, ...) f(it)MAP_13(f, __VA_ARGS__) +#define MAP_15(f, it, ...) f(it)MAP_14(f, __VA_ARGS__) +#define MAP_16(f, it, ...) f(it)MAP_15(f, __VA_ARGS__) +#define MAP_17(f, it, ...) f(it)MAP_16(f, __VA_ARGS__) +#define MAP_18(f, it, ...) f(it)MAP_17(f, __VA_ARGS__) +#define MAP_19(f, it, ...) f(it)MAP_18(f, __VA_ARGS__) +#define MAP_20(f, it, ...) f(it)MAP_19(f, __VA_ARGS__) + +#define IDENTITY(it) it + +#define UNWORDS(...) MAP(IDENTITY, __VA_ARGS__) + +#define APPLY(f, ...) f(__VA_ARGS__) + +#ifdef SVQC + #define SV(f, ...) f(__VA_ARGS__) +#else + #define SV(f, ...) +#endif + +#ifdef CSQC + #define CL(f, ...) f(__VA_ARGS__) +#else + #define CL(f, ...) +#endif + +#define IF(cond, f, ...) cond(f, __VA_ARGS__) + +#define GET(name) name##get +#define GETTER(type, name) type GET(name)() { return name; } + +#define BIT(n) (1 << (n)) +#ifndef BRANCHLESS_BITSET + #define BITSET(var, mask, flag) (flag ? (var) | (mask) : (var) &~ (mask)) +#else + #define BITSET(var, mask, flag) ((var) ^ (-(flag) ^ (var)) & (mask)) +#endif + #endif