changeset 134:36ac17d37be4

Fix compile error but not work
author one
date Thu, 29 Sep 2016 16:58:23 +0900
parents 933c80f48d06
children 9ae7ce6c83f5
files src/parallel_execution/context.c src/parallel_execution/context.h src/parallel_execution/rb_tree.c
diffstat 3 files changed, 61 insertions(+), 38 deletions(-) [+]
line wrap: on
line diff
--- 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;
--- 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 {
--- 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) {