Subversion Repositories PlanixRsrch.SVN

Compare Revisions

Ignore whitespace Rev 8 → Rev 9

/trunk/libmavl/mavl.c
92,7 → 92,7
mavl_insert0(struct mavl *t, struct mavlnode **parent, const void **data)
{
struct mavlnode *n;
int rc, bal;
int rc, bal;
 
n = *parent;
rc = t->cmp(*data, mavlnode_dataptr(n));
138,33 → 138,29
}
 
if (n->left->bal == 1) {
rot_lr(n, parent);
 
if ((*parent)->bal == 1) {
switch (n->left->right->bal) {
case 1:
n->bal = 0;
n->left->bal = -1;
 
} else if ((*parent)->bal == -1) {
break;
case -1:
break;
n->bal = 1;
n->left->bal = 0;
 
} else {
break;
default:
n->bal = 0;
n->left->bal = 0;
}
 
(*parent)->bal = 0;
 
n->left->right->bal = 0;
rot_lr(n, parent);
return 0;
 
}
 
}
 
return bal;
}
 
}
/* rcs < 0 */
/* rc is > 0 here */
if (!n->right) {
 
n->right = mavlnode_create(t, *data);
197,22 → 193,22
 
} else if (n->right->bal == -1) {
 
rot_rl(n, parent);
 
if ((*parent)->bal == -1) {
switch (n->right->left->bal) {
case -1:
n->bal = 0;
n->right->bal = 1;
 
} else if ((*parent)->bal == 1) {
break;
case 1:
n->bal = -1;
n->right->bal = 0;
 
} else {
break;
default:
n->bal = 0;
n->right->bal = 0;
 
}
 
(*parent)->bal = 0;
n->right->left->bal = 0;
rot_rl(n, parent);
return 0;
}
}
219,11 → 215,11
return bal;
}
 
void *
void *
mavl_insert(struct mavl *t, const void *data, int *exists)
{
const void *d;
int rc;
const void *d;
int rc;
 
if (t->root == NULL) {
t->root = mavlnode_create(t, data);
303,7 → 299,7
struct mavlnode *n = *parent;
 
if (n->left != 0) {
int bal = mavl_del_lo(t, &n->left, data);
int bal = mavl_del_lo(t, &n->left, data);
n->bal += bal;
if (n->bal == 1) {
return 0;
315,7 → 311,6
}
 
/* found the lowest element */
 
*parent = n->right;
(void)memcpy(data, mavlnode_dataptr(n), t->data_size);
free(n);
326,8 → 321,8
mavl_del0(struct mavl *t, struct mavlnode **parent, void *data)
{
struct mavlnode *n = *parent;
int rc;
int bal;
int rc;
int bal;
rc = t->cmp(data, mavlnode_dataptr(n));
 
if (rc < 0) {
392,11 → 387,11
return 1;
}
 
void *
void *
mavl_del(struct mavl *t, const void *data)
{
void *d;
int rc;
void *d;
int rc;
 
if (!t->root)
return NULL;
407,3 → 402,4
return NULL;
return (void *)data;
}