[ccan] [PATCH 4/4] avl: Use definitions from order_functions module
David Gibson
david at gibson.dropbear.id.au
Mon Jun 1 20:21:08 AEST 2015
The AvlCompare type defined in the avl module is identical in signature to
the compare function used by qsort() and bsearch(). That has a common
definition in the new order_functions module, so use that rather than
defining its own.
In addition use the standard comparison functions from order_functions
where possible for the avl test code.
Cc: Joey Adams <joeyadams3.14159 at gmail.com>
Signed-off-by: David Gibson <david at gibson.dropbear.id.au>
---
ccan/avl/_info | 4 ++--
ccan/avl/avl.c | 2 +-
ccan/avl/avl.h | 8 ++++----
ccan/avl/test/run.c | 14 +-------------
4 files changed, 8 insertions(+), 20 deletions(-)
diff --git a/ccan/avl/_info b/ccan/avl/_info
index 83893dd..16247cf 100644
--- a/ccan/avl/_info
+++ b/ccan/avl/_info
@@ -33,7 +33,7 @@
*
* int main(void)
* {
- * AVL *avl = avl_new((AvlCompare) strcmp);
+ * AVL *avl = avl_new((total_order_noctx_cb) strcmp);
* AvlIter i;
* struct tally *tally;
* char line[256];
@@ -75,7 +75,7 @@ int main(int argc, char *argv[])
return 1;
if (strcmp(argv[1], "depends") == 0) {
- /* Nothing */
+ printf("ccan/order_functions\n");
return 0;
}
diff --git a/ccan/avl/avl.c b/ccan/avl/avl.c
index 001ea43..d1647f3 100644
--- a/ccan/avl/avl.c
+++ b/ccan/avl/avl.c
@@ -62,7 +62,7 @@ static int sign(int cmp)
return 1;
}
-AVL *avl_new(AvlCompare compare)
+AVL *avl_new(total_order_noctx_cb compare)
{
AVL *avl = malloc(sizeof(*avl));
diff --git a/ccan/avl/avl.h b/ccan/avl/avl.h
index 4cbe08b..8e789ed 100644
--- a/ccan/avl/avl.h
+++ b/ccan/avl/avl.h
@@ -26,13 +26,13 @@
#include <stdbool.h>
#include <stddef.h>
+#include <ccan/order_functions/order_functions.h>
+
typedef struct AVL AVL;
typedef struct AvlNode AvlNode;
typedef struct AvlIter AvlIter;
-typedef int (*AvlCompare)(const void *, const void *);
-
-AVL *avl_new(AvlCompare compare);
+AVL *avl_new(total_order_noctx_cb compare);
/* Create a new AVL tree sorted with the given comparison function. */
void avl_free(AVL *avl);
@@ -106,7 +106,7 @@ void avl_iter_next(AvlIter *iter);
/***************** Internal data structures ******************/
struct AVL {
- AvlCompare compare;
+ total_order_noctx_cb compare;
AvlNode *root;
size_t count;
};
diff --git a/ccan/avl/test/run.c b/ccan/avl/test/run.c
index 3ca88d9..f621a32 100644
--- a/ccan/avl/test/run.c
+++ b/ccan/avl/test/run.c
@@ -132,18 +132,6 @@ struct test_item {
size_t insert_id; /* needed because qsort is not a stable sort */
};
-static int compare_uint32_t(const void *ap, const void *bp)
-{
- uint32_t a = *(const uint32_t *)ap;
- uint32_t b = *(const uint32_t *)bp;
-
- if (a < b)
- return -1;
- if (a > b)
- return 1;
- return 0;
-}
-
static int compare_test_item(const void *ap, const void *bp)
{
const struct test_item *a = *(void**)ap, *b = *(void**)bp;
@@ -266,7 +254,7 @@ static void benchmark(size_t max_per_trial, size_t round_count, bool random_coun
}
scramble(test_item, count, sizeof(*test_item));
- avl = avl_new(compare_uint32_t);
+ avl = avl_new(order_u32_noctx);
clear_stats();
printf(" Inserting %zu items...\n", count);
--
2.4.2
More information about the ccan
mailing list