changeset 1050:88ece4cac620

rm init push & unnecessary stack
author matac42 <matac@cr.ie.u-ryukyu.ac.jp>
date Thu, 25 Jan 2024 15:01:07 +0900
parents 24390402f72d
children 62e938b798ec
files src/parallel_execution/RedBlackTree.cbc
diffstat 1 files changed, 20 insertions(+), 22 deletions(-) [+]
line wrap: on
line diff
--- a/src/parallel_execution/RedBlackTree.cbc	Wed Jan 24 18:50:52 2024 +0900
+++ b/src/parallel_execution/RedBlackTree.cbc	Thu Jan 25 15:01:07 2024 +0900
@@ -94,30 +94,30 @@
 
 __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;
-    goto nodeStack->push((union Data*)newNode, leftDown);
+    goto leftDown(tree);
 }
 
-__code leftDown(struct RedBlackTree* tree, struct Stack* outputStack) {
+//
+// leftDown*()
+// currentをinputStackにpushして、current->leftがあれば降りる
+//
+
+__code leftDown(struct RedBlackTree* tree) {
     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;
     struct Stack* inputStack = tree->inputStack;
+
     printf("leftDown\n");
-
+    
     // 新規ノードをpushしている
     goto inputStack->push(newNode, leftDown1);
 }
 
-__code leftDown1(struct RedBlackTree* tree, struct Stack* outputStack) {
+__code leftDown1(struct RedBlackTree* tree) {
     struct Stack* nodeStack = tree->nodeStack;
     struct Node* oldNode = tree->current;
     tree->current = tree->current->left;
@@ -126,21 +126,19 @@
     goto nodeStack->push((union Data*)oldNode, leftDown2);
 }
 
-__code leftDown2(struct RedBlackTree* tree, struct Stack* outputStack) {
+__code leftDown2(struct RedBlackTree* tree) {
     struct Stack* inputStack = tree->inputStack;
     printf("leftDown2\n");
     if (tree->current->left) {
-        // ここではnodeStackを積みたいが......
-        // leftDown2を作るか
-        goto leftDown(tree->current->left, inputStack, outputStack);
+        goto leftDown(tree->current->left, inputStack);
     } else if (tree->current->right) {
-        goto rightDown(tree->current->right, inputStack, outputStack);
+        goto rightDown(tree->current->right, inputStack);
     } else {
         goto inputStack->pop(up);
     }
 }
 
-__code rightDown(struct RedBlackTree* tree, struct Stack* inputStack, struct Stack* outputStack) {
+__code rightDown(struct RedBlackTree* tree, struct Stack* inputStack) {
     struct Node* newNode = &ALLOCATE(context, Node)->Node;
     newNode->key = tree->current->key;
     newNode->value = (union Data*)new Integer();
@@ -153,7 +151,7 @@
     goto nodeStack->push(newNode, leftDown);
 }
 
-__code up(struct RedBlackTree* tree, struct Stack* inputStack, struct Stack* outputStack) {
+__code up(struct RedBlackTree* tree, struct Stack* inputStack) {
     struct Stack* nodeStack = tree->nodeStack;
     struct Node* newNode = tree->newNode;
     // inputStack->data見てるのは間違い
@@ -172,19 +170,19 @@
 }
 
 // upするときにstackの情報を元にcurrentを付け替えないといけないのでは?
-__code up1(struct Node* node, struct RedBlackTree* tree, struct Stack* inputStack, struct Stack* outputStack) {
+__code up1(struct Node* node, struct RedBlackTree* tree, struct Stack* inputStack) {
     struct Stack* nodeStack = tree->nodeStack;
     printf("up1\n");
     goto nodeStack->pop(up2);
 }
 
-__code up2(struct Node* node, struct RedBlackTree* tree, struct Stack* inputStack, struct Stack* outputStack) {
+__code up2(struct Node* node, struct RedBlackTree* tree, struct Stack* inputStack) {
     printf("up2\n");
     tree->current->right = node->right;
-    goto up(tree, inputStack, outputStack);
+    goto up(tree, inputStack);
 }
 
-__code popWhenEmpty(struct Node* node, struct RedBlackTree* tree, struct Stack* inputStack, struct Stack* outputStack, __code next(...)) {
+__code popWhenEmpty(struct Node* node, struct RedBlackTree* tree, struct Stack* inputStack, __code next(...)) {
     // treeの入れ替え
     // struct Tree* newTree = new Tree();
     struct RedBlackTree* newRedBlackTree = new RedBlackTree();
@@ -197,7 +195,7 @@
     goto next(...);
 }
 
-__code popWhenNoEmpty(struct Node* node, struct RedBlackTree* tree, struct Stack* inputStack, struct Stack* outputStack) {
+__code popWhenNoEmpty(struct Node* node, struct RedBlackTree* tree, struct Stack* inputStack) {
     struct Stack* nodeStack = tree->nodeStack;
     printf("popWhenNoEmpty\n");
     goto nodeStack->pop(up1);