number_constraint.h 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. #pragma once
  2. #include <cmath>
  3. #include <iostream>
  4. #include <jvalidate/adapter.h>
  5. #include <jvalidate/constraint/constraint.h>
  6. #include <jvalidate/forward.h>
  7. #include <limits>
  8. namespace jvalidate::constraint {
  9. class MaximumConstraint : public SimpleConstraint<MaximumConstraint> {
  10. private:
  11. double value_;
  12. bool exclusive_;
  13. public:
  14. MaximumConstraint(double value, bool exclusive) : value_(value), exclusive_(exclusive) {}
  15. bool operator()(double arg) const { return exclusive_ ? arg < value_ : arg <= value_; }
  16. };
  17. class MinimumConstraint : public SimpleConstraint<MinimumConstraint> {
  18. private:
  19. double value_;
  20. bool exclusive_;
  21. public:
  22. MinimumConstraint(double value, bool exclusive) : value_(value), exclusive_(exclusive) {}
  23. bool operator()(double arg) const { return exclusive_ ? arg > value_ : arg >= value_; }
  24. };
  25. class MultipleOfConstraint : public SimpleConstraint<MultipleOfConstraint> {
  26. private:
  27. double value_;
  28. public:
  29. MultipleOfConstraint(double value) : value_(value) {}
  30. bool operator()(double arg) const {
  31. if (std::isinf(arg)) {
  32. return false;
  33. }
  34. auto val = arg / value_;
  35. return std::abs(std::floor(val) - val) < std::numeric_limits<double>::epsilon();
  36. }
  37. };
  38. }