2 #include <hpda/processor/processor_base.h>
3 #include <hpda/processor/set/helper/copy_helper.h>
4 #include <hpda/processor/set/helper/upper_stream_helper.h>
10 template <
typename OutputObjType,
typename CT>
17 template <
typename KT,
typename InputObjType>
18 void add_upper_stream(
21 InputObjType>::add_upper_stream(upper_stream,
33 for (
size_t i = 0; i < m_upper_streams.size(); i++) {
34 if (m_upper_streams[i]->has_value()) {
35 CT tmp = m_traits[i](m_upper_streams[i]);
50 for (
size_t i = 0; i < m_upper_streams.size(); i++) {
51 if (m_upper_streams[i]->has_value()) {
52 CT tmp = m_traits[i](m_upper_streams[i]);
53 if (i != index && tmp == val) {
54 m_upper_streams[i]->reset_done_value();
58 m_filler[index](m_upper_streams[index], m_data);
59 m_upper_streams[index]->reset_done_value();
63 virtual bool process() {
64 if (m_upper_streams.size() < 2) {
70 virtual OutputObjType output_value() {
return m_data; }
73 std::vector<functor *> m_upper_streams;
74 typedef std::function<CT(
functor *)> kt_traits_t;
75 std::vector<kt_traits_t> m_traits;
78 typedef std::function<void(
functor *, OutputObjType &)> output_t;
79 std::vector<output_t> m_filler;
84 template <
typename CT,
typename... ARGS>