#pragma once #include #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 { if (std::fabs(std::remainder(arg, value)) <= std::numeric_limits::epsilon()) { return true; } double const div = arg / value; return std::isfinite(div) && detail::is_json_integer(div); } }; }