Mercurial > hg > Gears > Gears
changeset 1035:b331fcbdaec8
...
author | matac42 <matac@cr.ie.u-ryukyu.ac.jp> |
---|---|
date | Thu, 02 Nov 2023 16:28:25 +0900 |
parents | 4761d569dcf5 |
children | 9b95501b272b |
files | src/parallel_execution/RedBlackTree.cbc |
diffstat | 1 files changed, 43 insertions(+), 0 deletions(-) [+] |
line wrap: on
line diff
--- a/src/parallel_execution/RedBlackTree.cbc Fri Oct 27 12:03:20 2023 +0900 +++ b/src/parallel_execution/RedBlackTree.cbc Thu Nov 02 16:28:25 2023 +0900 @@ -16,6 +16,7 @@ tree->get = C_getRedBlackTree; tree->remove = C_removeRedBlackTree; // tree->clear = C_clearRedBlackTree; + tree->copy = C_copyRedBlackTree; return tree; } @@ -88,6 +89,48 @@ } +__code copyTree(struct RedBlackTree* tree) { + struct Stack* nodeStack = tree->nodeStack; + struct Node* oldNode = tree->current; + struct Node* newNode = tree->newNode; + tree->previous = newNode; + *newNode = *oldNode; + goto nodeStack->push((union Data*)newNode, copyTree1); +} + +__code copyTree1(struct RedBlackTree* tree, struct Node* node, __code next(...)) { + struct Node* oldNode = tree->current; + struct Node* newNode = tree->previous; + struct Node* newnewNode = &ALLOCATE(context, Node)->Node; + newnewNode->key = oldNode->key; + newnewNode->value = oldNode->value; + newnewNode->left = newNode->left; + if (newnewNode->left != Null) { + goto copyTree(newnewNode->left); + } + newnewNode->right = newNode->right; + if (newnewNode->right != Null) { + goto copyTree(newnewNode->right); + } + goto copyTreePop(tree); + tree->newNode = newnewNode; + + if (tree->current) { + tree->result = compare(tree->current, node); + goto findNode(tree); + } + goto meta(context, tree->findNodeNext); + // gato tree->findNodeNext(tree, node); + +} + +__code copyTreePop(struct RedBlackTree* tree, struct Node* node, __code next(...)) { + struct Stack* nodeStack = tree->nodeStack; + if (->right != Null) { + goto nodeStack->pop(rotateLeft); + } +} + __code insertNode(struct RedBlackTree* tree, struct Node* node) { struct Stack* nodeStack = tree->nodeStack; struct Node* newNode = tree->newNode;