ORIGINAL
Loading...
Searching...
No Matches
filter.h
1#ifndef FILTER_H
2#define FILTER_H
3#include "cloneable.h"
4
5namespace original {
6
7 template<typename TYPE>
8 class filter : public cloneable {
9 protected:
10 virtual bool match(const TYPE& t) const;
11 public:
12 ~filter() override = default;
13 filter* clone() const override;
14 explicit filter() = default;
15 bool operator()(const TYPE& t) const;
16 };
17
18 template<typename TYPE>
19 class equalFilter final : public filter<TYPE> {
20 TYPE target;
21 bool match(const TYPE& t) const override;
22 public:
23 explicit equalFilter(const TYPE& target);
24 equalFilter* clone() const override;
25 };
26
27 template<typename TYPE>
28 class notEqualFilter final : public filter<TYPE> {
29 TYPE target;
30 bool match(const TYPE& t) const override;
31 public:
32 explicit notEqualFilter(const TYPE& target);
33 notEqualFilter* clone() const override;
34 };
35
36 template<typename TYPE>
37 class lessFilter final : public filter<TYPE> {
38 TYPE low;
39 bool match(const TYPE& t) const override;
40 public:
41 explicit lessFilter(const TYPE& low);
42 lessFilter* clone() const override;
43 };
44
45 template<typename TYPE>
46 class greaterFilter final : public filter<TYPE> {
47 TYPE high;
48 bool match(const TYPE& t) const override;
49 public:
50 explicit greaterFilter(const TYPE& high);
51 greaterFilter* clone() const override;
52 };
53
54 template<typename TYPE>
55 class notLessFilter final : public filter<TYPE> {
56 TYPE high;
57 bool match(const TYPE& t) const override;
58 public:
59 explicit notLessFilter(const TYPE& high);
60 notLessFilter* clone() const override;
61 };
62
63 template<typename TYPE>
64 class notGreaterFilter final : public filter<TYPE> {
65 TYPE low;
66 bool match(const TYPE& t) const override;
67 public:
68 explicit notGreaterFilter(const TYPE& low);
69 notGreaterFilter* clone() const override;
70 };
71
72 template<typename TYPE>
73 class rangeFilter final : public filter<TYPE> {
74 TYPE low, high;
75 bool match(const TYPE& t) const override;
76 public:
77 explicit rangeFilter(const TYPE& low, const TYPE& high);
78 rangeFilter* clone() const override;
79 };
80
81} // namespace original
82
83 template<typename TYPE>
84 bool original::filter<TYPE>::match(const TYPE&) const {
85 return true;
86 }
87
88 template <typename TYPE>
89 auto original::filter<TYPE>::clone() const -> filter*
90 {
91 return new filter(*this);
92 }
93
94 template<typename TYPE>
95 bool original::filter<TYPE>::operator()(const TYPE& t) const {
96 return this->match(t);
97 }
98
99 template<typename TYPE>
100 bool original::equalFilter<TYPE>::match(const TYPE& t) const {
101 return t == target;
102 }
103
104 template<typename TYPE>
105 original::equalFilter<TYPE>::equalFilter(const TYPE& target)
106 : target(target) {}
107
108 template <typename TYPE>
109 auto original::equalFilter<TYPE>::clone() const -> equalFilter*
110 {
111 return new equalFilter(*this);
112 }
113
114 template<typename TYPE>
115 bool original::notEqualFilter<TYPE>::match(const TYPE& t) const {
116 return t != target;
117 }
118
119 template<typename TYPE>
120 original::notEqualFilter<TYPE>::notEqualFilter(const TYPE& target)
121 : target(target) {}
122
123 template <typename TYPE>
124 auto original::notEqualFilter<TYPE>::clone() const -> notEqualFilter*
125 {
126 return new notEqualFilter(*this);
127 }
128
129 template<typename TYPE>
130 bool original::lessFilter<TYPE>::match(const TYPE& t) const {
131 return t < low;
132 }
133
134 template<typename TYPE>
135 original::lessFilter<TYPE>::lessFilter(const TYPE& low)
136 : low(low) {}
137
138 template <typename TYPE>
139 auto original::lessFilter<TYPE>::clone() const -> lessFilter*
140 {
141 return new lessFilter(*this);
142 }
143
144 template<typename TYPE>
145 bool original::greaterFilter<TYPE>::match(const TYPE& t) const {
146 return t > high;
147 }
148
149 template<typename TYPE>
150 original::greaterFilter<TYPE>::greaterFilter(const TYPE& high)
151 : high(high) {}
152
153 template <typename TYPE>
154 auto original::greaterFilter<TYPE>::clone() const -> greaterFilter*
155 {
156 return new greaterFilter(*this);
157 }
158
159 template<typename TYPE>
160 bool original::notLessFilter<TYPE>::match(const TYPE& t) const {
161 return t >= high;
162 }
163
164 template<typename TYPE>
165 original::notLessFilter<TYPE>::notLessFilter(const TYPE& high)
166 : high(high) {}
167
168 template <typename TYPE>
169 auto original::notLessFilter<TYPE>::clone() const -> notLessFilter*
170 {
171 return new notLessFilter(*this);
172 }
173
174 template<typename TYPE>
175 bool original::notGreaterFilter<TYPE>::match(const TYPE& t) const {
176 return t <= low;
177 }
178
179 template<typename TYPE>
180 original::notGreaterFilter<TYPE>::notGreaterFilter(const TYPE& low)
181 : low(low) {}
182
183 template <typename TYPE>
184 auto original::notGreaterFilter<TYPE>::clone() const -> notGreaterFilter*
185 {
186 return new notGreaterFilter(*this);
187 }
188
189 template<typename TYPE>
190 bool original::rangeFilter<TYPE>::match(const TYPE& t) const {
191 return t >= low && t <= high;
192 }
193
194 template<typename TYPE>
195 original::rangeFilter<TYPE>::rangeFilter(const TYPE& low, const TYPE& high)
196 : low(low), high(high) {}
197
198 template <typename TYPE>
199 auto original::rangeFilter<TYPE>::clone() const -> rangeFilter*
200 {
201 return new rangeFilter(*this);
202 }
203
204#endif // FILTER_H
Definition filter.h:19
Definition filter.h:46
Definition filter.h:37
Definition filter.h:28
Definition filter.h:64
Definition filter.h:55
Definition filter.h:73