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>