9 #define OUT(fmt, ...) do { \
10 fprintf(stdout, "%s: " fmt, __func__, ## __VA_ARGS__); \
25 const char *vals[] = {
26 "zero",
"one",
"two",
"three",
"four",
"five",
"six",
27 "seven",
"eight",
"nine",
"ten",
"eleven",
"twelve"
34 struct node *n = malloc(
sizeof(
struct node));
38 fprintf(stdout,
"%d=%s ", r, (
char *)n->
avl.
key);
40 fprintf(stdout,
"\n");
42 OUT(
"insert duplicate: ");
44 struct node *n = malloc(
sizeof(
struct node));
48 fprintf(stdout,
"%d=%s ", r, (
char *)n->
avl.
key);
53 fprintf(stdout,
"\n");
59 OUT(
"for each element: ");
61 fprintf(stdout,
"%s ", (
char*)elem->
avl.
key);
63 fprintf(stdout,
"\n");
65 OUT(
"delete 'one' element\n");
70 OUT(
"for each element reverse: ");
72 fprintf(stdout,
"%s ", (
char*)elem->
avl.
key);
74 fprintf(stdout,
"\n");
76 OUT(
"delete all elements\n");
int avl_strcmp(const void *k1, const void *k2, void *ptr)
int avl_insert(struct avl_tree *tree, struct avl_node *new)
void avl_init(struct avl_tree *tree, avl_tree_comp comp, bool allow_dups, void *ptr)
void avl_delete(struct avl_tree *tree, struct avl_node *node)
#define avl_first_element(tree, element, node_member)
#define avl_find_element(tree, key, element, node_element)
#define avl_for_each_element_reverse(tree, element, node_member)
#define avl_for_each_element(tree, element, node_member)
#define avl_last_element(tree, element, node_member)
#define avl_for_each_element_safe(tree, element, node_member, ptr)
static void test_basics()