Browse Source

Math: min() and max() for pointer ranges.

The test is for the initializer list version, so it covers these as
well.
pull/193/head
Vladimír Vondruš 9 years ago
parent
commit
bfa259fb18
  1. 27
      src/Magnum/Math/Functions.h

27
src/Magnum/Math/Functions.h

@ -32,6 +32,7 @@
#include <cmath> #include <cmath>
#include <type_traits> #include <type_traits>
#include <utility> #include <utility>
#include <Corrade/Containers/ArrayView.h>
#include "Magnum/visibility.h" #include "Magnum/visibility.h"
#include "Magnum/Math/Vector.h" #include "Magnum/Math/Vector.h"
@ -245,12 +246,17 @@ template<std::size_t size, class T> inline Vector<size, T> min(const Vector<size
return out; return out;
} }
/** @brief Minimum of a range */
template<class T> T min(Corrade::Containers::ArrayView<const T> range) {
T out(range[0]);
for(std::size_t i = 1; i != range.size(); ++i)
out = min(out, range[i]);
return out;
}
/** @overload */ /** @overload */
template<class T> inline T min(std::initializer_list<T> list) { template<class T> inline T min(std::initializer_list<T> list) {
T out(*list.begin()); return min(Corrade::Containers::ArrayView<const T>{list.begin(), list.size()});
for(auto it = list.begin()+1; it != list.end(); ++it)
out = min(out, *it);
return out;
} }
/** /**
@ -281,12 +287,17 @@ template<std::size_t size, class T> Vector<size, T> max(const Vector<size, T>& v
return out; return out;
} }
/** @brief Maximum of a range */
template<class T> T max(Corrade::Containers::ArrayView<const T> range) {
T out(range[0]);
for(std::size_t i = 1; i != range.size(); ++i)
out = max(out, range[i]);
return out;
}
/** @overload */ /** @overload */
template<class T> inline T max(std::initializer_list<T> list) { template<class T> inline T max(std::initializer_list<T> list) {
T out(*list.begin()); return max(Corrade::Containers::ArrayView<const T>{list.begin(), list.size()});
for(auto it = list.begin()+1; it != list.end(); ++it)
out = max(out, *it);
return out;
} }
/** /**

Loading…
Cancel
Save