|
- #pragma once
-
- namespace meta
- {
-
- // Update if different =========================================================
-
- template<typename T>
- bool updateIfDifferent (T& lhs, const T& rhs)
- {
- if (lhs == rhs)
- return false;
-
- lhs = rhs;
-
- return true;
- }
-
- template<typename T>
- bool updateIfDifferent (T& lhs, const T&& rhs)
- {
- if (lhs == rhs)
- return false;
-
- lhs = rhs;
-
- return true;
- }
-
- // Protected math call =========================================================
-
- template<typename T>
- T exp(T exponent)
- {
- static const T maxExponent = std::nextafter(std::log(std::numeric_limits<T>::max()), T(0));
- static const T maxValue = std::exp(maxExponent);
-
- return (exponent < maxExponent) ? std::exp(exponent) : maxValue;
- }
-
- template<typename T>
- T min(T a, T b)
- {
- return (a < b) ? a : b;
- }
-
- template<typename T>
- T max(T a, T b)
- {
- return (a > b) ? a : b;
- }
-
- template<typename T>
- T clamp(T value, T minValue, T maxValue)
- {
- return max(min(value, maxValue), minValue);
- }
-
- } // namespace
|