Mercurial > hg > Gears > Gears
changeset 1047:e4b5151e2bb5
...
author | matac42 <matac@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Mon, 22 Jan 2024 23:25:28 +0900 |
parents | b78e92bb5007 |
children | 1a1b50736246 |
files | src/parallel_execution/RedBlackTree.cbc src/parallel_execution/plautogen/impl/RedBlackTree.h src/parallel_execution/test/rbTreeCopy_test.cbc |
diffstat | 3 files changed, 43 insertions(+), 14 deletions(-) [+] |
line wrap: on
line diff
--- a/src/parallel_execution/RedBlackTree.cbc Tue Jan 16 18:46:41 2024 +0900 +++ b/src/parallel_execution/RedBlackTree.cbc Mon Jan 22 23:25:28 2024 +0900 @@ -9,14 +9,17 @@ Tree* createRedBlackTree(struct Context* context) { struct Tree* tree = new Tree(); struct RedBlackTree* redBlackTree = new RedBlackTree(); + tree->tree = (union Data*)redBlackTree; - redBlackTree->root = NULL; - redBlackTree->nodeStack = createSingleLinkedStack(context); tree->put = C_putRedBlackTree; tree->get = C_getRedBlackTree; tree->remove = C_removeRedBlackTree; // tree->clear = C_clearRedBlackTree; tree->copy = C_copyRedBlackTree; + + redBlackTree->root = NULL; + redBlackTree->nodeStack = createSingleLinkedStack(context); + redBlackTree->inputStack = createSingleLinkedStack(context); return tree; } @@ -99,7 +102,7 @@ goto nodeStack->push((union Data*)newNode, leftDown); } -__code leftDown(struct RedBlackTree* tree, struct Stack* inputStack, struct Stack* outputStack) { +__code leftDown(struct RedBlackTree* tree, struct Stack* outputStack) { struct Node* newNode = &ALLOCATE(context, Node)->Node; newNode->key = tree->current->key; // newNode->value = tree->current->value; @@ -107,20 +110,24 @@ ((Integer*)newNode->value)->value = ((Integer*)tree->current->value)->value; newNode->color = tree->current->color; newNode->right = tree->current->right; - struct Stack* nodeStack = tree->nodeStack; + struct Stack* inputStack = tree->inputStack; printf("leftDown\n"); - goto nodeStack->push(newNode, leftDown1); + + // 新規ノードをpushしている + goto inputStack->push(newNode, leftDown1); } -__code leftDown1(struct RedBlackTree* tree, struct Stack* inputStack, struct Stack* outputStack) { - struct Stack* nodeStack = tree->nodeStack; +__code leftDown1(struct RedBlackTree* tree, struct Stack* outputStack) { + struct Stack* inputStack = tree->inputStack; printf("leftDown1\n"); if (tree->current->left) { + // ここではnodeStackを積みたいが...... + // leftDown2を作るか goto leftDown(tree->current->left, inputStack, outputStack); } else if (tree->current->right) { goto rightDown(tree->current->right, inputStack, outputStack); } else { - goto nodeStack->pop(up); + goto inputStack->pop(up); } } @@ -137,10 +144,12 @@ goto nodeStack->push(newNode, leftDown); } -__code up(struct Node* node, struct RedBlackTree* tree, struct Stack* inputStack, struct Stack* outputStack) { +__code up(struct RedBlackTree* tree, struct Stack* inputStack, struct Stack* outputStack) { struct Stack* nodeStack = tree->nodeStack; struct Node* newNode = tree->newNode; + struct Node* node = &(inputStack->data)->Node; printf("up\n"); + // popでNULLだった場合どうなる? if (node->left) { tree->current = node->right; node->left = newNode; @@ -167,9 +176,10 @@ __code popWhenEmpty(struct Node* node, struct RedBlackTree* tree, struct Stack* inputStack, struct Stack* outputStack, __code next(...)) { // treeの入れ替え - struct Tree* newTree = new Tree(); + // struct Tree* newTree = new Tree(); struct RedBlackTree* newRedBlackTree = new RedBlackTree(); - newTree->tree = (union Data*)newRedBlackTree; + // newTree->tree = (union Data*)newRedBlackTree; + // ここtreeじゃなくてinputStackからpopしたNodeを入れてあげないといけない。 newRedBlackTree->root = tree->newNode; newRedBlackTree->current = tree->newNode; tree = newRedBlackTree;
--- a/src/parallel_execution/plautogen/impl/RedBlackTree.h Tue Jan 16 18:46:41 2024 +0900 +++ b/src/parallel_execution/plautogen/impl/RedBlackTree.h Mon Jan 22 23:25:28 2024 +0900 @@ -6,6 +6,8 @@ struct Node* parent; struct Node* grandparent; struct Stack* nodeStack; + struct Stack* inputStack; + struct Stack* outputStack; __code findNodeNext(...); int result; } RedBlackTree;
--- a/src/parallel_execution/test/rbTreeCopy_test.cbc Tue Jan 16 18:46:41 2024 +0900 +++ b/src/parallel_execution/test/rbTreeCopy_test.cbc Mon Jan 22 23:25:28 2024 +0900 @@ -21,15 +21,32 @@ } __code rbTreeTest2(struct Tree* tree) { - printf("test2\n"); + printf("Test2\n"); + Node* node = new Node(); + node->value = (union Data*)new Integer(); + ((Integer*)node->value)->value = 2; + node->key = 2; + printf("value->%d,key->%d\n",((Integer*)node->value)->value,node->key); + goto tree->put(node, rbTreeTest3); +} + +__code rbTreeTest2_stub(struct Context* context) { + printf("test2_stub\n"); + Tree* tree = createRedBlackTree(context); + goto rbTreeTest2(context,tree); +} + +__code rbTreeTest3(struct Tree* tree) { + printf("test3\n"); Node* node = new Node(); node->value = (union Data*)new Integer(); goto tree->copy(node, exit_code); } -__code rbTreeTest2_stub(struct Context* context) { +__code rbTreeTest3_stub(struct Context* context) { + printf("test3_stub\n"); Tree* tree = (struct Tree*)Gearef(context, Tree)->tree; - goto rbTreeTest2(context,tree); + goto rbTreeTest3(context,tree); } int main(int argc, char const* argv[]) {