# HG changeset patch # User ikkun # Date 1474888816 -32400 # Node ID b224aa7b80a0746efc5a3cd9ae2d2cb49fbbae9c # Parent 32773f506410087e38ab184ffd8058e96e79ccc7 remove code stack, stack clear is directly called diff -r 32773f506410 -r b224aa7b80a0 src/parallel_execution/context.h --- 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; diff -r 32773f506410 -r b224aa7b80a0 src/parallel_execution/rb_tree.c --- 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); }