From bfa259fb18a1e007080af10751b49acdfbc6e07c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vladim=C3=ADr=20Vondru=C5=A1?= Date: Sun, 19 Feb 2017 23:10:23 +0100 Subject: [PATCH] Math: min() and max() for pointer ranges. The test is for the initializer list version, so it covers these as well. --- src/Magnum/Math/Functions.h | 27 +++++++++++++++++++-------- 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/src/Magnum/Math/Functions.h b/src/Magnum/Math/Functions.h index e690baedb..e968ae8af 100644 --- a/src/Magnum/Math/Functions.h +++ b/src/Magnum/Math/Functions.h @@ -32,6 +32,7 @@ #include #include #include +#include #include "Magnum/visibility.h" #include "Magnum/Math/Vector.h" @@ -245,12 +246,17 @@ template inline Vector min(const Vector T min(Corrade::Containers::ArrayView range) { + T out(range[0]); + for(std::size_t i = 1; i != range.size(); ++i) + out = min(out, range[i]); + return out; +} + /** @overload */ template inline T min(std::initializer_list list) { - T out(*list.begin()); - for(auto it = list.begin()+1; it != list.end(); ++it) - out = min(out, *it); - return out; + return min(Corrade::Containers::ArrayView{list.begin(), list.size()}); } /** @@ -281,12 +287,17 @@ template Vector max(const Vector& v return out; } +/** @brief Maximum of a range */ +template T max(Corrade::Containers::ArrayView range) { + T out(range[0]); + for(std::size_t i = 1; i != range.size(); ++i) + out = max(out, range[i]); + return out; +} + /** @overload */ template inline T max(std::initializer_list list) { - T out(*list.begin()); - for(auto it = list.begin()+1; it != list.end(); ++it) - out = max(out, *it); - return out; + return max(Corrade::Containers::ArrayView{list.begin(), list.size()}); } /**