aboutsummaryrefslogtreecommitdiff
path: root/src/lib/index/index_callbacks.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/index/index_callbacks.c')
-rw-r--r--src/lib/index/index_callbacks.c41
1 files changed, 41 insertions, 0 deletions
diff --git a/src/lib/index/index_callbacks.c b/src/lib/index/index_callbacks.c
new file mode 100644
index 0000000..1e60863
--- /dev/null
+++ b/src/lib/index/index_callbacks.c
@@ -0,0 +1,41 @@
+//
+// Created by jhunk on 11/15/24.
+//
+
+#include "core.h"
+#include "index_callbacks.h"
+
+// qsort callback to sort delivery contexts by compact python version
+int callback_sort_deliveries_cmpfn(const void *a, const void *b) {
+ const struct Delivery *delivery1 = (struct Delivery *) a;
+ const size_t delivery1_python = strtoul(delivery1->meta.python_compact, NULL, 10);
+ const struct Delivery *delivery2 = (struct Delivery *) b;
+ const size_t delivery2_python = strtoul(delivery2->meta.python_compact, NULL, 10);
+
+ if (delivery2_python > delivery1_python) {
+ return 1;
+ }
+ if (delivery2_python < delivery1_python) {
+ return -1;
+ }
+ return 0;
+}
+
+// qsort callback to sort dynamically allocated delivery contexts by compact python version
+int callback_sort_deliveries_dynamic_cmpfn(const void *a, const void *b) {
+ const struct Delivery *delivery1 = a;
+ const size_t delivery1_python = strtoul(delivery1->meta.python_compact, NULL, 10);
+ const int delivery1_rc = delivery1->meta.rc;
+ const struct Delivery *delivery2 = b;
+ const size_t delivery2_python = strtoul(delivery2->meta.python_compact, NULL, 10);
+ const int delivery2_rc = delivery2->meta.rc;
+
+ if (delivery2_python > delivery1_python && delivery2_rc > delivery1_rc) {
+ return 1;
+ }
+ if (delivery2_python < delivery1_python && delivery2_rc < delivery1_rc) {
+ return -1;
+ }
+ return 0;
+}
+