13 #include <tracking/trackFindingVXD/filterMap/filterFramework/SelectionVariable.h>
14 #include <tracking/trackFindingVXD/filterMap/filterFramework/Range.h>
15 #include <tracking/trackFindingVXD/filterMap/filterFramework/LowerBoundedSet.h>
16 #include <tracking/trackFindingVXD/filterMap/filterFramework/UpperBoundedSet.h>
17 #include <tracking/trackFindingVXD/filterMap/filterFramework/SingleElementSet.h>
19 #include <tracking/trackFindingVXD/filterMap/filterFramework/ClosedLowerBoundedSet.h>
20 #include <tracking/trackFindingVXD/filterMap/filterFramework/ClosedUpperBoundedSet.h>
21 #include <tracking/trackFindingVXD/filterMap/filterFramework/ClosedRange.h>
23 #include <tracking/trackFindingVXD/filterMap/filterFramework/VoidObserver.h>
24 #include <tracking/trackFindingVXD/filterMap/filterFramework/Filter.h>
26 #include <type_traits>
42 template <
class Var,
class Arithmetic,
typename ... types>
48 std::is_base_of<SelectionVariable<typename Var::argumentType, Var::c_Nargs, typename Var::variableType>, Var>::value&&
49 std::is_arithmetic<Arithmetic>::value,
50 Filter<Var, UpperBoundedSet<Arithmetic>, VoidObserver >>::type
53 return Filter<Var, UpperBoundedSet<Arithmetic>, VoidObserver>(UpperBoundedSet<Arithmetic> (upperBound));
65 template <
class Var,
class Arithmetic,
typename ... types>
71 std::is_base_of< SelectionVariable<typename Var::argumentType, Var::c_Nargs, typename Var::variableType>, Var>::value&&
72 std::is_arithmetic<Arithmetic>::value,
73 Filter<Var, ClosedUpperBoundedSet<Arithmetic>, VoidObserver> >::type
76 return Filter<Var, ClosedUpperBoundedSet<Arithmetic>, VoidObserver>(ClosedUpperBoundedSet<Arithmetic> (upperBound));
87 template <
class Var,
class Arithmetic>
90 typename std::enable_if <
91 std::is_base_of<SelectionVariable<typename Var::argumentType, Var::c_Nargs, typename Var::variableType>, Var>::value
92 && std::is_arithmetic<Arithmetic>::value,
93 Filter<Var, LowerBoundedSet<Arithmetic>, VoidObserver> >::type
96 return Filter<Var, LowerBoundedSet<Arithmetic>, VoidObserver >(LowerBoundedSet<Arithmetic> (lowerBound));
107 template <
class Var,
class Arithmetic>
110 typename std::enable_if <
111 std::is_base_of<SelectionVariable<typename Var::argumentType, Var::c_Nargs, typename Var::variableType>, Var>::value
112 && std::is_arithmetic<Arithmetic>::value,
113 Filter<Var, ClosedLowerBoundedSet<Arithmetic>, VoidObserver> >::type
116 return Filter<Var, ClosedLowerBoundedSet<Arithmetic>, VoidObserver >(ClosedLowerBoundedSet<Arithmetic> (lowerBound));
127 template <
class Var,
class Arithmetic>
130 typename std::enable_if <
131 std::is_base_of<SelectionVariable<typename Var::argumentType, Var::c_Nargs, typename Var::variableType>, Var>::value
132 && std::is_arithmetic<Arithmetic>::value,
133 Filter<Var, UpperBoundedSet<Arithmetic>, VoidObserver> >::type
134 operator > (Arithmetic upperBound,
const Var&)
136 return Filter<Var, UpperBoundedSet<Arithmetic>, VoidObserver>(UpperBoundedSet<Arithmetic> (upperBound));
147 template <
class Var,
class Arithmetic>
150 typename std::enable_if <
151 std::is_base_of<SelectionVariable<typename Var::argumentType, Var::c_Nargs, typename Var::variableType>, Var>::value
152 && std::is_arithmetic<Arithmetic>::value,
153 Filter<Var, ClosedUpperBoundedSet<Arithmetic>, VoidObserver> >::type
156 return Filter<Var, ClosedUpperBoundedSet<Arithmetic>, VoidObserver>(ClosedUpperBoundedSet<Arithmetic> (upperBound));
167 template <
class Var,
class Arithmetic>
170 typename std::enable_if <
171 std::is_base_of<SelectionVariable<typename Var::argumentType, Var::c_Nargs, typename Var::variableType>, Var>::value
172 && std::is_arithmetic<Arithmetic>::value,
173 Filter<Var, LowerBoundedSet<Arithmetic>, VoidObserver> >::type
174 operator < (Arithmetic lowerBound,
const Var&)
176 return Filter<Var, LowerBoundedSet<Arithmetic>, VoidObserver>(LowerBoundedSet<Arithmetic> (lowerBound));
187 template <
class Var,
class Arithmetic>
190 typename std::enable_if <
191 std::is_base_of<SelectionVariable<typename Var::argumentType, Var::c_Nargs, typename Var::variableType>, Var>::value
192 && std::is_arithmetic<Arithmetic>::value,
193 Filter<Var, ClosedLowerBoundedSet<Arithmetic>, VoidObserver >>::type
196 return Filter<Var, ClosedLowerBoundedSet<Arithmetic>, VoidObserver>(ClosedLowerBoundedSet<Arithmetic> (lowerBound));
207 template <
class Var,
class Val>
210 typename std::enable_if
211 <std::is_base_of<SelectionVariable<typename Var::argumentType, Var::c_Nargs, typename Var::variableType>, Var>::value,
212 Filter<Var, SingleElementSet<Val>, VoidObserver> >::type
215 return Filter<Var, SingleElementSet<Val>, VoidObserver>(SingleElementSet<Val> (v));
227 template <
class Var,
class Val>
230 typename std::enable_if
231 <std::is_base_of<SelectionVariable<typename Var::argumentType, Var::c_Nargs, typename Var::variableType>, Var>::value,
232 Filter<Var, SingleElementSet<Val>, VoidObserver> >::type
250 template <
class Var,
class ArithmeticLower,
class ArithmeticUpper,
class Observer>
253 typename std::enable_if <
254 std::is_base_of<SelectionVariable<typename Var::argumentType, Var::c_Nargs, typename Var::variableType>, Var>::value
255 && std::is_arithmetic<ArithmeticLower>::value
256 && std::is_arithmetic<ArithmeticUpper>::value ,
257 Filter<Var, Range<ArithmeticLower, ArithmeticUpper>, Observer >>::type
258 operator < (
const Filter<Var, LowerBoundedSet<ArithmeticLower>, Observer>&
filter, ArithmeticUpper upperBound)
260 return Filter<Var, Range<ArithmeticLower, ArithmeticUpper>, Observer>
261 (Range<ArithmeticLower, ArithmeticUpper> (
filter.getRange().getInf(), upperBound));
276 template <
class Var,
class ArithmeticLower,
class ArithmeticUpper,
class Observer>
279 typename std::enable_if <
280 std::is_base_of<SelectionVariable<typename Var::argumentType, Var::c_Nargs, typename Var::variableType>, Var>::value
281 && std::is_arithmetic<ArithmeticLower>::value
282 && std::is_arithmetic<ArithmeticUpper>::value ,
283 Filter<Var, Range<ArithmeticLower, ArithmeticUpper>, Observer >>::type
284 operator > (
const Filter<Var, UpperBoundedSet<ArithmeticUpper>, Observer>&
filter, ArithmeticLower lowerBound)
286 return Filter<Var, Range<ArithmeticLower, ArithmeticUpper>, Observer>
287 (Range<ArithmeticLower, ArithmeticUpper> (lowerBound ,
filter.getRange().getSup()));
302 template <
class Var,
class ArithmeticLower,
class ArithmeticUpper,
class Observer>
305 typename std::enable_if <
306 std::is_base_of<SelectionVariable<typename Var::argumentType, Var::c_Nargs, typename Var::variableType>, Var>::value
307 && std::is_arithmetic<ArithmeticLower>::value
308 && std::is_arithmetic<ArithmeticUpper>::value ,
309 Filter<Var, ClosedRange<ArithmeticLower, ArithmeticUpper>, Observer >>::type
310 operator <= (
const Filter<Var, ClosedLowerBoundedSet<ArithmeticLower>, Observer>&
filter, ArithmeticUpper upperBound)
312 return Filter<Var, ClosedRange<ArithmeticLower, ArithmeticUpper>, Observer>
313 (ClosedRange<ArithmeticLower, ArithmeticUpper> (
filter.getRange().getInf(), upperBound));
328 template <
class Var,
class ArithmeticLower,
class ArithmeticUpper,
class Observer>
331 typename std::enable_if <
332 std::is_base_of<SelectionVariable<typename Var::argumentType, Var::c_Nargs, typename Var::variableType>, Var>::value
333 && std::is_arithmetic<ArithmeticLower>::value
334 && std::is_arithmetic<ArithmeticUpper>::value ,
335 Filter<Var, ClosedRange<ArithmeticLower, ArithmeticUpper>, Observer >>::type
336 operator >= (
const Filter<Var, ClosedUpperBoundedSet<ArithmeticUpper> , Observer>&
filter, ArithmeticLower lowerBound)
338 return Filter<Var, ClosedRange<ArithmeticLower, ArithmeticUpper>, Observer>
339 (ClosedRange<ArithmeticLower, ArithmeticUpper> (lowerBound ,
filter.getRange().getSup()));