1
0
mirror of https://github.com/gryf/wmaker.git synced 2026-01-05 21:34:17 +01:00

fixed insert

This commit is contained in:
kojima
2000-04-01 23:56:37 +00:00
parent 32160ff66f
commit 0c010ba778

View File

@@ -145,7 +145,7 @@ static void treeInsert(W_TreeBag *tree, W_Node *node)
while (x != tree->nil) { while (x != tree->nil) {
y = x; y = x;
if (node->index < x->index) if (node->index <= x->index)
x = x->left; x = x->left;
else else
x = x->right; x = x->right;
@@ -153,7 +153,7 @@ static void treeInsert(W_TreeBag *tree, W_Node *node)
node->parent = y; node->parent = y;
if (y == tree->nil) if (y == tree->nil)
tree->root = node; tree->root = node;
else if (node->index < y->index) else if (node->index <= y->index)
y->left = node; y->left = node;
else else
y->right = node; y->right = node;
@@ -544,6 +544,8 @@ static int removeFromBag(WMBag *self, void *item)
} }
ptr = rbTreeDelete(SELF, ptr); ptr = rbTreeDelete(SELF, ptr);
if (self->destructor)
self->destructor(ptr->data);
free(ptr); free(ptr);
return 1; return 1;
@@ -563,6 +565,8 @@ static int eraseFromBag(WMBag *self, int index)
SELF->count--; SELF->count--;
ptr = rbTreeDelete(SELF, ptr); ptr = rbTreeDelete(SELF, ptr);
if (self->destructor)
self->destructor(ptr->data);
free(ptr); free(ptr);
return 1; return 1;
@@ -588,6 +592,8 @@ static int deleteFromBag(WMBag *self, int index)
} }
ptr = rbTreeDelete(SELF, ptr); ptr = rbTreeDelete(SELF, ptr);
if (self->destructor)
self->destructor(ptr->data);
free(ptr); free(ptr);
return 1; return 1;
@@ -657,8 +663,9 @@ static void *replaceInBag(WMBag *self, int index, void *item)
if (item == NULL) { if (item == NULL) {
SELF->count--; SELF->count--;
ptr = rbTreeDelete(SELF, ptr); ptr = rbTreeDelete(SELF, ptr);
if (self->destructor)
self->destructor(ptr->data);
free(ptr); free(ptr);
} else if (ptr != SELF->nil) { } else if (ptr != SELF->nil) {
old = ptr->data; old = ptr->data;
@@ -691,6 +698,8 @@ static int sortBag(WMBag *self, int (*comparer)(const void*, const void*))
W_Node *tmp; W_Node *tmp;
int i; int i;
if (SELF->count == 0)
return 1;
items = wmalloc(sizeof(void*)*SELF->count); items = wmalloc(sizeof(void*)*SELF->count);
i = 0; i = 0;
@@ -747,6 +756,9 @@ static void freeBag(WMBag *self)
{ {
emptyBag(self); emptyBag(self);
free(SELF->nil);
free(self->data);
free(self); free(self);
} }