Browse Source

Math: make Vector::pad() default argument work with Half.

Got lucky enough that the default zero-initialization constructor does
exactly what I need. Otherwise ugh I don't know what I would do.
pull/369/head
Vladimír Vondruš 6 years ago
parent
commit
c8afe0f732
  1. 12
      src/Magnum/Math/Test/VectorTest.cpp
  2. 4
      src/Magnum/Math/Vector.h

12
src/Magnum/Math/Test/VectorTest.cpp

@ -27,6 +27,7 @@
#include <Corrade/TestSuite/Tester.h>
#include <Corrade/Utility/DebugStl.h>
#include "Magnum/Math/Half.h"
#include "Magnum/Math/Vector.h"
#include "Magnum/Math/StrictWeakOrdering.h"
@ -58,6 +59,7 @@ struct VectorTest: Corrade::TestSuite::Tester {
void construct();
void constructFromData();
void constructPad();
void constructPadDefaultHalf();
void constructDefault();
void constructNoInit();
void constructOneValue();
@ -118,14 +120,17 @@ struct VectorTest: Corrade::TestSuite::Tester {
typedef Math::Constants<Float> Constants;
typedef Math::Rad<Float> Rad;
typedef Vector<2, Float> Vector2;
typedef Vector<2, Half> Vector2h;
typedef Vector<3, Float> Vector3;
typedef Vector<4, Float> Vector4;
typedef Vector<4, Half> Vector4h;
typedef Vector<4, Int> Vector4i;
VectorTest::VectorTest() {
addTests({&VectorTest::construct,
&VectorTest::constructFromData,
&VectorTest::constructPad,
&VectorTest::constructPadDefaultHalf,
&VectorTest::constructDefault,
&VectorTest::constructNoInit,
&VectorTest::constructOneValue,
@ -207,6 +212,13 @@ void VectorTest::constructPad() {
CORRADE_COMPARE(e, Vector4(1.0f, -1.0f, 8.0f, 2.3f));
}
void VectorTest::constructPadDefaultHalf() {
using namespace Literals;
/* The default pad value should work also for the Half type */
Vector4h a = Vector4h::pad(Vector2h{1.0_h, -1.0_h});
CORRADE_COMPARE(a, (Vector4h{1.0_h, -1.0_h, 0.0_h, 0.0_h}));
}
void VectorTest::constructDefault() {
constexpr Vector4 a;
constexpr Vector4 b{ZeroInit};

4
src/Magnum/Math/Vector.h

@ -166,7 +166,7 @@ template<std::size_t size, class T> class Vector {
* with @p value, otherwise it's cut.
* @see @ref Vector4::pad(const Vector<otherSize, T>&, T, T)
*/
template<std::size_t otherSize> constexpr static Vector<size, T> pad(const Vector<otherSize, T>& a, T value = T(0)) {
template<std::size_t otherSize> constexpr static Vector<size, T> pad(const Vector<otherSize, T>& a, T value = T()) {
return padInternal<otherSize>(typename Implementation::GenerateSequence<size>::Type(), a, value);
}
@ -1248,7 +1248,7 @@ extern template MAGNUM_EXPORT Corrade::Utility::Debug& operator<<(Corrade::Utili
static const Type<T>& from(const T* data) { \
return *reinterpret_cast<const Type<T>*>(data); \
} \
template<std::size_t otherSize> constexpr static Type<T> pad(const Math::Vector<otherSize, T>& a, T value = T(0)) { \
template<std::size_t otherSize> constexpr static Type<T> pad(const Math::Vector<otherSize, T>& a, T value = T()) { \
return Math::Vector<size, T>::pad(a, value); \
} \
\

Loading…
Cancel
Save