YPC  0.2.0
upper_stream_helper.h
1 #pragma once
2 #include <hpda/processor/processor_base.h>
3 #include <hpda/processor/set/helper/copy_helper.h>
4 
5 namespace hpda {
6 namespace processor {
7 namespace internal {
8 
9 template <typename OutputObjType, typename CT, typename KT,
10  typename InputObjType>
12  template <typename T1, typename T2, typename T3, typename T4>
13  static void add_upper_stream(T1 *upper_stream, T2 &upper_streams, T3 &traits,
14  T4 &filler, bool &set_engine, functor *engine) {
15  static_assert(
16  std::is_same<typename ::ff::util::internal::nt_traits<KT>::type,
17  CT>::value,
18  "invalid type");
19  upper_streams.push_back(upper_stream);
20  traits.push_back([](functor *p) {
21  auto *ptr =
23  p);
24  return ptr->output_value().template get<KT>();
25  });
26  filler.push_back([](functor *p, OutputObjType &ret) {
27  auto *ptr =
29  p);
30  copy_helper<0>::copy(ret, ptr->output_value());
31  });
32 
33  if (!set_engine) {
34  engine->set_engine(upper_stream->get_engine());
35  set_engine = true;
36  }
37  engine->add_predecessor(upper_stream);
38  }
39 };
40 
41 } // namespace internal
42 } // namespace processor
43 } // namespace hpda
hpda::processor::internal::upper_stream_helper
Definition: upper_stream_helper.h:11
hpda::processor::internal::copy_helper
Definition: copy_helper.h:8
hpda::engine
Definition: engine.h:16
hpda::internal::processor_with_output< InputObjType >
hpda::functor
Definition: functor.h:7