Mercurial > hg > Gears > GearsAgda
diff src/parallel_execution/rb_tree.c @ 132:7c309e1aea73
Code Gears stack api
author | one |
---|---|
date | Thu, 27 Oct 2016 18:54:11 +0900 |
parents | a4507906938c |
children | 568730b1239e |
line wrap: on
line diff
--- a/src/parallel_execution/rb_tree.c Tue Oct 25 00:49:28 2016 +0900 +++ b/src/parallel_execution/rb_tree.c Thu Oct 27 18:54:11 2016 +0900 @@ -7,14 +7,14 @@ extern enum Relational compare(struct Node* node1, struct Node* node2); void printTree1(union Data* data) { - struct Node* node = (struct Node*)data; + struct Node* node = &data->node; if (node == NULL) { printf("NULL"); } else { printf("key = %d (", node->key); - printTree1((union Data*)node->right); + printTree1(GET_DATA(node->right)); printf("), ("); - printTree1((union Data*)node->left); + printTree1(GET_DATA(node->left)); printf(")"); } } @@ -25,19 +25,15 @@ } __code put(struct Context* context, struct Stack* nodeStack, struct Tree* tree, struct Node* node, struct Traverse* traverse, struct Node* root, struct Node* newNode) { - printTree((union Data*)tree->root); + printTree(GET_DATA(tree->root)); traverse->newNode = newNode; tree->root = newNode; // this should done at stackClear if (root) { traverse->current = root; - // traverse->result=compare(...) - // traverse->result = traverse->compare(traverse->current, node); traverse->result = compare(traverse->current, node); - nodeStack->stack = traverse->nodeStack; - nodeStack->data = (union Data*)newNode; + nodeStack->data = GET_DATA(newNode); nodeStack->next = Replace1; goto meta(context, nodeStack->push); - // goto traverse->nodeStack->push(newNode, replaceNode1, traverse, node); } goto meta(context, Insert); @@ -47,9 +43,8 @@ struct Allocate* allocate = &context->data[Allocate]->allocate; allocate->size = sizeof(struct Node); allocator(context); - goto put(context, - &context->data[Stack]->stack, + context->data[Traverse]->traverse.nodeStack, &context->data[Tree]->tree, &context->data[Node]->node, &context->data[Traverse]->traverse, @@ -58,25 +53,19 @@ ); } -__code replaceNode(struct Context* context, struct Traverse* traverse, struct Node* oldNode, struct Node* newNode, struct Element* element) { +__code replaceNode(struct Context* context, struct Traverse* traverse, struct Node* oldNode, struct Node* newNode, struct Stack* nodeStack) { *newNode = *oldNode; - 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); + nodeStack->data = GET_DATA(newNode); + nodeStack->next = Replace1; + goto meta(context, nodeStack->push); } __code replaceNode_stub(struct Context* context) { - struct Allocate* allocate = &context->data[Allocate]->allocate; - allocate->size = sizeof(struct Element); - allocator(context); - struct Element* element = &context->data[context->dataNum]->element; goto replaceNode(context, &context->data[Traverse]->traverse, context->data[Traverse]->traverse.current, context->data[Traverse]->traverse.newNode, - element); + context->data[Traverse]->traverse.nodeStack); } __code replaceNode1(struct Context* context, struct Traverse* traverse, struct Node* node, struct Node* oldNode, struct Node* newNode, struct Node* newnewNode, int result) { @@ -93,7 +82,6 @@ } traverse->newNode = newnewNode; if (traverse->current) { - // compare(context, traverse, traverse->current->key, node->key); traverse->result = compare(traverse->current, node); goto meta(context, Replace); } @@ -103,10 +91,7 @@ } __code replaceNode1_stub(struct Context* context) { - struct Allocate* allocate = &context->data[Allocate]->allocate; - allocate->size = sizeof(struct Node); - allocator(context); - struct Node* newnewNode = &context->data[context->dataNum]->node; + struct Node* newnewNode = &ALLOCATE(context, Node)->node; goto replaceNode1(context, &context->data[Traverse]->traverse, &context->data[Node]->node, @@ -130,8 +115,8 @@ context->data[Traverse]->traverse.newNode); } -__code insertCase1(struct Context* context, struct Tree* tree,struct Element* nodeStack) { - if (nodeStack!=NULL) { +__code insertCase1(struct Context* context, struct Tree* tree, struct Stack* nodeStack) { + if (nodeStack != NULL) { goto meta(context, InsertCase2); } tree->root->color = Black;