# HG changeset patch # User one # Date 1475135903 -32400 # Node ID 36ac17d37be44228dbe3af499eadb7030820c3b9 # Parent 933c80f48d0655ca0bc0bd7715a10b712888bfc2 Fix compile error but not work diff -r 933c80f48d06 -r 36ac17d37be4 src/parallel_execution/context.c --- a/src/parallel_execution/context.c Wed Sep 28 19:02:25 2016 +0900 +++ b/src/parallel_execution/context.c Thu Sep 29 16:58:23 2016 +0900 @@ -13,6 +13,7 @@ extern __code meta(struct Context*); extern __code put_stub(struct Context*); extern __code replaceNode_stub(struct Context*); +extern __code replaceNode1_stub(struct Context*); extern __code insertNode_stub(struct Context*); extern __code rotateLeft_stub(struct Context*); extern __code rotateRight_stub(struct Context*); @@ -22,7 +23,10 @@ extern __code insert1_stub(struct Context*); extern __code insert2_stub(struct Context*); extern __code insert3_stub(struct Context*); +extern __code insert31_stub(struct Context*); extern __code insert4_stub(struct Context*); +extern __code insert4_01_stub(struct Context*); +extern __code insert4_02_stub(struct Context*); extern __code insert4_1_stub(struct Context*); extern __code insert4_2_stub(struct Context*); extern __code insert5_stub(struct Context*); @@ -81,13 +85,17 @@ /* context->code[Code6] = code6; */ context->code[PutTree] = put_stub; context->code[Replace] = replaceNode_stub; + context->code[Replace1] = replaceNode1_stub; context->code[Insert] = insertNode_stub; context->code[RotateL] = rotateLeft_stub; context->code[RotateR] = rotateRight_stub; context->code[InsertCase1] = insert1_stub; context->code[InsertCase2] = insert2_stub; context->code[InsertCase3] = insert3_stub; + context->code[InsertCase31] = insert31_stub; context->code[InsertCase4] = insert4_stub; + context->code[InsertCase4_01]= insert4_01_stub; + context->code[InsertCase4_02]= insert4_02_stub; context->code[InsertCase4_1] = insert4_1_stub; context->code[InsertCase4_2] = insert4_2_stub; context->code[InsertCase5] = insert5_stub; @@ -137,7 +145,8 @@ struct Tree* tree = ALLOC_DATA(context, Tree); tree->root = 0; - ALLOC_DATA(context, Traverse); + struct Traverse* traverse = ALLOC_DATA(context, Traverse); + traverse->nodeStack = NULL; struct Node* node = ALLOC_DATA(context, Node); node->key = 0; diff -r 933c80f48d06 -r 36ac17d37be4 src/parallel_execution/context.h --- a/src/parallel_execution/context.h Wed Sep 28 19:02:25 2016 +0900 +++ b/src/parallel_execution/context.h Thu Sep 29 16:58:23 2016 +0900 @@ -25,6 +25,7 @@ Allocator, PutTree, Replace, + Replace1, Insert, Compare, RotateL, @@ -33,7 +34,10 @@ InsertCase1, InsertCase2, InsertCase3, + InsertCase31, InsertCase4, + InsertCase4_01, + InsertCase4_02, InsertCase4_1, InsertCase4_2, InsertCase5, @@ -158,7 +162,8 @@ enum Code next; enum Code rotateNext; struct Node* current; // reading node of original tree - struct Node* newNode; // wrting node of new tree + struct Node* newNode; // writing node of new tree + struct Element* nodeStack; int result; } traverse; struct Node { diff -r 933c80f48d06 -r 36ac17d37be4 src/parallel_execution/rb_tree.c --- a/src/parallel_execution/rb_tree.c Wed Sep 28 19:02:25 2016 +0900 +++ b/src/parallel_execution/rb_tree.c Thu Sep 29 16:58:23 2016 +0900 @@ -8,7 +8,7 @@ extern int num; -__code put(struct Context* context, struct Tree* tree, struct Traverse* traverse, struct Node* root, struct Node* newNode) { +__code put(struct Context* context, struct Tree* tree, struct Node* node, struct Traverse* traverse, struct Node* root, struct Node* newNode) { traverse->newNode = newNode; tree->root = newNode; // this should done at stackClear if (root) { @@ -27,20 +27,20 @@ allocate->size = sizeof(struct Node); allocator(context); - context->data[Tree]->tree.root = &context->data[context->dataNum]->node; - goto put(context, &context->data[Tree]->tree, + &context->data[Node]->node, &context->data[Traverse]->traverse, context->data[Tree]->tree.root, - &context->data[Node]->node); + &context->data[context->dataNum]->node + ); } __code replaceNode(struct Context* context, struct Traverse* traverse, struct Node* oldNode, struct Node* newNode, struct Element* element) { *newNode = *oldNode; - element->next = traverse->stack; - element->data = (struct Data* )newNode; - traverse->stack = element; + element->next = traverse->nodeStack; + element->data = (union Data* )newNode; + traverse->nodeStack = element; // goto replaceNode1(struct Traverse* traverse, struct Node* node, struct Node* oldNode, struct Node* newNode, +struct Node* newnewNode, int result) goto meta(context, Replace1); } @@ -49,7 +49,7 @@ struct Allocate* allocate = &context->data[Allocate]->allocate; allocate->size = sizeof(struct Element); allocator(context); - struct Element* element = &context->data[context->dataNum]->node; + struct Element* element = &context->data[context->dataNum]->element; goto replaceNode(context, &context->data[Traverse]->traverse, context->data[Traverse]->traverse.current, @@ -86,9 +86,10 @@ struct Node* newnewNode = &context->data[context->dataNum]->node; goto replaceNode1(context, &context->data[Traverse]->traverse, - context->data[Node]->node, + &context->data[Node]->node, context->data[Traverse]->traverse.current, - (struct Node*)context->data[traverse]->traverse->stack->data, + &context->data[Traverse]->traverse.nodeStack->data->node, + newnewNode, context->data[Traverse]->traverse.result); } @@ -105,7 +106,7 @@ &context->data[Traverse]->traverse, &context->data[Tree]->tree, &context->data[Node]->node, - &context->data[Traverse]->traverse.newNode); + context->data[Traverse]->traverse.newNode); } __code insertCase1(struct Context* context, struct Node* parent) { @@ -116,7 +117,7 @@ } __code insert1_stub(struct Context* context) { - goto insertCase1(context, (struct Node*)context->data[Traverse]->traverse.nodeStack->element); + goto insertCase1(context, (struct Node*)context->data[Traverse]->traverse.nodeStack->data); } __code insertCase2(struct Context* context, struct Node* parent) { @@ -127,10 +128,10 @@ } __code insert2_stub(struct Context* context) { - goto insertCase2(context, (struct Node*)context->data[Traverse]->traverse.nodeStack->element); + goto insertCase2(context, (struct Node*)context->data[Traverse]->traverse.nodeStack->data); } -__code insertCase3(struct Context* context, struct Traverse* traverse, struct Node* pararent, struct Node* grandparent) { +__code insertCase3(struct Context* context, struct Traverse* traverse, struct Node* parent, struct Node* grandparent) { struct Node* uncle; if (grandparent->left == parent) @@ -144,15 +145,15 @@ uncle->color = Black; grandparent->color = Red; traverse->current = grandparent; - goto meta(context, insertCase31); + goto meta(context, InsertCase31); } goto meta(context, InsertCase4); } __code insert3_stub(struct Context* context) { goto insertCase3(context, &context->data[Traverse]->traverse, - (struct Node*)context->data[Traverse]->traverse.nodeStack->element, - (struct Node*)context->data[Traverse]->traverse.nodeStack->next->element + (struct Node*)context->data[Traverse]->traverse.nodeStack->data, + (struct Node*)context->data[Traverse]->traverse.nodeStack->next->data ); } __code insertCase31(struct Context* context, struct Traverse* traverse) { @@ -179,7 +180,9 @@ } __code insert4_stub(struct Context* context) { - goto insertCase4(context, &context->data[Traverse]->traverse, context->data[Traverse]->traverse.current); + goto insertCase4(context, &context->data[Traverse]->traverse, context->data[Traverse]->traverse.current, + &context->data[Traverse]->traverse.nodeStack->data->node, + &context->data[Traverse]->traverse.nodeStack->next->data->node); } __code insertCase4_01(struct Context* context, struct Traverse* traverse) { @@ -199,8 +202,9 @@ struct Allocate* allocate = &context->data[Allocate]->allocate; allocate->size = sizeof(struct Element); allocator(context); - struct Element* element = &context->data[context->dataNum]->node; - element->data = (struct Data*)traverse->current; + struct Element* element = &context->data[context->dataNum]->element; + struct Traverse* traverse = &context->data[Traverse]->traverse; + element->data = (union Data*)traverse->current; goto insertCase4_1(context, &context->data[Traverse]->traverse); } __code insertCase4_02(struct Context* context, struct Traverse* traverse) { @@ -221,12 +225,13 @@ struct Allocate* allocate = &context->data[Allocate]->allocate; allocate->size = sizeof(struct Element); allocator(context); - struct Element* element = &context->data[context->dataNum]->node; - element->data = (struct Data*)traverse->current; + struct Element* element = &context->data[context->dataNum]->element; + struct Traverse* traverse = &context->data[Traverse]->traverse; + element->data = (union Data*)traverse->current; goto insertCase4_2(context, &context->data[Traverse]->traverse); } -__code insertCase5(struct Context* context, struct Traverse* traverse, struct Node* current, struct Node* parent, struct Node* grandparant) { +__code insertCase5(struct Context* context, struct Traverse* traverse, struct Node* current, struct Node* parent, struct Node* grandparent) { parent->color = Black; grandparent->color = Red; @@ -239,15 +244,15 @@ } __code insert5_stub(struct Context* context) { - struct Traverse* traverse = context->data[Traverse]->traverse; + struct Traverse* traverse = &context->data[Traverse]->traverse; struct Node* parent = (struct Node*)traverse->nodeStack->data; struct Node* grandparent = (struct Node*)traverse->nodeStack->next->data; traverse->nodeStack = traverse->nodeStack->next->next; - goto insertCase5(context, &context->data[Traverse]->traverse, context->data[Traverse]->traverse.current); + goto insertCase5(context, &context->data[Traverse]->traverse, context->data[Traverse]->traverse.current, parent, grandparent); } // put rotateLeft's continuation as argument -__code rotateLeft(struct Context* context, struct Node* node, struct Tree* tree, struct Traverse* traverse, struct Node* parent) { +__code rotateLeft(struct Context* context, struct Node* node, struct Tree* tree, struct Traverse* traverse, struct Node* parent, struct Element* element) { struct Node* tmp = node->right; if (parent) { @@ -258,7 +263,7 @@ } else { tree->root = tmp; } - element->data = (struct Data*)parent; + element->data = (union Data*)parent; node->right = tmp->left; tmp->left = node; @@ -268,20 +273,22 @@ } __code rotateLeft_stub(struct Context* context) { - struct Traverse* traverse = context->data[Traverse]->traverse; + struct Traverse* traverse = &context->data[Traverse]->traverse; struct Node* parent = (traverse->nodeStack)?(struct Node*)traverse->nodeStack->data:NULL; traverse->nodeStack = traverse->nodeStack->next; struct Allocate* allocate = &context->data[Allocate]->allocate; allocate->size = sizeof(struct Element); allocator(context); - struct Element* element = &context->data[context->dataNum]->node; + struct Element* element = &context->data[context->dataNum]->element; goto rotateLeft(context, - context->data[Traverse]->traverse.current, + &context->data[Node]->node, &context->data[Tree]->tree, - &context->data[Traverse]->traverse); + &context->data[Traverse]->traverse, + parent, + element); } -__code rotateRight(struct Context* context, struct Node* node, struct Tree* tree, struct Traverse* traverse, struct Node* parent, struct Node* element) { +__code rotateRight(struct Context* context, struct Node* node, struct Tree* tree, struct Traverse* traverse, struct Node* parent, struct Element* element) { struct Node* tmp = node->left; if (parent) { @@ -293,7 +300,7 @@ tree->root = tmp; } - element->data = (struct Data*)parent; + element->data = (union Data*)parent; node->left = tmp->right; tmp->right = node; @@ -306,11 +313,13 @@ struct Allocate* allocate = &context->data[Allocate]->allocate; allocate->size = sizeof(struct Element); allocator(context); - struct Element* element = &context->data[context->dataNum]->node; + struct Element* element = &context->data[context->dataNum]->element; goto rotateRight(context, + &context->data[Node]->node, + &context->data[Tree]->tree, + &context->data[Traverse]->traverse, context->data[Traverse]->traverse.current, - &context->data[Tree]->tree, - &context->data[Traverse]->traverse); + element); } __code stackClear(struct Context* context, stack_ptr node_stack, struct Traverse* traverse) {