From 4d0f7a6231f286b80e282fcc1c9df3ea5e401b44 Mon Sep 17 00:00:00 2001 From: Marcus Winter Date: Wed, 17 Feb 2016 12:17:45 +0100 Subject: [PATCH] dataflow_cpp: emit tokens from source only if function returns true --- dataflow_cpp/include/embb/dataflow/internal/source_executor.h | 40 +++++++++++++++++++++++++--------------- 1 file changed, 25 insertions(+), 15 deletions(-) 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; } -- libgit2 0.26.0