comparison src/parallel_execution/examples/Add.cbc @ 344:b8be1d51f002

Add CodeGear interface
author Tatsuki IHA <e125716@ie.u-ryukyu.ac.jp>
date Fri, 26 May 2017 07:39:23 +0900
parents
children 2da00c034fbc
comparison
equal deleted inserted replaced
343:5065d1e4adbb 344:b8be1d51f002
1 #include "../../context.h"
2 CodeGear* createAddCodeGear(struct Context* context) {
3 struct CodeGear* codeGear = new CodeGear();
4 struct context* addContext = NEW(struct Context);
5 codeGear->codeGear = (union Data*)addContext;
6 initContext(addContext);
7 codeGear->code = C_add;
8 codeGear->setInfo = C_setAddCodeGearInfo;
9 return codeGear;
10 }
11
12 CodeGear* setAddCodeGearInfo(struct Context* codeGear, union Data** dataGears) {
13 codeGear->next = C_add;
14 codeGear->idgCount = 2;
15 codeGear->idg = codeGear->datanum;
16 codeGear->data[codeGear->idg] = dataGears[0];
17 codeGear->data[codeGear->idg+1] = dataGears[1];
18 codeGear->maxIdg = codeGear->idg + 2;
19 codeGear->odg = codeGear->maxIdg;
20 codeGear->data[codeGear->odg] = dataGears[2];
21 task->maxOdg = task->odg + 1;
22 goto meta(context, C_setWaitTask)
23 }
24
25 __code setWaitTask(struct Queue* queue, struct Context* task, Data* data, __code next(...)) {
26 queue->queue = (Data *)GET_WAIT_LIST(data);
27 queue->next = next;
28 queue->data = (Data *)task;
29 goto meta(context, queue->queue->Queue.put);
30 }
31
32 __code setWaitTask_stub(struct Context* context) {
33 goto setWaitTask(context, Gearef(context, Queue), Gearef(context, TaskManager)->context, Gearef(context, TaskManager)->data, Gearef(context, TaskManager)->next);
34 }