Browse Source

Math: new min(), max() and minmax() overloads taking plain C arrays.

inverted-ranges
Vladimír Vondruš 8 years ago
parent
commit
7a0bf3018f
  1. 2
      doc/changelog.dox
  2. 15
      src/Magnum/Math/Functions.h
  3. 9
      src/Magnum/Math/Test/FunctionsTest.cpp

2
doc/changelog.dox

@ -103,6 +103,8 @@ See also:
- Ability to use @ref Math::Complex, @ref Math::DualComplex,
@ref Math::Quaternion, @ref Math::DualQuaternion with
@ref Corrade::Utility::Configuration and @ref Corrade::Utility::Arguments
- New @ref Math::min(), @ref Math::max() and @ref Math::minmax() overloads
taking plain C arrays
@subsubsection changelog-latest-new-platform Platform libraries

15
src/Magnum/Math/Functions.h

@ -295,6 +295,11 @@ template<class T> inline T min(std::initializer_list<T> list) {
return min(Corrade::Containers::ArrayView<const T>{list.begin(), list.size()});
}
/** @overload */
template<class T, std::size_t size> inline T min(const T(&array)[size]) {
return min(Corrade::Containers::arrayView(array));
}
/**
@brief Maximum
@ -342,6 +347,11 @@ template<class T> inline T max(std::initializer_list<T> list) {
return max(Corrade::Containers::ArrayView<const T>{list.begin(), list.size()});
}
/** @overload */
template<class T, std::size_t size> inline T max(const T(&array)[size]) {
return max(Corrade::Containers::arrayView(array));
}
/**
@brief Minimum and maximum of two values
@ -397,6 +407,11 @@ template<class T> inline std::pair<T, T> minmax(std::initializer_list<T> list) {
return minmax(Corrade::Containers::ArrayView<const T>{list.begin(), list.size()});
}
/** @overload */
template<class T, std::size_t size> inline std::pair<T, T> minmax(const T(&array)[size]) {
return minmax(Corrade::Containers::arrayView(array));
}
/**
@brief Clamp value

9
src/Magnum/Math/Test/FunctionsTest.cpp

@ -153,6 +153,9 @@ void FunctionsTest::minList() {
Vector3i(9, -5, 18)}), Vector3i(-2, -5, 2));
CORRADE_COMPARE(Math::min(std::initializer_list<Vector3i>{}), Vector3i{});
const Int array[]{5, -2, 9};
CORRADE_COMPARE(Math::min(array), -2);
}
void FunctionsTest::max() {
@ -168,6 +171,9 @@ void FunctionsTest::maxList() {
Vector3i(9, -5, 18)}), Vector3i(9, 14, 18));
CORRADE_COMPARE(Math::max(std::initializer_list<Vector3i>{}), Vector3i{});
const Int array[]{5, -2, 9};
CORRADE_COMPARE(Math::max(array), 9);
}
void FunctionsTest::minmax() {
@ -198,6 +204,9 @@ void FunctionsTest::minmaxList() {
CORRADE_COMPARE(Math::minmax({Vector2{2.0f, 1.0f}, Vector2{-3.0f, -2.0f}, Vector2{-1.0f, 3.0f}}), expectedVec);
CORRADE_COMPARE(Math::minmax({Vector2{-3.0f, 3.0f}, Vector2{2.0f, -2.0f}, Vector2{-1.0f, 1.0f}}), expectedVec);
CORRADE_COMPARE(Math::minmax({Vector2{-3.0f, -2.0f}, Vector2{-1.0f, 3.0f}, Vector2{2.0f, 1.0f}}), expectedVec);
const Float array[]{-1.0f, 2.0f, -3.0f};
CORRADE_COMPARE(Math::minmax(array), expected);
}
void FunctionsTest::clamp() {

Loading…
Cancel
Save