Browse Source

avl: Use definitions from order module

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 module, so use that rather than defining its
own.

In addition use the standard comparison functions from order where possible
for the avl test code.

Cc: Joey Adams <joeyadams3.14159@gmail.com>

Signed-off-by: David Gibson <david@gibson.dropbear.id.au>
David Gibson 10 years ago
parent
commit
712dc43d55
4 changed files with 8 additions and 20 deletions
  1. 2 2
      ccan/avl/_info
  2. 1 1
      ccan/avl/avl.c
  3. 4 4
      ccan/avl/avl.h
  4. 1 13
      ccan/avl/test/run.c

+ 2 - 2
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\n");
 		return 0;
 	}
 

+ 1 - 1
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));
 	

+ 4 - 4
ccan/avl/avl.h

@@ -26,13 +26,13 @@
 #include <stdbool.h>
 #include <stddef.h>
 
+#include <ccan/order/order.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;
 };

+ 1 - 13
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);