# HG changeset patch # User matac42 # Date 1702276793 -32400 # Node ID 1098071e12b8871c8375dd115dd69f6fa60c664c # Parent 751d26c368fbf221eab0ce9e1655c61d567121ea fix rbtree copy not expected goto diff -r 751d26c368fb -r 1098071e12b8 src/parallel_execution/RedBlackTree.cbc --- a/src/parallel_execution/RedBlackTree.cbc Mon Nov 13 19:59:35 2023 +0900 +++ b/src/parallel_execution/RedBlackTree.cbc Mon Dec 11 15:39:53 2023 +0900 @@ -90,11 +90,12 @@ } __code copyRedBlackTree(struct RedBlackTree* tree) { + tree->current = tree->root; struct Stack* nodeStack = tree->nodeStack; struct Node* oldNode = tree->current; struct Node* newNode = tree->newNode; tree->previous = newNode; - *newNode = *oldNode; + newNode = oldNode; goto nodeStack->push((union Data*)newNode, leftDown); } @@ -105,12 +106,14 @@ newNode->color = tree->current->color; newNode->right = tree->current->right; struct Stack* nodeStack = tree->nodeStack; + printf("leftDown"); goto nodeStack->push(newNode, leftDown1); } __code leftDown1(struct RedBlackTree* tree, struct Stack* inputStack, struct Stack* outputStack) { struct Stack* nodeStack = tree->nodeStack; - if (tree->current->left) { + printf("leftDown1"); + if (tree->current->left != NULL) { goto leftDown(tree->current->left, inputStack, outputStack); } else if (tree->current->right) { goto rightDown(tree->current->right, inputStack, outputStack); @@ -127,12 +130,14 @@ newNode->right = tree->current->right; tree->current = tree->current->right; struct Stack* nodeStack = tree->nodeStack; + printf("rightDown"); goto nodeStack->push(newNode, leftDown); } __code up(struct Node* node, struct RedBlackTree* tree, struct Stack* inputStack, struct Stack* outputStack) { struct Stack* nodeStack = tree->nodeStack; struct Node* newNode = tree->newNode; + printf("up"); if (node->left) { tree->current = node->right; node->left = newNode; @@ -145,18 +150,24 @@ } __code popWhenEmpty(struct Node* node, struct RedBlackTree* tree, struct Stack* inputStack, struct Stack* outputStack, __code next(...)) { + printf("popWhenEmpty"); goto next(...); } -__code popWhenNoEmpty(struct Node* node, struct RedBlackTree* tree, struct Stack* inputStack, struct Stack* outputStack, struct Stack* nodeStack) { +__code popWhenNoEmpty(struct Node* node, struct RedBlackTree* tree, struct Stack* inputStack, struct Stack* outputStack) { + struct Stack* nodeStack = tree->nodeStack; + printf("popWhenNoEmpty"); goto nodeStack->pop(up1); } -__code up1(struct Node* node, struct RedBlackTree* tree, struct Stack* inputStack, struct Stack* outputStack, struct Stack* nodeStack) { +__code up1(struct Node* node, struct RedBlackTree* tree, struct Stack* inputStack, struct Stack* outputStack) { + struct Stack* nodeStack = tree->nodeStack; + printf("up1"); goto nodeStack->pop(up2); } __code up2(struct Node* node, struct RedBlackTree* tree, struct Stack* inputStack, struct Stack* outputStack) { + printf("up2"); tree->current->right = node->right; goto up(tree, inputStack, outputStack); } diff -r 751d26c368fb -r 1098071e12b8 src/parallel_execution/test/rbTreeCopy_test.cbc --- a/src/parallel_execution/test/rbTreeCopy_test.cbc Mon Nov 13 19:59:35 2023 +0900 +++ b/src/parallel_execution/test/rbTreeCopy_test.cbc Mon Dec 11 15:39:53 2023 +0900 @@ -20,63 +20,16 @@ goto rbTreeTest1(context,tree); } - __code rbTreeTest2(struct Tree* tree) { - printf("Test2\n"); - Node* node = new Node(); - node->value = (union Data*)new Integer(); - // ((Integer*)(node->value))->value= 2; - node->key = 2; - goto tree->get(node, rbTreeTest3); -} - -__code rbTreeTest2_stub(struct Context* context) { - printf("test2_stub\n"); - Tree* tree = (struct Tree*)Gearef(context, Tree)->tree; - goto rbTreeTest2(context,tree); -} - - -__code rbTreeTest3(struct Tree* tree, struct Node* node0) { - printf("test3\n"); - printf("value=%d key=%d\n", ((Integer*)node0->value)->value, node0->key); - Node* node = new Node(); - node->value = (union Data*)new Integer(); - ((Integer*)(node->value))->value = 3; - node->key = 3; - goto tree->put(node, rbTreeTest4); -} - -__code rbTreeTest3_stub(struct Context* context) { - Tree* tree = (struct Tree*)Gearef(context, Tree)->tree; - Node* node0 = Gearef(context, Tree)->node; - goto rbTreeTest3(context,tree,node0); -} - -__code rbTreeTest4(struct Tree* tree) { - printf("test4\n"); - Node* node = new Node(); - node->value = (union Data*)new Integer(); - ((Integer*)(node->value))->value = 4; - node->key = 4; - goto tree->put(node, rbTreeTest5); -} - -__code rbTreeTest4_stub(struct Context* context) { - Tree* tree = (struct Tree*)Gearef(context, Tree)->tree; - goto rbTreeTest4(context,tree); -} - -__code rbTreeTest5(struct Tree* tree) { - printf("test5\n"); + printf("test2\n"); Node* node = new Node(); node->value = (union Data*)new Integer(); goto tree->copy(node, exit_code); } -__code rbTreeTest5_stub(struct Context* context) { +__code rbTreeTest2_stub(struct Context* context) { Tree* tree = (struct Tree*)Gearef(context, Tree)->tree; - goto rbTreeTest5(context,tree); + goto rbTreeTest2(context,tree); } int main(int argc, char const* argv[]) {