From 7a0bf3018f1b33098fe7209137d141508e5f1807 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladim=C3=ADr=20Vondru=C5=A1?= Date: Mon, 17 Sep 2018 17:56:49 +0200 Subject: [PATCH] Math: new min(), max() and minmax() overloads taking plain C arrays. --- doc/changelog.dox | 2 ++ src/Magnum/Math/Functions.h | 15 +++++++++++++++ src/Magnum/Math/Test/FunctionsTest.cpp | 9 +++++++++ 3 files changed, 26 insertions(+) diff --git a/doc/changelog.dox b/doc/changelog.dox index deca4362c..ceaffb318 100644 --- a/doc/changelog.dox +++ b/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 diff --git a/src/Magnum/Math/Functions.h b/src/Magnum/Math/Functions.h index 9909406b9..a50b0cade 100644 --- a/src/Magnum/Math/Functions.h +++ b/src/Magnum/Math/Functions.h @@ -295,6 +295,11 @@ template inline T min(std::initializer_list list) { return min(Corrade::Containers::ArrayView{list.begin(), list.size()}); } +/** @overload */ +template inline T min(const T(&array)[size]) { + return min(Corrade::Containers::arrayView(array)); +} + /** @brief Maximum @@ -342,6 +347,11 @@ template inline T max(std::initializer_list list) { return max(Corrade::Containers::ArrayView{list.begin(), list.size()}); } +/** @overload */ +template 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 inline std::pair minmax(std::initializer_list list) { return minmax(Corrade::Containers::ArrayView{list.begin(), list.size()}); } +/** @overload */ +template inline std::pair minmax(const T(&array)[size]) { + return minmax(Corrade::Containers::arrayView(array)); +} + /** @brief Clamp value diff --git a/src/Magnum/Math/Test/FunctionsTest.cpp b/src/Magnum/Math/Test/FunctionsTest.cpp index fb51bb7d5..88cdedb50 100644 --- a/src/Magnum/Math/Test/FunctionsTest.cpp +++ b/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{}); + + 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{}); + + 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() {