13 #include <type_traits> 36 template <typename Q = T, typename std::enable_if_t<std::is_integral<Q>::value,
int> = 0>
37 static constexpr
bool almostEqual(Q v1, Q v2)
42 template <typename Q = T, typename std::enable_if_t<std::is_floating_point<Q>::value,
int> = 0>
43 static constexpr Q almostEqualMaxHelper(Q v1, Q v2)
45 return std::max({ 1.0, std::fabs(v1), std::fabs(v2) });
48 template <typename Q = T, typename std::enable_if_t<std::is_floating_point<Q>::value,
int> = 0>
49 static constexpr
bool almostEqual(Q v1, Q v2)
51 return std::fabs(v1 - v2) <= std::numeric_limits<Q>::epsilon() * almostEqualMaxHelper(v1, v2);
54 template <typename Q = T, typename std::enable_if_t<std::is_integral<Q>::value,
int> = 0>
55 constexpr
bool validateInc(Q v)
const 57 if (m_inc != 0 && (v % m_inc) != 0)
64 template <typename Q = T, typename std::enable_if_t<std::is_floating_point<Q>::value,
int> = 0>
65 constexpr
bool validateInc(Q v)
const 67 if (!almostEqual<Q>(m_inc, 0) && !almostEqual<Q>(std::fmod(v, m_inc), 0))
98 constexpr T
min()
const 113 return std::make_tuple(
min(),
max(),
inc());
118 if (value < m_min || value > m_max)
123 return validateInc<T>(value);
constexpr T max() const
Definition: peak_ipl_range.hpp:102
constexpr bool inRange(T value) const
Definition: peak_ipl_range.hpp:116
constexpr std::tuple< T, T, T > getRange() const
Definition: peak_ipl_range.hpp:111
The "peak::ipl" namespace contains the whole image processing library.
Definition: peak_ipl_binning.hpp:16
constexpr T min() const
Definition: peak_ipl_range.hpp:98
The exception thrown when passing an invalid parameter to a function.
Definition: peak_ipl_exception.hpp:58
constexpr Range(T min, T max, T inc)
Definition: peak_ipl_range.hpp:75
constexpr T inc() const
Definition: peak_ipl_range.hpp:106
Range.
Definition: peak_ipl_range.hpp:30