Browse Source

Math: return default-constructed value for min()/max() on empty range.

pull/193/head
Vladimír Vondruš 9 years ago
parent
commit
4cf9459110
  1. 16
      src/Magnum/Math/Functions.h
  2. 4
      src/Magnum/Math/Test/FunctionsTest.cpp

16
src/Magnum/Math/Functions.h

@ -246,8 +246,14 @@ template<std::size_t size, class T> inline Vector<size, T> min(const Vector<size
return out;
}
/** @brief Minimum of a range */
/**
@brief Minimum of a range
If the range is empty, returns default-constructed value.
*/
template<class T> T min(Corrade::Containers::ArrayView<const T> range) {
if(range.empty()) return {};
T out(range[0]);
for(std::size_t i = 1; i != range.size(); ++i)
out = min(out, range[i]);
@ -287,8 +293,14 @@ template<std::size_t size, class T> Vector<size, T> max(const Vector<size, T>& v
return out;
}
/** @brief Maximum of a range */
/**
@brief Maximum of a range
If the range is empty, returns default-constructed value.
*/
template<class T> T max(Corrade::Containers::ArrayView<const T> range) {
if(range.empty()) return {};
T out(range[0]);
for(std::size_t i = 1; i != range.size(); ++i)
out = max(out, range[i]);

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

@ -140,6 +140,8 @@ void FunctionsTest::minList() {
CORRADE_COMPARE(Math::min({Vector3i(5, -3, 2),
Vector3i(-2, 14, 7),
Vector3i(9, -5, 18)}), Vector3i(-2, -5, 2));
CORRADE_COMPARE(Math::min(std::initializer_list<Vector3i>{}), Vector3i{});
}
void FunctionsTest::max() {
@ -153,6 +155,8 @@ void FunctionsTest::maxList() {
CORRADE_COMPARE(Math::max({Vector3i(5, -3, 2),
Vector3i(-2, 14, 7),
Vector3i(9, -5, 18)}), Vector3i(9, 14, 18));
CORRADE_COMPARE(Math::max(std::initializer_list<Vector3i>{}), Vector3i{});
}
void FunctionsTest::minmax() {

Loading…
Cancel
Save