From 40ac6ba4c7d0fbab636abc8b5682362c0bc85748 Mon Sep 17 00:00:00 2001
From: David Maciejak <david.maciejak@gmail.com>
Date: Tue, 2 Sep 2014 11:19:09 +0700
Subject: [PATCH 2/3] WINGs: merge bagtree duplicate code

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

