Commit 712dc43d authored by David Gibson's avatar David Gibson

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: default avatarDavid Gibson <david@gibson.dropbear.id.au>
parent 918a733f
......@@ -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;
}
......
......@@ -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));
......
......@@ -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;
};
......
......@@ -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);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment