aboutsummaryrefslogtreecommitdiff
path: root/src/lib/index/index_callbacks.c
diff options
context:
space:
mode:
authorJoseph Hunkeler <jhunkeler@gmail.com>2025-02-14 12:54:24 -0500
committerJoseph Hunkeler <jhunkeler@gmail.com>2025-02-14 12:54:24 -0500
commit190d3fbe0f99feb8b00cef34d834c4ef5abb5262 (patch)
treeb9dd8520d2e8e3a97ea6267bc06f89b25353d69b /src/lib/index/index_callbacks.c
parent952de22b54c85aac5eef77d9aafe6587ad555fce (diff)
downloadstasis-testable-entrypoint.tar.gz
Add library stasis_index.atestable-entrypoint
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;
+}
+