YPC  0.2.0
filter.h
1 #pragma once
2 #include <hpda/processor/processor_base.h>
3 
4 namespace hpda {
5 namespace processor {
6 namespace internal {
7 
8 template <typename InputObjType>
9 class filter_impl : public processor_base<InputObjType, InputObjType> {
10 public:
11  template <typename Func>
14  Func &&f)
16  m_func(std::move(f)) {}
17 
18  virtual ~filter_impl() {}
19 
21 
22  virtual bool process() {
23  if (!base::has_input_value()) {
24  return false;
25  }
26  auto b = m_func(base::input_value());
27  if (b) {
28  m_data = base::input_value().make_copy();
29  }
30  base::consume_input_value();
31  return b;
32  }
33 
34  virtual InputObjType output_value() { return m_data; }
35 
36 protected:
37  typedef std::function<bool(const InputObjType &)> predicate_func_t;
38  predicate_func_t m_func;
39  InputObjType m_data;
40 };
41 } // namespace internal
42 template <typename... ARGS>
43 using filter = internal::filter_impl<ntobject<ARGS...>>;
44 
45 template <typename T> using filter_t = internal::filter_impl<T>;
46 } // namespace processor
47 } // namespace hpda
hpda::processor::internal::processor_base
Definition: processor_base.h:9
hpda::processor::internal::filter_impl
Definition: filter.h:9
hpda::internal::processor_with_output< InputObjType >