aboutsummaryrefslogtreecommitdiff
path: root/sys/base/sort.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/base/sort.c')
-rw-r--r--sys/base/sort.c155
1 files changed, 155 insertions, 0 deletions
diff --git a/sys/base/sort.c b/sys/base/sort.c
new file mode 100644
index 0000000..1143494
--- /dev/null
+++ b/sys/base/sort.c
@@ -0,0 +1,155 @@
+#include <u.h>
+#include <base.h>
+#include <base/macro/qsort.h>
+
+// -----------------------------------------------------------------------
+// ints
+
+void
+sort·ints(uintptr sz, int arr[])
+{
+ int tmp;
+#define LESS(i, j) (arr[i] < arr[j])
+#define SWAP(i, j) (tmp = arr[i], arr[i] = arr[j], arr[j] = tmp)
+ QSORT(sz, LESS, SWAP);
+#undef SWAP
+#undef LESS
+}
+
+void
+sort·int8s(uintptr sz, int8 arr[])
+{
+ int8 tmp;
+#define LESS(i, j) (arr[i] < arr[j])
+#define SWAP(i, j) (tmp = arr[i], arr[i] = arr[j], arr[j] = tmp)
+ QSORT(sz, LESS, SWAP);
+#undef SWAP
+#undef LESS
+}
+
+void
+sort·int16s(uintptr sz, int16 arr[])
+{
+ int16 tmp;
+#define LESS(i, j) (arr[i] < arr[j])
+#define SWAP(i, j) (tmp = arr[i], arr[i] = arr[j], arr[j] = tmp)
+ QSORT(sz, LESS, SWAP);
+#undef SWAP
+#undef LESS
+}
+
+void
+sort·int32s(uintptr sz, int32 arr[])
+{
+ int32 tmp;
+#define LESS(i, j) (arr[i] < arr[j])
+#define SWAP(i, j) (tmp = arr[i], arr[i] = arr[j], arr[j] = tmp)
+ QSORT(sz, LESS, SWAP);
+#undef SWAP
+#undef LESS
+}
+
+void
+sort·int64s(uintptr sz, int64 arr[])
+{
+ int64 tmp;
+#define LESS(i, j) (arr[i] < arr[j])
+#define SWAP(i, j) (tmp = arr[i], arr[i] = arr[j], arr[j] = tmp)
+ QSORT(sz, LESS, SWAP);
+#undef SWAP
+#undef LESS
+}
+
+void
+sort·uints(uintptr sz, uint arr[])
+{
+ uint tmp;
+#define LESS(i, j) (arr[i] < arr[j])
+#define SWAP(i, j) (tmp = arr[i], arr[i] = arr[j], arr[j] = tmp)
+ QSORT(sz, LESS, SWAP);
+#undef SWAP
+#undef LESS
+}
+
+void
+sort·uint8s(uintptr sz, uint8 arr[])
+{
+ uint8 tmp;
+#define LESS(i, j) (arr[i] < arr[j])
+#define SWAP(i, j) (tmp = arr[i], arr[i] = arr[j], arr[j] = tmp)
+ QSORT(sz, LESS, SWAP);
+#undef SWAP
+#undef LESS
+}
+
+void
+sort·uint16s(uintptr sz, uint16 arr[])
+{
+ uint16 tmp;
+#define LESS(i, j) (arr[i] < arr[j])
+#define SWAP(i, j) (tmp = arr[i], arr[i] = arr[j], arr[j] = tmp)
+ QSORT(sz, LESS, SWAP);
+#undef SWAP
+#undef LESS
+}
+
+void
+sort·uint32s(uintptr sz, uint32 arr[])
+{
+ uint32 tmp;
+#define LESS(i, j) (arr[i] < arr[j])
+#define SWAP(i, j) (tmp = arr[i], arr[i] = arr[j], arr[j] = tmp)
+ QSORT(sz, LESS, SWAP);
+#undef SWAP
+#undef LESS
+}
+
+void
+sort·uint64s(uintptr sz, uint64 arr[])
+{
+ uint64 tmp;
+#define LESS(i, j) (arr[i] < arr[j])
+#define SWAP(i, j) (tmp = arr[i], arr[i] = arr[j], arr[j] = tmp)
+ QSORT(sz, LESS, SWAP);
+#undef SWAP
+#undef LESS
+}
+
+// -----------------------------------------------------------------------
+// floats
+
+void
+sort·floats(uintptr sz, float arr[])
+{
+ float tmp;
+#define LESS(i, j) (arr[i] < arr[j])
+#define SWAP(i, j) (tmp = arr[i], arr[i] = arr[j], arr[j] = tmp)
+ QSORT(sz, LESS, SWAP);
+#undef SWAP
+#undef LESS
+}
+
+void
+sort·doubles(uintptr sz, double arr[])
+{
+ double tmp;
+#define LESS(i, j) (arr[i] < arr[j])
+#define SWAP(i, j) (tmp = arr[i], arr[i] = arr[j], arr[j] = tmp)
+ QSORT(sz, LESS, SWAP);
+#undef SWAP
+#undef LESS
+}
+
+// -----------------------------------------------------------------------
+// strings
+
+void
+sort·strings(uintptr sz, byte* arr[])
+{
+ byte *tmp;
+#define LESS(i, j) (strcmp(arr[i], arr[j]) < 0)
+#define SWAP(i, j) (tmp = arr[i], arr[i] = arr[j], arr[j] = tmp)
+ QSORT(sz, LESS, SWAP);
+#undef SWAP
+#undef LESS
+}