Initial commit.
This commit is contained in:
@@ -0,0 +1,264 @@
|
||||
#include "elimination.h"
|
||||
|
||||
#include <algorithm>
|
||||
#include <iostream>
|
||||
#include <thread>
|
||||
#include <chrono>
|
||||
#include <boost/program_options.hpp>
|
||||
|
||||
|
||||
|
||||
WFR_INPUT_HOOK(toplevelInputFunc) {
|
||||
WFR_INPUT_HOOK_PROLOG;
|
||||
WFR_SELF_INBUFFER_INIT(sin, toplevel_in);
|
||||
WFR_INPUT_HOOK_EPILOG;
|
||||
}
|
||||
|
||||
|
||||
WFR_OUTPUT_HOOK(toplevelOutputFunc) {
|
||||
WFR_OUTPUT_HOOK_PROLOG;
|
||||
WFR_SELF_OUTBUFFER_INIT(sout, toplevel_out);
|
||||
WFR_PORT_INIT_COLLECTION(sout->output1);
|
||||
WFR_PORT_INIT_COLLECTION(sout->output2);
|
||||
WFR_CHILD_OUTBUFFER_GET(a1out, for01_out, a1, 2, 0);
|
||||
if (a1out != nullptr) {
|
||||
WFR_HOOK_SET_RETVAL( portbuffer_copy(sout->output1, a1out->output1));
|
||||
WFR_HOOK_SET_RETVAL( portbuffer_copy(sout->output2, a1out->output2));
|
||||
}
|
||||
WFR_SELF_CHECK_AREALLOUTPUTSAVAILABLE(sout->output1.isReady() && sout->output2.isReady());
|
||||
WFR_OUTPUT_HOOK_EPILOG;
|
||||
}
|
||||
|
||||
|
||||
WFR_INPUT_HOOK(for01InputFunc) {
|
||||
WFR_INPUT_HOOK_PROLOG;
|
||||
WFR_SELF_INBUFFER_INIT(sin, for01_in);
|
||||
WFR_PARENT_INBUFFER_GET(a1in, toplevel_in, a1);
|
||||
if (a1in != nullptr) {
|
||||
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->loopCounter_to, a1in->iterCount));
|
||||
}
|
||||
WFR_INPUT_HOOK_EPILOG;
|
||||
}
|
||||
|
||||
|
||||
WFR_OUTPUT_HOOK(for01OutputFunc) {
|
||||
WFR_OUTPUT_HOOK_PROLOG;
|
||||
WFR_SELF_OUTBUFFER_INIT(sout, for01_out);
|
||||
WFR_PORT_INIT_COLLECTION(sout->output1);
|
||||
WFR_PORT_INIT_COLLECTION(sout->output2);
|
||||
|
||||
WFR_COLLECT_OUTVALUES_FROM_CHILDREN(sout->output1, task03_out, output, 5);
|
||||
WFR_LOOP_FINALIZE_COLLECTION(sout, output1);
|
||||
WFR_COLLECT_OUTVALUES_FROM_CHILDREN(sout->output2, task04_out, output, 7);
|
||||
WFR_LOOP_FINALIZE_COLLECTION(sout, output2);
|
||||
|
||||
WFR_SELF_CHECK_AREALLOUTPUTSAVAILABLE(sout->output1.isReady() && sout->output2.isReady());
|
||||
WFR_OUTPUT_HOOK_EPILOG;
|
||||
}
|
||||
|
||||
|
||||
WFR_FORCOUNTER_HOOK(for01CounterFunc) {
|
||||
WFR_FORCOUNTER_HOOK_PROLOG;
|
||||
WFR_SELF_INBUFFER_GET(sin, for01_in);
|
||||
if(sin != nullptr && sin->loopCounter_to.isReady()) {
|
||||
WFR_SELF_SETFORLOOPCOUNTERVALUES(1, 1, sin->loopCounter_to.getValue())
|
||||
WFR_LOOP_FINALIZE();
|
||||
WFR_SELF_CHECK_ISREADYFOREXECUTION(true);
|
||||
}
|
||||
WFR_FORCOUNTER_HOOK_EPILOG;
|
||||
}
|
||||
|
||||
|
||||
WFR_INPUT_HOOK(task01InputFunc) {
|
||||
WFR_INPUT_HOOK_PROLOG;
|
||||
WFR_SELF_INBUFFER_INIT(sin, task01_in);
|
||||
WFR_PARENT_INBUFFER_GET(a1in, for01_in, a1);
|
||||
if (a1in != nullptr) {
|
||||
WFR_FORLOOP_GET_COUNTER_VALUE(a1, sin->input);
|
||||
}
|
||||
WFR_SELF_CHECK_ISREADYFOREXECUTION(sin->input.isReady());
|
||||
WFR_INPUT_HOOK_EPILOG;
|
||||
}
|
||||
|
||||
|
||||
WFR_EXEC_HOOK(task01ExecFunc_0) {
|
||||
WFR_EXEC_HOOK_PROLOG;
|
||||
WFR_SELF_INBUFFER_GET(sin, task01_in);
|
||||
WFR_SELF_OUTBUFFER_INIT(sout, task01_out);
|
||||
|
||||
std::this_thread::sleep_for(std::chrono::seconds(1));
|
||||
sout->output.setValue(sin->input.getValue());
|
||||
|
||||
WFR_EXEC_HOOK_EPILOG;
|
||||
}
|
||||
|
||||
|
||||
WFR_INPUT_HOOK(task02_1InputFunc) {
|
||||
WFR_INPUT_HOOK_PROLOG;
|
||||
WFR_SELF_INBUFFER_INIT(sin, task02_1_in);
|
||||
WFR_PRED_OUTBUFFER_GET(a1in, task01_out, a1, 0);
|
||||
if (a1in != nullptr) {
|
||||
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->input, a1in->output));
|
||||
}
|
||||
WFR_SELF_CHECK_ISREADYFOREXECUTION(sin->input.isReady());
|
||||
WFR_INPUT_HOOK_EPILOG;
|
||||
}
|
||||
|
||||
|
||||
WFR_EXEC_HOOK(task02_1ExecFunc_0) {
|
||||
WFR_EXEC_HOOK_PROLOG;
|
||||
WFR_SELF_INBUFFER_GET(sin, task02_1_in);
|
||||
WFR_SELF_OUTBUFFER_INIT(sout, task02_1_out);
|
||||
|
||||
std::this_thread::sleep_for(std::chrono::seconds(1));
|
||||
sout->output.setValue(sin->input.getValue());
|
||||
|
||||
WFR_EXEC_HOOK_EPILOG;
|
||||
}
|
||||
|
||||
|
||||
WFR_INPUT_HOOK(task03InputFunc) {
|
||||
WFR_INPUT_HOOK_PROLOG;
|
||||
WFR_SELF_INBUFFER_INIT(sin, task03_in);
|
||||
WFR_PRED_OUTBUFFER_GET(a1in, task02_1_out, a1, 0);
|
||||
if (a1in != nullptr) {
|
||||
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->input, a1in->output));
|
||||
}
|
||||
WFR_SELF_CHECK_ISREADYFOREXECUTION(sin->input.isReady());
|
||||
WFR_INPUT_HOOK_EPILOG;
|
||||
}
|
||||
|
||||
|
||||
WFR_EXEC_HOOK(task03ExecFunc_0) {
|
||||
WFR_EXEC_HOOK_PROLOG;
|
||||
WFR_SELF_INBUFFER_GET(sin, task03_in);
|
||||
WFR_SELF_OUTBUFFER_INIT(sout, task03_out);
|
||||
|
||||
std::this_thread::sleep_for(std::chrono::seconds(1));
|
||||
sout->output.setValue(sin->input.getValue());
|
||||
|
||||
WFR_EXEC_HOOK_EPILOG;
|
||||
}
|
||||
|
||||
|
||||
WFR_INPUT_HOOK(task02_2InputFunc) {
|
||||
WFR_INPUT_HOOK_PROLOG;
|
||||
WFR_SELF_INBUFFER_INIT(sin, task02_2_in);
|
||||
WFR_PRED_OUTBUFFER_GET(a1in, task01_out, a1, 0);
|
||||
if (a1in != nullptr) {
|
||||
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->input, a1in->output));
|
||||
}
|
||||
WFR_SELF_CHECK_ISREADYFOREXECUTION(sin->input.isReady());
|
||||
WFR_INPUT_HOOK_EPILOG;
|
||||
}
|
||||
|
||||
|
||||
WFR_EXEC_HOOK(task02_2ExecFunc_0) {
|
||||
WFR_EXEC_HOOK_PROLOG;
|
||||
WFR_SELF_INBUFFER_GET(sin, task02_2_in);
|
||||
WFR_SELF_OUTBUFFER_INIT(sout, task02_2_out);
|
||||
|
||||
std::this_thread::sleep_for(std::chrono::seconds(1));
|
||||
sout->output.setValue(sin->input.getValue());
|
||||
|
||||
WFR_EXEC_HOOK_EPILOG;
|
||||
}
|
||||
|
||||
|
||||
WFR_INPUT_HOOK(task04InputFunc) {
|
||||
WFR_INPUT_HOOK_PROLOG;
|
||||
WFR_SELF_INBUFFER_INIT(sin, task04_in);
|
||||
WFR_PRED_OUTBUFFER_GET(a1in, task02_2_out, a1, 0);
|
||||
if (a1in != nullptr) {
|
||||
WFR_HOOK_SET_RETVAL( portbuffer_copy(sin->input, a1in->output));
|
||||
}
|
||||
WFR_SELF_CHECK_ISREADYFOREXECUTION(sin->input.isReady());
|
||||
WFR_INPUT_HOOK_EPILOG;
|
||||
}
|
||||
|
||||
|
||||
WFR_EXEC_HOOK(task04ExecFunc_0) {
|
||||
WFR_EXEC_HOOK_PROLOG;
|
||||
WFR_SELF_INBUFFER_GET(sin, task04_in);
|
||||
WFR_SELF_OUTBUFFER_INIT(sout, task04_out);
|
||||
|
||||
std::this_thread::sleep_for(std::chrono::seconds(1));
|
||||
sout->output.setValue(sin->input.getValue());
|
||||
|
||||
WFR_EXEC_HOOK_EPILOG;
|
||||
}
|
||||
|
||||
WFR_ACTIVITY_IMPLEMENTATIONS( task01Implementations, "task01Implementations", \
|
||||
wfr::wfs::AtomicActivityImplementation::PThread(task01ExecFunc_0, "task01ExecFunc_0" )
|
||||
);
|
||||
|
||||
WFR_ACTIVITY_IMPLEMENTATIONS( task02_1Implementations, "task02_1Implementations", \
|
||||
wfr::wfs::AtomicActivityImplementation::PThread(task02_1ExecFunc_0, "task02_1ExecFunc_0" )
|
||||
);
|
||||
|
||||
WFR_ACTIVITY_IMPLEMENTATIONS( task03Implementations, "task03Implementations", \
|
||||
wfr::wfs::AtomicActivityImplementation::PThread(task03ExecFunc_0, "task03ExecFunc_0" )
|
||||
);
|
||||
|
||||
WFR_ACTIVITY_IMPLEMENTATIONS( task02_2Implementations, "task02_2Implementations", \
|
||||
wfr::wfs::AtomicActivityImplementation::PThread(task02_2ExecFunc_0, "task02_2ExecFunc_0" )
|
||||
);
|
||||
|
||||
WFR_ACTIVITY_IMPLEMENTATIONS( task04Implementations, "task04Implementations", \
|
||||
wfr::wfs::AtomicActivityImplementation::PThread(task04ExecFunc_0, "task04ExecFunc_0" )
|
||||
);
|
||||
|
||||
|
||||
WFR_WORKFLOW(workflow, "generatedWorkflow", wfActivityTable, 1, \
|
||||
wfr::wfs::ActivityTemplate::container(1, "toplevel", 0, 0, {}, {}, nullptr, toplevelOutputFunc), \
|
||||
wfr::wfs::ActivityTemplate::forLoop(2, "for01", 1, 0, {}, {}, for01InputFunc, for01OutputFunc, for01CounterFunc, nullptr, true), \
|
||||
wfr::wfs::ActivityTemplate::atomic(3, "task01", 2, 0, {6, 4}, {}, task01InputFunc, task01Implementations), \
|
||||
wfr::wfs::ActivityTemplate::atomic(4, "task02_1", 2, 0, {5}, {3}, task02_1InputFunc, task02_1Implementations), \
|
||||
wfr::wfs::ActivityTemplate::atomic(5, "task03", 2, 0, {}, {4}, task03InputFunc, task03Implementations), \
|
||||
wfr::wfs::ActivityTemplate::atomic(6, "task02_2", 2, 0, {7}, {3}, task02_2InputFunc, task02_2Implementations), \
|
||||
wfr::wfs::ActivityTemplate::atomic(7, "task04", 2, 0, {}, {6}, task04InputFunc, task04Implementations), \
|
||||
);
|
||||
|
||||
|
||||
int wfstart(toplevel_in &wfInput, toplevel_out &wfOutput, int argc, char** argv) {
|
||||
wfr::WorkflowRuntime::init(argc, argv);
|
||||
workflow->execute(&wfInput, &wfOutput);
|
||||
wfr::WorkflowRuntime::finish();
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
int main(int argc, char** argv) {
|
||||
|
||||
toplevel_in wfInput;
|
||||
// Fill workflow input struct
|
||||
long iterCount = 8;
|
||||
bool isHelp = false;
|
||||
boost::program_options::options_description opts("Raincloud Options");
|
||||
opts.add_options()
|
||||
("help", "Print help message.")
|
||||
("iterCount", boost::program_options::value<long>(), "NGroup parameter.");
|
||||
boost::program_options::variables_map vm;
|
||||
auto parsed = boost::program_options::command_line_parser(argc, argv).options(opts).allow_unregistered().run();
|
||||
boost::program_options::store(parsed, vm);
|
||||
boost::program_options::notify(vm);
|
||||
if (vm.count("help")) {
|
||||
std::cerr << opts << std::endl;
|
||||
isHelp = true;
|
||||
} else {
|
||||
if (vm.count("iterCount")) {
|
||||
iterCount = vm["iterCount"].as<long>();
|
||||
}
|
||||
std::cerr << "iterCount = " << iterCount << std::endl;
|
||||
}
|
||||
wfInput.iterCount.setValue(iterCount);
|
||||
|
||||
toplevel_out wfOutput;
|
||||
|
||||
wfstart(wfInput, wfOutput, argc, argv);
|
||||
// Do something with workflow output
|
||||
|
||||
|
||||
return 0;
|
||||
}
|
||||
Reference in New Issue
Block a user