| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 |
- #pragma once
- #include <cmath>
- #include <iostream>
- #include <jvalidate/adapter.h>
- #include <jvalidate/constraint/constraint.h>
- #include <jvalidate/detail/number.h>
- #include <jvalidate/forward.h>
- #include <limits>
- namespace jvalidate::constraint {
- class MaximumConstraint : public SimpleConstraint<MaximumConstraint> {
- 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<MinimumConstraint> {
- 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<MultipleOfConstraint> {
- public:
- double value;
- public:
- MultipleOfConstraint(double value) : value(value) {}
- bool operator()(double arg) const {
- if (std::fabs(std::remainder(arg, value)) <= std::numeric_limits<double>::epsilon()) {
- return true;
- }
- double const div = arg / value;
- return std::isfinite(div) && detail::is_json_integer(div);
- }
- };
- }
|