Mercurial > hg > GearsTemplate
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 } |