Mercurial > hg > Gears > GearsAgda
diff src/parallel_execution/rb_tree.c @ 124:36ac17d37be4
Fix compile error but not work
author | one |
---|---|
date | Thu, 29 Sep 2016 16:58:23 +0900 |
parents | 933c80f48d06 |
children | 9ae7ce6c83f5 |
line wrap: on
line diff
--- 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) {