diff --git a/dataflow_cpp/include/embb/dataflow/internal/source_executor.h b/dataflow_cpp/include/embb/dataflow/internal/source_executor.h index 1461285..98a5a1e 100644 --- a/dataflow_cpp/include/embb/dataflow/internal/source_executor.h +++ b/dataflow_cpp/include/embb/dataflow/internal/source_executor.h @@ -53,7 +53,9 @@ class SourceExecutor< Outputs > { Outputs & outputs) { O1 o1; bool result = function_(o1); - outputs.template Get<0>().Send(Signal(clock, o1)); + if (result) { + outputs.template Get<0>().Send(Signal(clock, o1)); + } return result; } @@ -78,8 +80,10 @@ class SourceExecutor< Outputs > { O1 o1; O2 o2; bool result = function_(o1, o2); - outputs.template Get<0>().Send(Signal(clock, o1)); - outputs.template Get<1>().Send(Signal(clock, o2)); + if (result) { + outputs.template Get<0>().Send(Signal(clock, o1)); + outputs.template Get<1>().Send(Signal(clock, o2)); + } return result; } @@ -106,9 +110,11 @@ class SourceExecutor< Outputs > { O2 o2; O3 o3; bool result = function_(o1, o2, o3); - outputs.template Get<0>().Send(Signal(clock, o1)); - outputs.template Get<1>().Send(Signal(clock, o2)); - outputs.template Get<2>().Send(Signal(clock, o3)); + if (result) { + outputs.template Get<0>().Send(Signal(clock, o1)); + outputs.template Get<1>().Send(Signal(clock, o2)); + outputs.template Get<2>().Send(Signal(clock, o3)); + } return result; } @@ -137,10 +143,12 @@ class SourceExecutor< Outputs > { O3 o3; O4 o4; bool result = function_(o1, o2, o3, o4); - outputs.template Get<0>().Send(Signal(clock, o1)); - outputs.template Get<1>().Send(Signal(clock, o2)); - outputs.template Get<2>().Send(Signal(clock, o3)); - outputs.template Get<3>().Send(Signal(clock, o4)); + if (result) { + outputs.template Get<0>().Send(Signal(clock, o1)); + outputs.template Get<1>().Send(Signal(clock, o2)); + outputs.template Get<2>().Send(Signal(clock, o3)); + outputs.template Get<3>().Send(Signal(clock, o4)); + } return result; } @@ -172,11 +180,13 @@ class SourceExecutor< Outputs > { O4 o4; O5 o5; bool result = function_(o1, o2, o3, o4, o5); - outputs.template Get<0>().Send(Signal(clock, o1)); - outputs.template Get<1>().Send(Signal(clock, o2)); - outputs.template Get<2>().Send(Signal(clock, o3)); - outputs.template Get<3>().Send(Signal(clock, o4)); - outputs.template Get<4>().Send(Signal(clock, o5)); + if (result) { + outputs.template Get<0>().Send(Signal(clock, o1)); + outputs.template Get<1>().Send(Signal(clock, o2)); + outputs.template Get<2>().Send(Signal(clock, o3)); + outputs.template Get<3>().Send(Signal(clock, o4)); + outputs.template Get<4>().Send(Signal(clock, o5)); + } return result; } diff --git a/dataflow_cpp/test/dataflow_cpp_test_simple.cc b/dataflow_cpp/test/dataflow_cpp_test_simple.cc index 3b41973..6b355bb 100644 --- a/dataflow_cpp/test/dataflow_cpp_test_simple.cc +++ b/dataflow_cpp/test/dataflow_cpp_test_simple.cc @@ -56,12 +56,19 @@ embb::base::Atomic source_counter; int source_array[TEST_COUNT]; bool sourceFunc(int & out) { - out = source_counter; + if (source_counter < TEST_COUNT) + { + out = source_counter; - source_array[source_counter] = out; - source_counter++; + source_array[source_counter] = out; + source_counter++; - return source_counter < TEST_COUNT; + return true; + } + else + { + return false; + } } embb::base::Atomic pred_counter; diff --git a/doc/examples/dataflow/dataflow_producer-snippet.h b/doc/examples/dataflow/dataflow_producer-snippet.h index ffaf79e..f76065c 100644 --- a/doc/examples/dataflow/dataflow_producer-snippet.h +++ b/doc/examples/dataflow/dataflow_producer-snippet.h @@ -3,10 +3,14 @@ class Producer { public: explicit Producer(int seed) : seed_(seed), count_(4) {} bool Run(T& x) { - // produce a new value x - x = SimpleRand(seed_); - count_--; - return count_ >= 0; + if (count_ >= 0) { + // produce a new value x + x = SimpleRand(seed_); + count_--; + return true; + } else { + return false; + } } private: diff --git a/doc/examples/dataflow/dataflow_source_function-snippet.h b/doc/examples/dataflow/dataflow_source_function-snippet.h index 6c1cdea..1afc660 100644 --- a/doc/examples/dataflow/dataflow_source_function-snippet.h +++ b/doc/examples/dataflow/dataflow_source_function-snippet.h @@ -1,4 +1,8 @@ bool SourceFunction(std::string & str) { - std::getline(file, str); - return !file.eof(); + if (!file.eof()) { + std::getline(file, str); + return true; + } else { + return false; + } }