changeset 129:b224aa7b80a0

remove code stack, stack clear is directly called
author ikkun
date Mon, 26 Sep 2016 20:20:16 +0900
parents 32773f506410
children 2493f4226ca6
files src/parallel_execution/context.h src/parallel_execution/rb_tree.c
diffstat 2 files changed, 9 insertions(+), 17 deletions(-) [+]
line wrap: on
line diff
--- a/src/parallel_execution/context.h	Mon Sep 26 19:54:24 2016 +0900
+++ b/src/parallel_execution/context.h	Mon Sep 26 20:20:16 2016 +0900
@@ -156,6 +156,7 @@
     } tree;
     struct Traverse {
         enum Code next;
+        enum Code rotateNext;
         struct Node* current;
         int result;
     } traverse;
--- a/src/parallel_execution/rb_tree.c	Mon Sep 26 19:54:24 2016 +0900
+++ b/src/parallel_execution/rb_tree.c	Mon Sep 26 20:20:16 2016 +0900
@@ -16,10 +16,6 @@
     // we don't need this push
     stack_push(context->code_stack, &context->next);
 
-    // after insert or replace, go to stack clear direct, we don't need this push 
-    context->next = StackClear;
-    stack_push(context->code_stack, &context->next);
-    
     tree->root = &context->data[context->dataNum]->node;
     
     if (root) {
@@ -100,9 +96,7 @@
 
     tree->root->color = Black;
 
-    //go to stack clear
-    stack_pop(context->code_stack, &context->next);
-    goto meta(context, context->next);
+    goto meta(context, StackClear);
 }
 
 __code insert1_stub(struct Context* context) {
@@ -114,8 +108,7 @@
     stack_pop(context->node_stack, &parent);
     
     if (parent->color == Black) {
-        stack_pop(context->code_stack, &context->next);
-        goto meta(context, context->next);
+        goto meta(context, StackClear);
     }
     
     stack_push(context->node_stack, &parent);
@@ -170,10 +163,10 @@
     traverse->current = parent;
 
     if ((current == parent->right) && (parent == grandparent->left)) {
-        traverse->next = InsertCase4_1;
+        traverse->rotateNext = InsertCase4_1;
         goto meta(context, RotateL);
     } else if ((current == parent->left) && (parent == grandparent->right)) {
-        traverse->next = InsertCase4_2;
+        traverse->rotateNext = InsertCase4_2;
         goto meta(context, RotateR);
     }
 
@@ -217,7 +210,7 @@
     grandparent->color = Red;
 
     traverse->current = grandparent;
-    traverse->next = context->next;
+    traverse->rotateNext = StackClear;
     if ((current == parent->left) && (parent == grandparent->left))
         goto meta(context, RotateR);
     else
@@ -251,7 +244,7 @@
     tmp->left = node;
     traverse->current = tmp;
     
-    goto meta(context, traverse->next);
+    goto meta(context, traverse->rotateNext);
 }
     
 __code rotateLeft_stub(struct Context* context) {
@@ -282,7 +275,7 @@
     tmp->right = node;
     traverse->current = tmp;
     
-    goto meta(context, traverse->next);
+    goto meta(context, traverse->rotateNext);
 }
 
 __code rotateRight_stub(struct Context* context) {
@@ -298,7 +291,6 @@
 
     traverse->current = 0;
 
-    stack_pop(context->code_stack, &context->next);
     goto meta(context, context->next);
 }
 
@@ -314,7 +306,7 @@
         goto meta(context, Search);
     }
 
-    goto meta(context, traverse->next);
+    goto meta(context, context->next);
 }
 
 __code get_stub(struct Context* context) {
@@ -337,7 +329,6 @@
     if (traverse->current)
         goto meta(context, Search);
 
-    stack_pop(context->code_stack, &context->next);
     goto meta(context, context->next);
 }