Archived
1
0
Fork 0

rbtree.c: return key instead of using callback.

This commit is contained in:
Henrik Hautakoski 2011-02-01 10:21:57 +01:00
parent 9e185ea920
commit 442e912835
3 changed files with 7 additions and 9 deletions

View file

@ -52,8 +52,8 @@ NOTE: The memory pointed to by the 'key' pointer is *not* copied so you must ens
`rbtree_delete()`:: `rbtree_delete()`::
Deletes a node from the tree. if provided, calls `rbtree->delete_fn` for the node. + Deletes a node from the tree. +
Returns nonzero if a node was removed, zero otherwise. Returns the node's key if a node was removed, `NULL` otherwise.
`rbtree_free()`:: `rbtree_free()`::

View file

@ -278,7 +278,7 @@ done:
return 1; return 1;
} }
int rbtree_delete(rbtree *tree, const void *key) { void* rbtree_delete(rbtree *tree, const void *key) {
rbnode head = {0}; rbnode head = {0};
@ -286,7 +286,7 @@ int rbtree_delete(rbtree *tree, const void *key) {
rbnode *q, *p, *g, *s; rbnode *q, *p, *g, *s;
/* found item */ /* found item */
rbnode *f = NULL; rbnode *f = NULL, *ret = NULL;
int dir = 1, dir2, last; int dir = 1, dir2, last;
@ -342,9 +342,7 @@ int rbtree_delete(rbtree *tree, const void *key) {
/* remove if found */ /* remove if found */
if (f) { if (f) {
if (tree->delete_fn) ret = (void*)f->key;
tree->delete_fn((void*)f->key);
if (f != q) if (f != q)
f->key = q->key; f->key = q->key;
swap(p, 1, q) = swap(q, 0, NULL); swap(p, 1, q) = swap(q, 0, NULL);
@ -359,5 +357,5 @@ int rbtree_delete(rbtree *tree, const void *key) {
rb_assert(tree); rb_assert(tree);
#endif #endif
return f != NULL; return ret;
} }

View file

@ -33,6 +33,6 @@ void rbtree_free(rbtree *tree);
int rbtree_insert(rbtree *tree, const void *key); int rbtree_insert(rbtree *tree, const void *key);
int rbtree_delete(rbtree *tree, const void *key); void* rbtree_delete(rbtree *tree, const void *key);
#endif /* __RBTREE_H */ #endif /* __RBTREE_H */