n = t->root;
while (n) {
- if ( (c = t->cmp(e, n->elems[0])) < 0)
+ if ( (c = cmp(e, n->elems[0])) < 0)
n = n->kids[0];
else if (c == 0)
return n->elems[0];
- else if (n->elems[1] == NULL || (c = t->cmp(e, n->elems[1])) < 0)
+ else if (n->elems[1] == NULL || (c = cmp(e, n->elems[1])) < 0)
n = n->kids[1];
else if (c == 0)
return n->elems[1];
- else if (n->elems[2] == NULL || (c = t->cmp(e, n->elems[2])) < 0)
+ else if (n->elems[2] == NULL || (c = cmp(e, n->elems[2])) < 0)
n = n->kids[2];
else if (c == 0)
return n->elems[2];
* Delete an element e in a 2-3-4 tree. Does not free the element,
* merely removes all links to it from the tree nodes.
*/
-void *del234(tree234 *t, void *e) {
+void del234(tree234 *t, void *e) {
node234 *n;
int ei = -1;
*/
int i;
LOG((" case 1\n"));
- for (i = ei; i < 3 && n->elems[i+1]; i++)
+ for (i = ei; i < 2 && n->elems[i+1]; i++)
n->elems[i] = n->elems[i+1];
n->elems[i] = NULL;
return; /* finished! */
return n->elems[0];
}
- if (pos == 0 && n->elems[1]) {
- e->posn = 1;
- return n->elems[1];
+ if (pos < 2 && n->elems[pos+1]) {
+ e->posn = pos+1;
+ return n->elems[e->posn];
}
do {