Mercurial > hg > Gears > Gears
changeset 1054:7274db9ef926
...
author | matac42 <matac@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Thu, 25 Jan 2024 22:58:56 +0900 |
parents | e53cbb2fa8b0 |
children | 81439e83c4d2 |
files | src/parallel_execution/RedBlackTree.cbc |
diffstat | 1 files changed, 19 insertions(+), 9 deletions(-) [+] |
line wrap: on
line diff
--- a/src/parallel_execution/RedBlackTree.cbc Thu Jan 25 19:21:01 2024 +0900 +++ b/src/parallel_execution/RedBlackTree.cbc Thu Jan 25 22:58:56 2024 +0900 @@ -94,6 +94,7 @@ __code copyRedBlackTree(struct RedBlackTree* tree) { tree->current = tree->root; + // 最初にrootノードをコピーしておきたい goto leftDown(tree); } @@ -140,12 +141,14 @@ } __code leftDown3(struct RedBlackTree* tree) { - struct Stack* inputStack = tree->inputStack; + struct Stack* nodeStack = tree->nodeStack; printf("leftDown3\n"); if (tree->current) { - goto leftDown(tree, inputStack); + goto leftDown(tree); } else if (tree->current == NULL) { - goto inputStack->pop(up); + // ここでinputStackをpopする必要はない + // currentの付け替えをして + goto nodeStack->pop(leftDown4); } else if (tree->current->left) { // 謎の処理 printf("nazo\n"); @@ -153,6 +156,14 @@ } } +__code leftDown4(struct RedBlackTree* tree, struct Stack* stack) { + struct Node* data = (Node*)(stack->data); + tree->current = data; + printf("leftDown4\n"); + + goto up(); +} + __code rightDown(struct RedBlackTree* tree) { struct Stack* inputStack = tree->inputStack; @@ -166,10 +177,10 @@ struct Stack* inputStack = tree->inputStack; struct Node* newNode = &ALLOCATE(context, Node)->Node; struct Node* data = (Node*)(stack->data); - newNode->key = tree->current->key; + newNode->key = tree->current->right->key; newNode->value = (union Data*)new Integer(); - ((Integer*)newNode->value)->value = ((Integer*)tree->current->value)->value; - newNode->color = tree->current->color; + ((Integer*)newNode->value)->value = ((Integer*)tree->current->right->value)->value; + newNode->color = tree->current->right->color; if(data) { data->right = newNode; @@ -221,7 +232,7 @@ } __code up1(struct RedBlackTree* tree, struct Stack* stack) { - struct Stack* nodeStack = tree->nodeStack; + struct Stack* inputStack = tree->inputStack; struct Node* data = (Node*)(stack->data); tree->current = data; @@ -234,7 +245,7 @@ printf("up1\n"); // rightの状態を見る前にpopしてしまっている気がする - goto nodeStack->pop(up2); + goto inputStack->pop(up2); } // rightを見てさらにupするか考える @@ -242,7 +253,6 @@ struct Stack* inputStack = tree->inputStack; printf("up2\n"); if (tree->current->right) { - tree->current = tree->current->right; goto rightDown(tree); }