#pragma once #include #include #include #include #include #include namespace jvalidate::constraint { class MaximumConstraint : public SimpleConstraint { private: double value_; bool exclusive_; public: MaximumConstraint(double value, bool exclusive) : value_(value), exclusive_(exclusive) {} bool operator()(double arg) const { return exclusive_ ? arg < value_ : arg <= value_; } }; class MinimumConstraint : public SimpleConstraint { private: double value_; bool exclusive_; public: MinimumConstraint(double value, bool exclusive) : value_(value), exclusive_(exclusive) {} bool operator()(double arg) const { return exclusive_ ? arg > value_ : arg >= value_; } }; class MultipleOfConstraint : public SimpleConstraint { private: double value_; public: MultipleOfConstraint(double value) : value_(value) {} bool operator()(double arg) const { if (std::isinf(arg)) { return false; } auto val = arg / value_; return std::abs(std::floor(val) - val) < std::numeric_limits::epsilon(); } }; }