[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