# HG changeset patch # User matac42 # Date 1702906258 -32400 # Node ID c39b60946452d8d124ca6db05a59fd6fd330099a # Parent de1a04a1a9c60ac51f6ebcd3786a57a6d0f81ea5 ... diff -r de1a04a1a9c6 -r c39b60946452 src/parallel_execution/RedBlackTree.cbc --- 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(...); }