Mercurial > hg > Gears > Gears
view src/parallel_execution/examples/gearsFile/GearsFileImpl.cbc @ 1032:793b21a8ea12
fix include
author | Shinji KONO <kono@ie.u-ryukyu.ac.jp> |
---|---|
date | Tue, 24 Oct 2023 12:25:40 +0900 |
parents | 0034a63e9c85 |
children |
line wrap: on
line source
#include <stdio.h> #interface "GearsFile.h" #interface "Queue.h" #interface "FileData.h" #impl "GearsFile" as "GearsFileImpl.h".h // ---- // typedef struct GearsFileImpl <> impl GearsFile { // __code next(...); // } GearsFileImpl; // ---- GearsFile* createGearsFileImpl(struct Context* context) { struct GearsFile* gearsFile = new GearsFile(); struct GearsFileImpl* gears_file_impl = new GearsFileImpl(); gearsFile->gearsFile = (union Data*)gears_file_impl; gears_file_impl->inputQueue = createSingleLinkedQueue(context); gears_file_impl->outputQueue = createSingleLinkedQueue(context); gears_file_impl->mainQueue = createSingleLinkedQueue(context); gearsFile->readData = C_readDataGearsFileImpl; gearsFile->writeData = C_writeDataGearsFileImpl; gearsFile->test = C_testGearsFileImpl; return gearsFile; } __code readData(struct GearsFileImpl* gearsFile, __code next(...)) { struct Queue* iQueue = gearsFile->inputQueue; goto iQueue->take(test); } __code writeData(struct GearsFileImpl* gearsFile, Data* data,__code next(...)) { printf("writeData\n"); struct Queue* queue = gearsFile->inputQueue; Gearef(context, GearsFile)->fileData = data; //手入力 goto putInputQueue(fileData, next); } __code putInputQueue(struct GearsFileImpl* gearsFile, FileData* fileData, __code next(...)){ printf("putInputQueue\n", fileData->string); struct Queue* iQueue = gearsFile->inputQueue; goto iQueue->put(fileData, takeInputQueue); } __code takeInputQueue(struct GearsFileImpl* gearsFile, __code next(...)){ printf("takeInputQueue\n"); struct Queue* iQueue = gearsFile->inputQueue; goto iQueue->take(putMainQueue); } __code putMainQueue(struct GearsFileImpl* gearsFile, FileData* fileData, __code next(...)){ printf("putMainQueue\n", fileData->string); struct Queue* mainQueue = gearsFile->mainQueue; goto mainQueue->put(fileData, takeMainQueue); } __code putMainQueue_stub(Context* context){ GearsFileImpl* gearsFile = (GearsFileImpl*)GearImpl(context, GearsFile, gearsFile); FileData* fileData = Gearef(context, Queue)->data; enum Code next = Gearef(context, GearsFile)->next; goto putMainQueueGearsFileImpl(context, gearsFile, fileData, next); } __code takeMainQueue(struct GearsFileImpl* gearsFile, __code next(...)){ printf("takeMainQueue\n"); struct Queue* mainQueue = gearsFile->mainQueue; goto mainQueue->take(test); } __code test(struct GearsFileImpl* gearsFile, FileData* fileData, __code next(...)) { if (fileData == NULL){ printf("End of File\n"); goto exit_code(); } else { printf("%s\n", fileData->string); goto next(...); } } __code testGearsFileImpl_stub(struct Context* context){ GearsFileImpl* gearsFile = (GearsFileImpl*)GearImpl(context, GearsFile, gearsFile); FileData* fileData = Gearef(context, Queue)->data; enum Code next = Gearef(context, GearsFile)->next; goto testGearsFileImpl(context, gearsFile, fileData, next); }