diff --git a/docs/rbtree.txt b/docs/rbtree.txt index 7955323..ba7ce1f 100644 --- a/docs/rbtree.txt +++ b/docs/rbtree.txt @@ -83,7 +83,8 @@ NOTE: The memory pointed to by the 'key' pointer is *not* copied so you must ens `rbtree_walk()`:: - Walks the tree in in-order and calls the 'action' callback function for every node. + Walks the tree in-order and passes a pointer to `rbnode->key` + for the given node to the 'action' callback function. `rbtree_search()`:: diff --git a/src/rbtree.c b/src/rbtree.c index 3c3e66f..18dcadd 100644 --- a/src/rbtree.c +++ b/src/rbtree.c @@ -50,13 +50,13 @@ static void node_dealloc(rbnode *n, void (*dealloc)(void *)) { /* * Recursivly walks a tree, applying action function on every node */ -static void rbwalk(rbnode *n, void (*action)(rbnode *)) { +static void rbwalk(rbnode *n, void (*action)(const void *)) { if (n == NULL) return; rbwalk(n->child[0], action); - action(n); + action(n->key); rbwalk(n->child[1], action); } @@ -106,7 +106,7 @@ void* rbtree_search(rbtree *tree, const void *key) { return NULL; } -void rbtree_walk(rbtree *tree, void (*action)(rbnode *)) { +void rbtree_walk(rbtree *tree, void (*action)(const void *)) { if (tree == NULL || action == NULL) return; diff --git a/src/rbtree.h b/src/rbtree.h index 2de7ef0..e223b36 100644 --- a/src/rbtree.h +++ b/src/rbtree.h @@ -37,7 +37,7 @@ int rbtree_is_empty(rbtree *tree); void* rbtree_search(rbtree *tree, const void *key); -void rbtree_walk(rbtree *tree, void (*action)(rbnode *)); +void rbtree_walk(rbtree *tree, void (*action)(const void *)); void rbtree_free(rbtree *tree); diff --git a/test/t_rbtree.c b/test/t_rbtree.c index 94cf17e..0b2c4cf 100644 --- a/test/t_rbtree.c +++ b/test/t_rbtree.c @@ -94,14 +94,14 @@ static int keyref_exists(int low, int high, int value) { return 0; } -static void walk_fn(rbnode *n) { +static void walk_fn(const void *key) { static int i = 0; while(keyref_exists(0, i-1, keyref[i])) i++; - assert(keyref[i] == *((int*)n->key)); + assert(keyref[i] == *((int*)key)); if (++i > NODES) i = 0;