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;