// Headers are available because we added the pls target #include #include #include #include #include #include #include #include int main() { using namespace pls::dataflow; using namespace pls::dataflow::internal; out_port external1; out_port external2; auto func1 = [](const int &i1, const int &i2, int &o1) { std::cout << "Hello! " << i1 << ", " << i2 << std::endl; o1 = i1 + i2; }; function_node, outputs, decltype(func1)> node1{func1}; auto func2 = [](const int &i1, int &o1) { std::cout << "We get! " << i1 << std::endl; }; function_node, outputs, decltype(func2)> node2{func2}; external1 >> node1.in_port<0>(); external2 >> node1.in_port<1>(); node1.out_port<0>() >> node2.in_port<0>(); // Simulate execution environment void *buffer1 = malloc(node1.instance_buffer_size()); void *buffer2 = malloc(node2.instance_buffer_size()); void *memory[] = {buffer1, buffer2}; node1.init_instance_buffer(memory[0]); node1.set_memory_index(0); node2.init_instance_buffer(memory[1]); node2.set_memory_index(1); invocation_info invocation{memory}; external1.push_token({1, invocation}); external2.push_token({2, invocation}); }