GrPPI  1.0
Generic and Reusable Parallel Pattern Interface
filter_pattern.h
Go to the documentation of this file.
1 /*
2  * Copyright 2018 Universidad Carlos III de Madrid
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 #ifndef GRPPI_COMMON_FILTER_PATTERN_H
17 #define GRPPI_COMMON_FILTER_PATTERN_H
18 
19 #include <type_traits>
20 
21 namespace grppi {
22 
28 template <typename Predicate>
29 class filter_t {
30 public:
31 
36  filter_t(Predicate && p) noexcept :
37  predicate_{p}
38  {}
39 
43  template <typename I>
44  bool operator()(I && item) const {
45  return predicate_(std::forward<I>(item));
46  }
47 
48 private:
49  Predicate predicate_;
50 };
51 
52 namespace internal {
53 
54 template<typename T>
55 struct is_filter : std::false_type {};
56 
57 template<typename T>
58 struct is_filter<filter_t<T>> : std::true_type {};
59 
60 } // namespace internal
61 
62 template <typename T>
64 
65 template <typename T>
66 using requires_filter = typename std::enable_if_t<is_filter<T>, int>;
67 
68 }
69 
70 #endif
Representation of filter pattern. Represents a filter that can be used as a stage on a pipeline.
Definition: filter_pattern.h:29
bool operator()(I &&item) const
Invokes the predicate of the filter over a data item.
Definition: filter_pattern.h:44
filter_t(Predicate &&p) noexcept
Constructs a filter with a predicate.
Definition: filter_pattern.h:36
Definition: callable_traits.h:21
typename std::enable_if_t< is_filter< T >, int > requires_filter
Definition: filter_pattern.h:66
static constexpr bool is_filter
Definition: filter_pattern.h:63
Definition: filter_pattern.h:55