This patch is adding a new static function treeDeleteNode to factorize
some code.

---
 WINGs/bagtree.c | 38 +++++++++-----------------------------
 1 file changed, 9 insertions(+), 29 deletions(-)

diff --git a/WINGs/bagtree.c b/WINGs/bagtree.c
index 25ac080..4b3062c 100644
--- a/WINGs/bagtree.c
+++ b/WINGs/bagtree.c
@@ -420,10 +420,8 @@ void WMInsertInBag(WMBag * self, int index, void *item)
  self->count++;
 }

-int WMRemoveFromBag(WMBag * self, void *item)
+static int treeDeleteNode(WMBag * self, W_Node *ptr)
 {
- W_Node *ptr = treeFind(self->root, self->nil, item);
-
  if (ptr != self->nil) {
  W_Node *tmp;

@@ -439,11 +437,15 @@ int WMRemoveFromBag(WMBag * self, void *item)
  if (self->destructor)
  self->destructor(ptr->data);
  wfree(ptr);
-
  return 1;
- } else {
- return 0;
  }
+ return 0;
+}
+
+int WMRemoveFromBag(WMBag * self, void *item)
+{
+ W_Node *ptr = treeFind(self->root, self->nil, item);
+ return treeDeleteNode(self, ptr);
 }

 int WMEraseFromBag(WMBag * self, int index)
@@ -470,29 +472,7 @@ int WMEraseFromBag(WMBag * self, int index)
 int WMDeleteFromBag(WMBag * self, int index)
 {
  W_Node *ptr = treeSearch(self->root, self->nil, index);
-
- if (ptr != self->nil) {
- W_Node *tmp;
-
- self->count--;
-
- tmp = treeSuccessor(ptr, self->nil);
- while (tmp != self->nil) {
- tmp->index--;
- tmp = treeSuccessor(tmp, self->nil);
- }
-
- ptr = rbTreeDelete(self, ptr);
- if (self->destructor)
- self->destructor(ptr->data);
- wfree(ptr);
-
- wassertrv(self->count == 0 || self->root->index >= 0, 1);
-
- return 1;
- } else {
- return 0;
- }
+ return treeDeleteNode(self, ptr);
 }

 void *WMGetFromBag(WMBag * self, int index)
-- 
1.8.3.2

Attachment: 0002-WINGs-merge-bagtree-duplicate-code.patch
Description: Binary data

Reply via email to