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,
29 bool has_intersection() {
30 CT val = m_traits[0](m_upper_streams[0]);
31 for (
size_t i = 1; i < m_upper_streams.size(); i++) {
32 CT tmp = m_traits[i](m_upper_streams[i]);
41 CT val = m_traits[0](m_upper_streams[0]);
42 for (
size_t i = 1; i < m_upper_streams.size(); i++) {
43 CT tmp = m_traits[i](m_upper_streams[i]);
48 for (
size_t i = 0; i < m_upper_streams.size(); i++) {
49 CT tmp = m_traits[i](m_upper_streams[i]);
51 m_upper_streams[i]->reset_done_value();
57 for (
size_t i = 0; i < m_upper_streams.size(); i++) {
58 m_filler[i](m_upper_streams[i], m_data);
62 virtual bool process() {
63 if (m_upper_streams.size() < 2) {
66 for (
auto &s : m_upper_streams) {
67 bool has_value = s->has_value();
73 bool ret = has_intersection();
81 virtual OutputObjType output_value() {
return m_data; }
84 std::vector<functor *> m_upper_streams;
85 typedef std::function<CT(
functor *)> kt_traits_t;
86 std::vector<kt_traits_t> m_traits;
89 typedef std::function<void(
functor *, OutputObjType &)> output_t;
90 std::vector<output_t> m_filler;
95 template <
typename CT,
typename... ARGS>