162 lines
2.6 KiB
C++
162 lines
2.6 KiB
C++
|
|
#ifndef __maskOperation_hpp__
|
|
#define __maskOperation_hpp__
|
|
|
|
#include "types.hpp"
|
|
#include "dictionary.hpp"
|
|
|
|
namespace pFlow
|
|
{
|
|
|
|
template<typename T>
|
|
struct greaterThanOp
|
|
{
|
|
TypeInfoNV("greaterThan");
|
|
|
|
inline
|
|
bool operator()(const T &compVal, const T &val) const {
|
|
return val > compVal; }
|
|
};
|
|
|
|
template<typename T>
|
|
struct greaterThanEqOp
|
|
{
|
|
TypeInfoNV("greaterThanEq");
|
|
|
|
inline
|
|
bool operator()(const T &compVal, const T &val) const {
|
|
return val >= compVal; }
|
|
};
|
|
|
|
template<typename T>
|
|
struct lessThanOp
|
|
{
|
|
TypeInfoNV("lessThan");
|
|
|
|
inline
|
|
bool operator()(const T &compVal, const T &val) const {
|
|
return val < compVal; }
|
|
};
|
|
|
|
template<typename T>
|
|
struct lessThanEqOp
|
|
{
|
|
TypeInfoNV("lessThanEq");
|
|
|
|
inline
|
|
bool operator()(const T &compVal, const T &val) const {
|
|
return val <= compVal; }
|
|
};
|
|
|
|
template<typename T>
|
|
struct equalOp
|
|
{
|
|
TypeInfoNV("equal");
|
|
|
|
inline
|
|
bool operator()(const T &compVal, const T &val) const {
|
|
return equal(val , compVal); }
|
|
};
|
|
|
|
|
|
template<typename T>
|
|
struct betweenOp
|
|
{
|
|
TypeInfoNV("between");
|
|
|
|
inline
|
|
bool operator()(const T &compVal1, const T &compVal2 ,const T &val) const {
|
|
return val>compVal1 && val<compVal2; }
|
|
};
|
|
|
|
|
|
template<typename T>
|
|
struct betweenEqOp
|
|
{
|
|
TypeInfoNV("betweenEq");
|
|
|
|
inline
|
|
bool operator()(const T &compVal1, const T &compVal2 ,const T &val) const {
|
|
return val>=compVal1 && val<=compVal2; }
|
|
};
|
|
|
|
template<typename T>
|
|
struct allOp
|
|
{
|
|
TypeInfoNV("all");
|
|
|
|
inline
|
|
bool operator()() const {return true; }
|
|
};
|
|
|
|
|
|
|
|
template<typename T, template<class> class Operator>
|
|
class compareOne
|
|
{
|
|
public:
|
|
|
|
using opertorType = Operator<T>;
|
|
|
|
protected:
|
|
T compValue_{};
|
|
opertorType operator_{};
|
|
public:
|
|
|
|
TypeInfoNV(Operator<T>::TYPENAME());
|
|
|
|
compareOne(const dictionary& dict)
|
|
:
|
|
compValue_(dict.getVal<T>("value"))
|
|
{}
|
|
|
|
bool operator()(const T& value)const
|
|
{
|
|
return operator_(compValue_, value);
|
|
}
|
|
};
|
|
|
|
template<typename T, template<class> class Operator>
|
|
class compareTwo
|
|
{
|
|
public:
|
|
using opertorType = Operator<T>;
|
|
protected:
|
|
T compValue1_;
|
|
T compValue2_;
|
|
opertorType operator_{};
|
|
public:
|
|
|
|
TypeInfoNV(opertorType::TYPENAME());
|
|
|
|
compareTwo(const dictionary& dict)
|
|
:
|
|
compValue1_(dict.getVal<T>("value1")),
|
|
compValue2_(dict.getVal<T>("value2"))
|
|
{}
|
|
|
|
bool operator()(const T& value)const
|
|
{
|
|
return operator_(compValue1_, compValue2_, value);
|
|
}
|
|
};
|
|
|
|
template<typename T, typename Operator>
|
|
class compareZero
|
|
{
|
|
protected:
|
|
Operator operator_{};
|
|
public:
|
|
|
|
TypeInfoNV(Operator::TYPENAME());
|
|
compareZero(const dictionary& dict);
|
|
|
|
bool operator()(const T& value) const
|
|
{
|
|
return operator_();
|
|
}
|
|
};
|
|
|
|
}
|
|
|
|
#endif //__maskOperation_hpp__
|