#pragma once #include #include #include #include #include #include namespace jvalidate::constraint { class MaximumConstraint : public SimpleConstraint { public: 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 { public: 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 { public: double value; public: MultipleOfConstraint(double value) : value(value) {} bool operator()(double arg) const { // TODO(samjaffe): ... if (std::isinf(arg)) { return false; } auto val = arg / value; return std::abs(std::floor(val) - val) < std::numeric_limits::epsilon(); } }; }