changeset 1003:088e533b5393

add: ls
author matac42 <matac@cr.ie.u-ryukyu.ac.jp>
date Thu, 06 Jan 2022 21:33:58 +0900
parents dad078c90f29
children 7adec76a1adf 111e313e883e
files src/parallel_execution/examples/gearsDirectory/GearsDirectory.h src/parallel_execution/examples/gearsDirectory/GearsDirectoryImpl.cbc src/parallel_execution/examples/gearsDirectory/GearsDirectory_test.cbc
diffstat 3 files changed, 30 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/src/parallel_execution/examples/gearsDirectory/GearsDirectory.h	Tue Dec 28 18:33:48 2021 +0900
+++ b/src/parallel_execution/examples/gearsDirectory/GearsDirectory.h	Thu Jan 06 21:33:58 2022 +0900
@@ -2,6 +2,7 @@
   union Data* gearsDirectory;
   struct Integer* name;
   __code mkdir(Impl* gearsDirectory, struct Integer* name, __code next(...));
+  __code ls(Impl* gearsDirectory, struct Integer* name, __code next(...));
   __code cd2Child(Impl* gearsDirectory, struct Integer* name, __code next(...));
   __code cd2Parent(Impl* gearsDirectory, __code next(...));
   __code next(...);
--- a/src/parallel_execution/examples/gearsDirectory/GearsDirectoryImpl.cbc	Tue Dec 28 18:33:48 2021 +0900
+++ b/src/parallel_execution/examples/gearsDirectory/GearsDirectoryImpl.cbc	Thu Jan 06 21:33:58 2022 +0900
@@ -24,6 +24,7 @@
     gears_directory_impl->directoryStack = createSingleLinkedStack(context);
     gears_directory_impl->INodeNumber = 0;
     gearsDirectory->mkdir = C_mkdirGearsDirectoryImpl;
+    gearsDirectory->ls = C_lsGearsDirectoryImpl;
     gearsDirectory->cd2Child = C_cd2ChildGearsDirectoryImpl;
     gearsDirectory->cd2Parent = C_cd2ParentGearsDirectoryImpl;
     return gearsDirectory;
@@ -34,6 +35,7 @@
     Node* inode = new Node();
     // FIXME:inode numberのselectをしないといけない
     inode->key = gearsDirectory->INodeNumber;
+    // FIXME:確保したinode領域にnewDirectoryを置かないといけない
     inode->value = newDirectory;
     struct FTree* cDirectory = new FTree();
     cDirectory = gearsDirectory->iNodeTree;
@@ -42,13 +44,26 @@
 
 __code mkdir2(struct GearsDirectoryImpl* gearsDirectory, struct Integer* name, __code next(...)) {
     Node* dir = new Node();
-    dir->key = gearsDirectory->INodeNumber;
-    dir->value = name->value;
+    dir->key = name->value;
+    dir->value = gearsDirectory->INodeNumber;
     struct FTree* cDirectory = new FTree();
     cDirectory = gearsDirectory->currentDirectory;
     goto cDirectory->put(dir, next(...));
 }
 
+__code ls(struct GearsDirectoryImpl* gearsDirectory, struct Integer* name, __code next(...)) {
+    Node* dir = new Node();
+    dir->key = name->value;
+    struct FTree* cDirectory = new FTree();
+    cDirectory = gearsDirectory->currentDirectory;
+    goto cDirectory->get(dir, ls2);
+}
+
+__code ls2(struct GearsDirectoryImpl* gearsDirectory, struct Integer* name, __code next(...)) {
+    printf("%d\n", gearsDirectory->currentDirectory->fTree->Node.value->Node.key);
+    goto next(...);
+}
+
 __code cd2Child(struct GearsDirectoryImpl* gearsDirectory, struct Integer* name, __code next(...)) {
     // 現在のtreeからnode->keyがnameと一致するものをsearch
     struct FTree* cDirectory = new FTree();
--- a/src/parallel_execution/examples/gearsDirectory/GearsDirectory_test.cbc	Tue Dec 28 18:33:48 2021 +0900
+++ b/src/parallel_execution/examples/gearsDirectory/GearsDirectory_test.cbc	Thu Jan 06 21:33:58 2022 +0900
@@ -6,7 +6,7 @@
 __code task1(GearsDirectory* gearsDirectory){     
     Integer* name = new Integer();
     name->value = 1;
-    goto gearsDirectory->mkdir(name, exit_code);
+    goto gearsDirectory->mkdir(name, task5);
 }
 
 __code task1_stub(struct Context* context){
@@ -34,6 +34,17 @@
     goto task3(context, gearsDirectory);
 }
 
+__code task5(GearsDirectory* gearsDirectory){
+    Integer* name = new Integer();
+    name->value = 1;
+    goto gearsDirectory->ls(name, exit_code);
+}
+
+__code task5_stub(struct Context* context){
+    GearsDirectory* gearsDirectory = (struct GearsDirectory*)Gearef(context, GearsDirectory)->gearsDirectory;
+    goto task5(context, gearsDirectory);
+}
+
 int main(int argc, char** argv) {
     printf("main\n");
     goto task1();