# HG changeset patch # User ikkun # Date 1474890198 -32400 # Node ID 2493f4226ca686abd460dfa1629f1156c770eb59 # Parent b224aa7b80a0746efc5a3cd9ae2d2cb49fbbae9c remove code stack, add stackPop2 diff -r b224aa7b80a0 -r 2493f4226ca6 src/parallel_execution/rb_tree.c --- 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;