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) {