Mercurial > hg > Gears > Gears
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(...); }