changeset 1045:c39b60946452

...
author matac42 <matac@cr.ie.u-ryukyu.ac.jp>
date Mon, 18 Dec 2023 22:30:58 +0900
parents de1a04a1a9c6
children b78e92bb5007
files src/parallel_execution/RedBlackTree.cbc
diffstat 1 files changed, 13 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/src/parallel_execution/RedBlackTree.cbc	Mon Dec 11 18:27:32 2023 +0900
+++ b/src/parallel_execution/RedBlackTree.cbc	Mon Dec 18 22:30:58 2023 +0900
@@ -102,7 +102,9 @@
 __code leftDown(struct RedBlackTree* tree, struct Stack* inputStack, struct Stack* outputStack) {
     struct Node* newNode = &ALLOCATE(context, Node)->Node;
     newNode->key = tree->current->key;
-    newNode->value = tree->current->value;
+    // newNode->value = tree->current->value;
+    newNode->value = (union Data*)new Integer();
+    ((Integer*)newNode->value)->value = ((Integer*)tree->current->value)->value;
     newNode->color = tree->current->color;
     newNode->right = tree->current->right;
     struct Stack* nodeStack = tree->nodeStack;
@@ -125,7 +127,8 @@
 __code rightDown(struct RedBlackTree* tree, struct Stack* inputStack, struct Stack* outputStack) {
     struct Node* newNode = &ALLOCATE(context, Node)->Node;
     newNode->key = tree->current->key;
-    newNode->value = tree->current->value;
+    newNode->value = (union Data*)new Integer();
+    ((Integer*)newNode->value)->value = ((Integer*)tree->current->value)->value;
     newNode->color = tree->current->color;
     newNode->right = tree->current->right;
     tree->current = tree->current->right;
@@ -149,6 +152,7 @@
     }
 }
 
+// upするときにstackの情報を元にcurrentを付け替えないといけないのでは?
 __code up1(struct Node* node, struct RedBlackTree* tree, struct Stack* inputStack, struct Stack* outputStack) {
     struct Stack* nodeStack = tree->nodeStack;
     printf("up1\n");
@@ -162,6 +166,13 @@
 }
 
 __code popWhenEmpty(struct Node* node, struct RedBlackTree* tree, struct Stack* inputStack, struct Stack* outputStack, __code next(...)) {
+    // treeの入れ替え
+    struct Tree* newTree = new Tree();
+    struct RedBlackTree* newRedBlackTree = new RedBlackTree();
+    newTree->tree = (union Data*)newRedBlackTree;
+    newRedBlackTree->root = tree->newNode;
+    newRedBlackTree->current = tree->newNode;
+    tree = newRedBlackTree;
     printf("popWhenEmpty\n");
     goto next(...);
 }