changeset 130:2493f4226ca6

remove code stack, add stackPop2
author ikkun
date Mon, 26 Sep 2016 20:43:18 +0900
parents b224aa7b80a0
children f708b271a7b8
files src/parallel_execution/rb_tree.c
diffstat 1 files changed, 11 insertions(+), 15 deletions(-) [+]
line wrap: on
line diff
--- a/src/parallel_execution/rb_tree.c	Mon Sep 26 20:20:16 2016 +0900
+++ b/src/parallel_execution/rb_tree.c	Mon Sep 26 20:43:18 2016 +0900
@@ -89,13 +89,10 @@
                     &context->data[context->dataNum]->node);
 }
 
-// parent, grandparent and Node stack are input data segments
 __code insertCase1(struct Context* context, struct Tree* tree, struct Node* current) {
     if (!isEmpty(context->node_stack)) // parent!=null
         goto meta(context, InsertCase2);
-
     tree->root->color = Black;
-
     goto meta(context, StackClear);
 }
 
@@ -104,14 +101,9 @@
 }
 
 __code insertCase2(struct Context* context, struct Node* current) {
-    struct Node* parent;
-    stack_pop(context->node_stack, &parent);
-    
     if (parent->color == Black) {
         goto meta(context, StackClear);
     }
-    
-    stack_push(context->node_stack, &parent);
     goto meta(context, InsertCase3);
 }
 
@@ -119,13 +111,8 @@
     goto insertCase2(context, context->data[Traverse]->traverse.current);
 }
 
-__code insertCase3(struct Context* context, struct Traverse* traverse, struct Node* current) {
-    struct Node* parent;
+__code insertCase3(struct Context* context, struct Traverse* traverse, struct Node* current, struct Node* pararent, struct Node* grandparent) {
     struct Node* uncle;
-    struct Node* grandparent;
-
-    stack_pop(context->node_stack, &parent);
-    stack_pop(context->node_stack, &grandparent);
 
     if (grandparent->left == parent)
         uncle = grandparent->right;
@@ -138,7 +125,7 @@
         uncle->color = Black;
         grandparent->color = Red;
         traverse->current = grandparent;
-        goto meta(context, InsertCase1);
+        goto meta(context, StackPop2);
     }
 
     stack_push(context->node_stack, &grandparent);
@@ -148,8 +135,17 @@
 }
 
 __code insert3_stub(struct Context* context) {
+
     goto insertCase3(context, &context->data[Traverse]->traverse, context->data[Traverse]->traverse.current);
 }
+__code stackPop2(struct Context* context, struct Traverse* traverse, struct Node* current) {
+    stack_pop(context->node_stack, &parent);
+    stack_pop(context->node_stack, &grandparent);
+    goto meta(context, InsertCase1);
+}
+__code stackPop2_stub(struct Context* context) {
+    goto stackPop2(context, &context->data[Traverse]->traverse, context->data[Traverse]->traverse.current);
+}
 
 __code insertCase4(struct Context* context, struct Traverse* traverse, struct Node* current) {
     struct Node* parent;