| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 |
- #pragma once
- #include <cmath>
- #include <iostream>
- #include <jvalidate/adapter.h>
- #include <jvalidate/constraint/constraint.h>
- #include <jvalidate/forward.h>
- #include <limits>
- namespace jvalidate::constraint {
- class MaximumConstraint : public SimpleConstraint<MaximumConstraint> {
- 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<MinimumConstraint> {
- 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<MultipleOfConstraint> {
- 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<double>::epsilon();
- }
- };
- }
|