]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/lib/misc.qh
Merge branch 'master' into Mario/qc_camstuff
[xonotic/xonotic-data.pk3dir.git] / qcsrc / lib / misc.qh
index 9ce52dfb596c3d328d3e53eeb7385da3c7de69cb..474484c64e5f85aa279835a1826983c1eb0b080f 100644 (file)
@@ -1,15 +1,6 @@
-#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__)
-#else
-       #define EMPTY()
-       #define DEFER(id) id EMPTY()
+#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 EVAL4(...) EVAL5(EVAL5(EVAL5(__VA_ARGS__)))
        #define EVAL5(...) __VA_ARGS__
 
-       #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__)
+       #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 EVAL(...) __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
 
 #if defined(CSQC)
        // already defined
 #endif
 
-#undef etof
-// avoid bounds checks
-#define etof(e) stof(sprintf("%i", e))
-
 #define GET(name) name##get
 #define GETTER(type, name) type GET(name)() { return name; }
 #define PROPERTY(type, name) type name; GETTER(type, name)
 // 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
-
-#endif
+       MACRO_END