]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/lib/accumulate.qh
Add a hack to fix the use of self in .predraw functions
[xonotic/xonotic-data.pk3dir.git] / qcsrc / lib / accumulate.qh
index 7e1a1edc0f7906ebd6dd9afa925196da47fdf894..a32649f5c8d4118248f8a5cc59412c734c2b6c0e 100644 (file)
@@ -1,52 +1,57 @@
-#ifndef ACCUMULATE_H
-#define ACCUMULATE_H
+#pragma once
 
 #ifdef QCC_SUPPORT_ACCUMULATE
-# define ACCUMULATE_FUNCTION(func, otherfunc) \
-    [[accumulate]] void func() { otherfunc(); }
-# define CALL_ACCUMULATED_FUNCTION(func) \
-    func()
+       #define ACCUMULATE_FUNCTION(func, otherfunc) \
+               [[accumulate]] void func() \
+               { \
+                       otherfunc(); \
+               }
+       #define CALL_ACCUMULATED_FUNCTION(func) \
+               func()
 #else
-#ifdef HAVE_YO_DAWG_CPP
+       #ifdef HAVE_YO_DAWG_CPP
 // TODO make ascii art pic of xzibit
 // YO DAWG!
 // I HERD YO LIEK MACROS
 // SO I PUT A MACRO DEFINITION IN YO MACRO DEFINITION
 // SO YO CAN EXPAND MACROS WHILE YO EXPAND MACROS
-# define ACCUMULATE_FUNCTION(func,otherfunc) \
-    #ifdef func \
-    void __merge__##otherfunc() { func(); otherfunc(); } \
-    #undef func \
-    #define func __merge__##otherfunc \
-    #else \
-    #define func otherfunc \
-    #endif
-# define CALL_ACCUMULATED_FUNCTION(func) \
-    func()
-#else
-# define ACCUMULATE_FUNCTION(func,otherfunc) \
-    .float _ACCUMULATE_##func##__##otherfunc;
-void ACCUMULATE_call(string func)
-{
-    float i;
-    float n = numentityfields();
-    string funcprefix = strcat("_ACCUMULATE_", func, "__");
-    float funcprefixlen = strlen(funcprefix);
-    for(i = 0; i < n; ++i)
-    {
-        string name = entityfieldname(i);
-        if(substring(name, 0, funcprefixlen) == funcprefix)
-            callfunction(substring(name, funcprefixlen, -1));
-    }
-}
-# define CALL_ACCUMULATED_FUNCTION(func) \
-    ACCUMULATE_call(#func)
-#endif
+               #define ACCUMULATE_FUNCTION(func, otherfunc) \
+                       #ifdef func \
+                       void __merge__##otherfunc() \
+                       { \
+                               func(); otherfunc(); \
+                       } \
+                       #undef func \
+                       #define func __merge__##otherfunc \
+                       #else \
+                               #define func otherfunc \
+                               #endif
+               #define CALL_ACCUMULATED_FUNCTION(func) \
+                       func()
+       #else
+               #define ACCUMULATE_FUNCTION(func, otherfunc) \
+                       .float _ACCUMULATE_##func##__##otherfunc;
+               void ACCUMULATE_call(string func)
+               {
+                       float i;
+                       float n = numentityfields();
+                       string funcprefix = strcat("_ACCUMULATE_", func, "__");
+                       float funcprefixlen = strlen(funcprefix);
+                       for (i = 0; i < n; ++i)
+                       {
+                               string name = entityfieldname(i);
+                               if (substring(name, 0, funcprefixlen) == funcprefix) callfunction(substring(name, funcprefixlen, -1));
+                       }
+               }
+               #define CALL_ACCUMULATED_FUNCTION(func) \
+                       ACCUMULATE_call( #func)
+       #endif
 #endif
 
 // used for simplifying ACCUMULATE_FUNCTIONs
-#define SET_FIRST_OR_LAST(input,first,count) if(!input) { input = (first + count); }
-#define SET_FIELD_COUNT(field,first,count) if(!field) { field = (first + count); ++count; }
-#define CHECK_MAX_COUNT(name,max,count,type) if(count > max) { error(strcat("Maximum ", type, " hit: ", #name, ": ", ftos(count), ".\n")); }
-
-#endif
+#define SET_FIRST_OR_LAST(input, first, count) \
+       if (!input) { input = (first + count); }
+#define SET_FIELD_COUNT(field, first, count) \
+       if (!field) { field = (first + count); ++count; }
+#define CHECK_MAX_COUNT(name, max, count, type) \
+       if (count > max) { error(strcat("Maximum ", type, " hit: ", #name, ": ", ftos(count), ".\n")); }