Archived
1
0
Fork 0

rbtree.c: changed return values in insert/delete.

This commit is contained in:
Henrik Hautakoski 2011-01-05 10:17:22 +01:00
parent 0fba36440c
commit 6514462cdb
2 changed files with 6 additions and 8 deletions

View file

@ -68,14 +68,14 @@ Functions
Creates and inserts a new node in the tree. +
If provided, calls `rbtree->update_fn` and `rbtree->delete_fn` if a node should be updated. +
Returns a nonzero value if a new node was inserted, zero if 'key' already existed and that node was updated.
Returns nonzero if a new node was inserted or updated, zero otherwise.
NOTE: The memory pointed to by the 'key' pointer is *not* copied so you must ensure that it has a infinite lifetime.
`rbtree_delete()`::
Deletes a node from the tree. if provided, calls `rbtree->delete_fn` for the node. +
Returns non zero if a node was removed. zero otherwise.
Returns nonzero if a node was removed, zero otherwise.
`rbtree_free()`::

View file

@ -133,14 +133,13 @@ int rbtree_insert(rbtree *tree, const void *key) {
/* iterator and parent */
rbnode *p, *q;
unsigned char dir = 0, dir2, last, inserted = 0;
unsigned char dir = 0, dir2, last;
if (!tree || !tree->cmp_fn)
return 0;
if (tree->root == NULL) {
tree->root = node_alloc(key);
inserted = 1;
goto done;
}
@ -155,7 +154,6 @@ int rbtree_insert(rbtree *tree, const void *key) {
if (q == NULL) {
p->child[dir] = q = node_alloc(key);
inserted = 1;
} else if (is_red(q->child[0]) && is_red(q->child[1])) {
/* color flip case */
q->color = RB_RED;
@ -186,7 +184,7 @@ int rbtree_insert(rbtree *tree, const void *key) {
q = q->child[dir];
}
if (!inserted) {
if (q->key != key) {
if (tree->delete_fn)
tree->delete_fn((void*)q->key);
q->key = key;
@ -198,7 +196,7 @@ done:
/* root should be black */
tree->root->color = RB_BLACK;
return inserted;
return 1;
}
int rbtree_delete(rbtree *tree, const void *key) {
@ -212,7 +210,7 @@ int rbtree_delete(rbtree *tree, const void *key) {
rbnode *f = NULL;
unsigned char dir = 1, dir2, last;
if (rbtree_is_empty(tree) || !tree->cmp_fn)
return 0;