number_constraint.h 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  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. public:
  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. public:
  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. public:
  27. double value;
  28. public:
  29. MultipleOfConstraint(double value) : value(value) {}
  30. bool operator()(double arg) const {
  31. // TODO(samjaffe): ...
  32. if (std::isinf(arg)) {
  33. return false;
  34. }
  35. auto val = arg / value;
  36. return std::abs(std::floor(val) - val) < std::numeric_limits<double>::epsilon();
  37. }
  38. };
  39. }