diff --git a/lib/pls/include/pls/dataflow/internal/build_state.h b/lib/pls/include/pls/dataflow/internal/build_state.h new file mode 100644 index 0000000..753491c --- /dev/null +++ b/lib/pls/include/pls/dataflow/internal/build_state.h @@ -0,0 +1,15 @@ + +#ifndef PLS_DATAFLOW_INTERNAL_BUILD_STATE_H_ +#define PLS_DATAFLOW_INTERNAL_BUILD_STATE_H_ + +namespace pls { +namespace dataflow { +namespace internal { + +enum class build_state { fresh, building, built, teardown }; + +} +} +} + +#endif //PLS_DATAFLOW_INTERNAL_BUILD_STATE_H_ diff --git a/lib/pls/include/pls/dataflow/internal/function_node.h b/lib/pls/include/pls/dataflow/internal/function_node.h index 6959d52..ae6fc1c 100644 --- a/lib/pls/include/pls/dataflow/internal/function_node.h +++ b/lib/pls/include/pls/dataflow/internal/function_node.h @@ -14,6 +14,7 @@ #include "outputs.h" #include "pls/internal/helpers/seqence.h" +#include "pls/pls.h" namespace pls { namespace dataflow { @@ -75,12 +76,15 @@ class function_node, pls::dataflow::outputsinput_buffer_; - output_tuple outputs; - - execute_function_internal(inputs, typename sequence_gen<1 + sizeof...(I)>::type(), - outputs, typename sequence_gen<1 + sizeof...(O)>::type(), invocation_info); - + auto lambda = [&]() { + input_tuple &inputs = invocation_memory->input_buffer_; + output_tuple outputs; + + execute_function_internal(inputs, typename sequence_gen<1 + sizeof...(I)>::type(), + outputs, typename sequence_gen<1 + sizeof...(O)>::type(), invocation_info); + }; + // TODO: maybe replace this with 'continuation' style invocation + pls::scheduler::spawn_child_and_wait>(lambda); } template void set_invocation_info(token &token, invocation_info invocation_info) {