]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/lib/sort.qh
Transifex autosync
[xonotic/xonotic-data.pk3dir.git] / qcsrc / lib / sort.qh
index 748bd2b2748efe82a071e4583771adbe338de146..cd0000912dfcfb65b715bcfabebf889d29144adc 100644 (file)
@@ -1,26 +1,23 @@
-#ifndef SORT_H
-#define SORT_H
+#pragma once
 
 /** is only ever called for i1 < i2 */
-typedef void (int i1, int i2, entity pass) swapfunc_t;
+USING(swapfunc_t, void (int i1, int i2, entity pass));
 /** <0 for <, ==0 for ==, >0 for > (like strcmp) */
-typedef int (int i1, int i2, entity pass) comparefunc_t;
+USING(comparefunc_t, int (int i1, int i2, entity pass));
 
+ERASEABLE
 void heapsort(int n, swapfunc_t swap, comparefunc_t cmp, entity pass)
 {
        #define heapify(_count) \
-               do \
-               { \
+               MACRO_BEGIN \
                        for (int start = floor(((_count) - 2) / 2); start >= 0; --start) \
                        { \
                                siftdown(start, (_count) - 1); \
                        } \
-               } \
-               while (0)
+               MACRO_END
 
        #define siftdown(_start, _end) \
-               do \
-               { \
+               MACRO_BEGIN \
                        for (int root = (_start); root * 2 + 1 <= (_end); ) \
                        { \
                                int child = root * 2 + 1; \
@@ -29,8 +26,7 @@ void heapsort(int n, swapfunc_t swap, comparefunc_t cmp, entity pass)
                                swap(root, child, pass); \
                                root = child; \
                        } \
-               } \
-               while (0)
+               MACRO_END
 
        heapify(n);
        int end = n - 1;
@@ -42,6 +38,7 @@ void heapsort(int n, swapfunc_t swap, comparefunc_t cmp, entity pass)
        }
 }
 
+ERASEABLE
 void shuffle(float n, swapfunc_t swap, entity pass)
 {
        for (int i = 1; i < n; ++i)
@@ -59,5 +56,3 @@ void shuffle(float n, swapfunc_t swap, entity pass)
                if (j != i) swap(j, i, pass);
        }
 }
-
-#endif