diff src/parallel_execution/dependency.c @ 119:4df53a60e59a

Add dependency function
author Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
date Tue, 19 Jul 2016 18:39:22 +0900
parents c9ab10847fc3
children bb8be1820302
line wrap: on
line diff
--- a/src/parallel_execution/dependency.c	Tue Jul 19 02:18:31 2016 +0900
+++ b/src/parallel_execution/dependency.c	Tue Jul 19 18:39:22 2016 +0900
@@ -7,29 +7,18 @@
     goto (context->code[next])(context);
 }
 
-__code waitFor1(struct Context* context, struct Task* master, struct Task* slave, struct Element* element, struct Node* node) {
+__code waitFor1(struct Context* context, struct Task* master, struct Task* slave, struct Element* element, union Data* data) {
+    struct Integer integer = (struct Integer *)data;
+    struct Queue waitMeTasks = (struct Queue *)(integer + integer-> mDataOffset);
     element->data = (union Data *)slave;
     // enqueue waitMe
-    //goto meta_waitFor(context, master->waitMe, PutQueue1);
+    goto meta_waitFor(context, waitMeTasks, PutQueue1);
 }
 
 __code waitFor1_stub(struct Context* context) {
-    // next think
+    // think
 }
 
-/**
-__code waitFor2(struct Context* context, struct Task* master, struct Task* slave, struct Element* element) {
-    element->task = master;
-    task->next = context->next;
-    // enqueue waitI
-    goto meta_waitFor(context, task->waitI, PutQueue1);
-}
-
-__code waitFor2_stub(struct Context* context) {
-    // next think
-}
-*/
-
 __code meta_spawnTask(struct Context* context, struct Queue* queue, enum Code next) {
     context->data[Queue] = (union Data *)queue;
     goto (context->code[next])(context);
@@ -55,6 +44,32 @@
             &context->data[WaitQueue]->queue);
 }
 
+__code meta_check_task_finish1(struct Context* context, struct Queue* queue, enum Code next) {
+    context->data[Queue] = (union Data *)queue;
+    goto (context->code[next])(context);
+}
+
+__code check_task_finish1(struct Context* context, struct Data* data) {
+    struct Integer integer = (struct Integer *)data;
+    struct Queue waitMeTasks = (struct Queue *)(integer + integer->mDataOffset);
+    context->next = check_task_finish2;
+    goto meta_check_task_finish1(context, waitMeTasks, CheckTaskFinish2);
+}
+
+__code check_task_finish1_stub(struct Context* context) {
+}
+
+/*
+ * ready input data Gear for waitme task
+ */
+__code check_task_finish2(struct Context* context) {
+    struct Task task = ((struct Task) element -> data);
+    task->idsCount--;
+}
+
+__code check_task_finish2_stub(struct Context* context) {
+}
+
 __code add(struct Context* context, struct Integer* input1, struct Integer* input2, struct Integer* output) {
     output->value = input1->value + input2->value;
 }