changeset 80:099d85f9d371

refactoring
author Shohei KOKUBO <e105744@ie.u-ryukyu.ac.jp>
date Mon, 30 Nov 2015 21:40:50 +0900
parents 618c03f25108
children dc6f665bb753
files src/llrb/llrb.c
diffstat 1 files changed, 28 insertions(+), 25 deletions(-) [+]
line wrap: on
line diff
--- a/src/llrb/llrb.c	Fri Nov 27 02:14:25 2015 +0900
+++ b/src/llrb/llrb.c	Mon Nov 30 21:40:50 2015 +0900
@@ -16,6 +16,7 @@
 
     if (tree->root) {
         tree->current = tree->root;
+        tree->root = &context->data[context->dataNum]->node;
         compare(context, tree, tree->current->key, context->data[Node]->node.key);
 
         goto meta(context, Replace);
@@ -34,7 +35,8 @@
     if (result == 0) {
         newNode->value = context->data[Node]->node.value;
 
-        goto meta(context, SetRoot);
+        stack_pop(context->code_stack, &context->next);
+        goto meta(context, context->next);
     } else if (result == 1) {
         tree->current = oldNode->right;
         newNode->right = context->heap;
@@ -59,11 +61,29 @@
     goto replaceNode(context, &context->data[Tree]->tree, context->data[Tree]->tree.current, &context->data[context->dataNum]->node, context->data[Tree]->tree.result);
 }
 
+__code insertNode(struct Context* context, struct Tree* tree, struct Node* node, struct Node* newNode) {
+    node->color = Red;
+    *newNode = *node;
+    newNode->parent = tree->current;
+    
+    tree->current = newNode;
+
+    goto meta(context, Balance1);
+}
+
+__code insertNode_stub(struct Context* context) {
+    goto insertNode(context, &context->data[Tree]->tree, &context->data[Node]->node, &context->data[context->dataNum]->node);
+}
+
 __code balance1(struct Context* context, struct Node* current) {
-    if (current->parent == 0)
-        goto meta(context, SetRoot);
-    else
+    if (current->parent == 0) {
+        current->color = Black;
+        
+        stack_pop(context->code_stack, &context->next);
+        goto meta(context, context->next);
+    } else {
         goto meta(context, Balance2);
+    }
 }
 
 __code balance1_stub(struct Context* context) {
@@ -105,7 +125,7 @@
 }
 
 __code balance3_stub(struct Context* context) {
-    goto balance3(context, context->data[Tree], context->data[Tree]->tree.current);
+    goto balance3(context, &context->data[Tree]->tree, context->data[Tree]->tree.current);
 }
 
 __code balance4(struct Context* context, struct Node* current) {
@@ -136,7 +156,7 @@
 }
 
 __code balance4_1_stub(struct Context* context) {
-    goto balance4_1(context, context->data[Tree]);
+    goto balance4_1(context, &context->data[Tree]->tree);
 }   
 
 __code balance4_2(struct Context* context, struct Tree* tree) {
@@ -145,16 +165,13 @@
 }
 
 __code balance4_2_stub(struct Context* context) {
-    goto balance4_2(context, context->data[Tree]);
+    goto balance4_2(context, &context->data[Tree]->tree);
 }   
 
 __code balance5(struct Context* context, struct Tree* tree, struct Node* current) {
     current->parent->color = Black;
     current->parent->parent->color = Red;
 
-    context->next = SetRoot;
-
-    stack_push(context->code_stack, &context->next);
     tree->current = current->parent->parent;
 
     if ((current == current->parent->left) && (current->parent == current->parent->parent->left))
@@ -164,21 +181,7 @@
 }
 
 __code balance5_stub(struct Context* context) {
-    goto balance5(context, context->data[Tree], context->data[Tree]->tree.current);
-}
-
-__code insertNode(struct Context* context, struct Tree* tree, struct Node* node, struct Node* newNode) {
-    node->color = Red;
-    *newNode = *node;
-    newNode->parent = tree->current;
-    
-    tree->current = newNode;
-
-    goto meta(context, Balance1);
-}
-
-__code insertNode_stub(struct Context* context) {
-    goto insertNode(context, &context->data[Tree]->tree, &context->data[Node]->node, &context->data[context->dataNum]->node);
+    goto balance5(context, &context->data[Tree]->tree, context->data[Tree]->tree.current);
 }
 
 __code rotateLeft(struct Context* context, struct Node* node, struct Tree* tree) {