7 template<
typename TYPE>
8 class filter :
public cloneable {
10 virtual bool match(
const TYPE& t)
const;
12 ~filter()
override =
default;
13 filter* clone()
const override;
14 explicit filter() =
default;
15 bool operator()(
const TYPE& t)
const;
18 template<
typename TYPE>
19 class equalFilter final :
public filter<TYPE> {
21 bool match(
const TYPE& t)
const override;
23 explicit equalFilter(
const TYPE& target);
24 equalFilter* clone()
const override;
27 template<
typename TYPE>
28 class notEqualFilter final :
public filter<TYPE> {
30 bool match(
const TYPE& t)
const override;
32 explicit notEqualFilter(
const TYPE& target);
33 notEqualFilter* clone()
const override;
36 template<
typename TYPE>
37 class lessFilter final :
public filter<TYPE> {
39 bool match(
const TYPE& t)
const override;
41 explicit lessFilter(
const TYPE& low);
42 lessFilter* clone()
const override;
45 template<
typename TYPE>
46 class greaterFilter final :
public filter<TYPE> {
48 bool match(
const TYPE& t)
const override;
50 explicit greaterFilter(
const TYPE& high);
51 greaterFilter* clone()
const override;
54 template<
typename TYPE>
55 class notLessFilter final :
public filter<TYPE> {
57 bool match(
const TYPE& t)
const override;
59 explicit notLessFilter(
const TYPE& high);
60 notLessFilter* clone()
const override;
63 template<
typename TYPE>
64 class notGreaterFilter final :
public filter<TYPE> {
66 bool match(
const TYPE& t)
const override;
68 explicit notGreaterFilter(
const TYPE& low);
69 notGreaterFilter* clone()
const override;
72 template<
typename TYPE>
73 class rangeFilter final :
public filter<TYPE> {
75 bool match(
const TYPE& t)
const override;
77 explicit rangeFilter(
const TYPE& low,
const TYPE& high);
78 rangeFilter* clone()
const override;
83 template<
typename TYPE>
84 bool original::filter<TYPE>::match(
const TYPE&)
const {
88 template <
typename TYPE>
89 auto original::filter<TYPE>::clone() const -> filter*
91 return new filter(*
this);
94 template<
typename TYPE>
95 bool original::filter<TYPE>::operator()(
const TYPE& t)
const {
96 return this->match(t);
99 template<
typename TYPE>
100 bool original::equalFilter<TYPE>::match(
const TYPE& t)
const {
104 template<
typename TYPE>
105 original::equalFilter<TYPE>::equalFilter(
const TYPE& target)
108 template <
typename TYPE>
109 auto original::equalFilter<TYPE>::clone() const ->
equalFilter*
114 template<
typename TYPE>
115 bool original::notEqualFilter<TYPE>::match(
const TYPE& t)
const {
119 template<
typename TYPE>
120 original::notEqualFilter<TYPE>::notEqualFilter(
const TYPE& target)
123 template <
typename TYPE>
124 auto original::notEqualFilter<TYPE>::clone() const ->
notEqualFilter*
129 template<
typename TYPE>
130 bool original::lessFilter<TYPE>::match(
const TYPE& t)
const {
134 template<
typename TYPE>
135 original::lessFilter<TYPE>::lessFilter(
const TYPE& low)
138 template <
typename TYPE>
139 auto original::lessFilter<TYPE>::clone() const ->
lessFilter*
144 template<
typename TYPE>
145 bool original::greaterFilter<TYPE>::match(
const TYPE& t)
const {
149 template<
typename TYPE>
150 original::greaterFilter<TYPE>::greaterFilter(
const TYPE& high)
153 template <
typename TYPE>
154 auto original::greaterFilter<TYPE>::clone() const ->
greaterFilter*
159 template<
typename TYPE>
160 bool original::notLessFilter<TYPE>::match(
const TYPE& t)
const {
164 template<
typename TYPE>
165 original::notLessFilter<TYPE>::notLessFilter(
const TYPE& high)
168 template <
typename TYPE>
169 auto original::notLessFilter<TYPE>::clone() const ->
notLessFilter*
174 template<
typename TYPE>
175 bool original::notGreaterFilter<TYPE>::match(
const TYPE& t)
const {
179 template<
typename TYPE>
180 original::notGreaterFilter<TYPE>::notGreaterFilter(
const TYPE& low)
183 template <
typename TYPE>
189 template<
typename TYPE>
190 bool original::rangeFilter<TYPE>::match(
const TYPE& t)
const {
191 return t >= low && t <= high;
194 template<
typename TYPE>
195 original::rangeFilter<TYPE>::rangeFilter(
const TYPE& low,
const TYPE& high)
196 : low(low), high(high) {}
198 template <
typename TYPE>
199 auto original::rangeFilter<TYPE>::clone() const ->
rangeFilter*