Browse Source

Math: add castInto() variants for UnsignedLong/Long.

There's now 24 overloads for unsigned types and 24 for signed types,
which is all possible combinations. Not adding an ability to cast
between signed and unsigned as I'm not sure what should be done there.
pull/537/head
Vladimír Vondruš 5 years ago
parent
commit
f9661fe402
  1. 5
      doc/changelog.dox
  2. 56
      src/Magnum/Math/PackingBatch.cpp
  3. 94
      src/Magnum/Math/PackingBatch.h
  4. 19
      src/Magnum/Math/Test/PackingBatchTest.cpp

5
doc/changelog.dox

@ -278,8 +278,9 @@ See also:
@subsubsection changelog-latest-changes-math Math library @subsubsection changelog-latest-changes-math Math library
- Added @ref Math::castInto() overloads for casting between @ref UnsignedByte - Added @ref Math::castInto() overloads for casting between @ref UnsignedByte
and @ref UnsignedShort or @ref Byte and @ref Short, and for casting between and @ref UnsignedShort or @ref Byte and @ref Short, from and to
@ref Float and @ref Double @ref UnsignedLong / @ref Long, and for casting between @ref Float and
@ref Double
- @ref Math::RectangularMatrix is now explicitly convertible from matrices of - @ref Math::RectangularMatrix is now explicitly convertible from matrices of
different sizes, with a possibility to specify whether to fill the diagonal different sizes, with a possibility to specify whether to fill the diagonal
or leave it as zeros. This was originally available only on (square) or leave it as zeros. This was originally available only on (square)

56
src/Magnum/Math/PackingBatch.cpp

@ -240,6 +240,14 @@ void castInto(const Corrade::Containers::StridedArrayView2D<const Float>& src, c
castIntoImplementation(src, dst); castIntoImplementation(src, dst);
} }
void castInto(const Corrade::Containers::StridedArrayView2D<const UnsignedByte>& src, const Corrade::Containers::StridedArrayView2D<UnsignedShort>& dst) {
castIntoImplementation(src, dst);
}
void castInto(const Corrade::Containers::StridedArrayView2D<const Byte>& src, const Corrade::Containers::StridedArrayView2D<Short>& dst) {
castIntoImplementation(src, dst);
}
void castInto(const Corrade::Containers::StridedArrayView2D<const UnsignedByte>& src, const Corrade::Containers::StridedArrayView2D<UnsignedInt>& dst) { void castInto(const Corrade::Containers::StridedArrayView2D<const UnsignedByte>& src, const Corrade::Containers::StridedArrayView2D<UnsignedInt>& dst) {
castIntoImplementation(src, dst); castIntoImplementation(src, dst);
} }
@ -256,11 +264,51 @@ void castInto(const Corrade::Containers::StridedArrayView2D<const Short>& src, c
castIntoImplementation(src, dst); castIntoImplementation(src, dst);
} }
void castInto(const Corrade::Containers::StridedArrayView2D<const UnsignedInt>& src, const Corrade::Containers::StridedArrayView2D<UnsignedByte>& dst) { void castInto(const Corrade::Containers::StridedArrayView2D<const UnsignedByte>& src, const Corrade::Containers::StridedArrayView2D<UnsignedLong>& dst) {
castIntoImplementation(src, dst); castIntoImplementation(src, dst);
} }
void castInto(const Corrade::Containers::StridedArrayView2D<const Int>& src, const Corrade::Containers::StridedArrayView2D<Byte>& dst) { void castInto(const Corrade::Containers::StridedArrayView2D<const Byte>& src, const Corrade::Containers::StridedArrayView2D<Long>& dst) {
castIntoImplementation(src, dst);
}
void castInto(const Corrade::Containers::StridedArrayView2D<const UnsignedShort>& src, const Corrade::Containers::StridedArrayView2D<UnsignedLong>& dst) {
castIntoImplementation(src, dst);
}
void castInto(const Corrade::Containers::StridedArrayView2D<const Short>& src, const Corrade::Containers::StridedArrayView2D<Long>& dst) {
castIntoImplementation(src, dst);
}
void castInto(const Corrade::Containers::StridedArrayView2D<const UnsignedInt>& src, const Corrade::Containers::StridedArrayView2D<UnsignedLong>& dst) {
castIntoImplementation(src, dst);
}
void castInto(const Corrade::Containers::StridedArrayView2D<const Int>& src, const Corrade::Containers::StridedArrayView2D<Long>& dst) {
castIntoImplementation(src, dst);
}
void castInto(const Corrade::Containers::StridedArrayView2D<const UnsignedLong>& src, const Corrade::Containers::StridedArrayView2D<UnsignedInt>& dst) {
castIntoImplementation(src, dst);
}
void castInto(const Corrade::Containers::StridedArrayView2D<const Long>& src, const Corrade::Containers::StridedArrayView2D<Int>& dst) {
castIntoImplementation(src, dst);
}
void castInto(const Corrade::Containers::StridedArrayView2D<const UnsignedLong>& src, const Corrade::Containers::StridedArrayView2D<UnsignedShort>& dst) {
castIntoImplementation(src, dst);
}
void castInto(const Corrade::Containers::StridedArrayView2D<const Long>& src, const Corrade::Containers::StridedArrayView2D<Short>& dst) {
castIntoImplementation(src, dst);
}
void castInto(const Corrade::Containers::StridedArrayView2D<const UnsignedLong>& src, const Corrade::Containers::StridedArrayView2D<UnsignedByte>& dst) {
castIntoImplementation(src, dst);
}
void castInto(const Corrade::Containers::StridedArrayView2D<const Long>& src, const Corrade::Containers::StridedArrayView2D<Byte>& dst) {
castIntoImplementation(src, dst); castIntoImplementation(src, dst);
} }
@ -272,11 +320,11 @@ void castInto(const Corrade::Containers::StridedArrayView2D<const Int>& src, con
castIntoImplementation(src, dst); castIntoImplementation(src, dst);
} }
void castInto(const Corrade::Containers::StridedArrayView2D<const UnsignedByte>& src, const Corrade::Containers::StridedArrayView2D<UnsignedShort>& dst) { void castInto(const Corrade::Containers::StridedArrayView2D<const UnsignedInt>& src, const Corrade::Containers::StridedArrayView2D<UnsignedByte>& dst) {
castIntoImplementation(src, dst); castIntoImplementation(src, dst);
} }
void castInto(const Corrade::Containers::StridedArrayView2D<const Byte>& src, const Corrade::Containers::StridedArrayView2D<Short>& dst) { void castInto(const Corrade::Containers::StridedArrayView2D<const Int>& src, const Corrade::Containers::StridedArrayView2D<Byte>& dst) {
castIntoImplementation(src, dst); castIntoImplementation(src, dst);
} }

94
src/Magnum/Math/PackingBatch.h

@ -269,7 +269,7 @@ MAGNUM_EXPORT void castInto(const Corrade::Containers::StridedArrayView2D<const
@brief Cast integer values into a differently sized type @brief Cast integer values into a differently sized type
@param[in] src Source values @param[in] src Source values
@param[out] dst Destination values @param[out] dst Destination values
@m_since{2020,06} @m_since_latest
Second dimension is meant to contain vector/matrix components, or have a size Second dimension is meant to contain vector/matrix components, or have a size
of 1 for scalars. Expects that @p src and @p dst have the same size and that of 1 for scalars. Expects that @p src and @p dst have the same size and that
@ -280,6 +280,18 @@ the second dimension in both is contiguous.
@see @ref Corrade::Containers::StridedArrayView::isContiguous() @see @ref Corrade::Containers::StridedArrayView::isContiguous()
*/ */
MAGNUM_EXPORT void castInto(const Corrade::Containers::StridedArrayView2D<const UnsignedByte>& src, const Corrade::Containers::StridedArrayView2D<UnsignedShort>& dst);
/**
* @overload
* @m_since_latest
*/
MAGNUM_EXPORT void castInto(const Corrade::Containers::StridedArrayView2D<const Byte>& src, const Corrade::Containers::StridedArrayView2D<Short>& dst);
/**
* @overload
* @m_since{2020,06}
*/
MAGNUM_EXPORT void castInto(const Corrade::Containers::StridedArrayView2D<const UnsignedByte>& src, const Corrade::Containers::StridedArrayView2D<UnsignedInt>& dst); MAGNUM_EXPORT void castInto(const Corrade::Containers::StridedArrayView2D<const UnsignedByte>& src, const Corrade::Containers::StridedArrayView2D<UnsignedInt>& dst);
/** /**
@ -302,39 +314,99 @@ MAGNUM_EXPORT void castInto(const Corrade::Containers::StridedArrayView2D<const
/** /**
* @overload * @overload
* @m_since{2020,06} * @m_since_latest
*/ */
MAGNUM_EXPORT void castInto(const Corrade::Containers::StridedArrayView2D<const UnsignedInt>& src, const Corrade::Containers::StridedArrayView2D<UnsignedShort>& dst); MAGNUM_EXPORT void castInto(const Corrade::Containers::StridedArrayView2D<const UnsignedByte>& src, const Corrade::Containers::StridedArrayView2D<UnsignedLong>& dst);
/** /**
* @overload * @overload
* @m_since{2020,06} * @m_since_latest
*/ */
MAGNUM_EXPORT void castInto(const Corrade::Containers::StridedArrayView2D<const Int>& src, const Corrade::Containers::StridedArrayView2D<Short>& dst); MAGNUM_EXPORT void castInto(const Corrade::Containers::StridedArrayView2D<const Byte>& src, const Corrade::Containers::StridedArrayView2D<Long>& dst);
/** /**
* @overload * @overload
* @m_since{2020,06} * @m_since_latest
*/ */
MAGNUM_EXPORT void castInto(const Corrade::Containers::StridedArrayView2D<const UnsignedInt>& src, const Corrade::Containers::StridedArrayView2D<UnsignedByte>& dst); MAGNUM_EXPORT void castInto(const Corrade::Containers::StridedArrayView2D<const UnsignedShort>& src, const Corrade::Containers::StridedArrayView2D<UnsignedLong>& dst);
/** /**
* @overload * @overload
* @m_since{2020,06} * @m_since_latest
*/ */
MAGNUM_EXPORT void castInto(const Corrade::Containers::StridedArrayView2D<const Int>& src, const Corrade::Containers::StridedArrayView2D<Byte>& dst); MAGNUM_EXPORT void castInto(const Corrade::Containers::StridedArrayView2D<const Short>& src, const Corrade::Containers::StridedArrayView2D<Long>& dst);
/** /**
* @overload * @overload
* @m_since_latest * @m_since_latest
*/ */
MAGNUM_EXPORT void castInto(const Corrade::Containers::StridedArrayView2D<const UnsignedByte>& src, const Corrade::Containers::StridedArrayView2D<UnsignedShort>& dst); MAGNUM_EXPORT void castInto(const Corrade::Containers::StridedArrayView2D<const UnsignedInt>& src, const Corrade::Containers::StridedArrayView2D<UnsignedLong>& dst);
/** /**
* @overload * @overload
* @m_since_latest * @m_since_latest
*/ */
MAGNUM_EXPORT void castInto(const Corrade::Containers::StridedArrayView2D<const Byte>& src, const Corrade::Containers::StridedArrayView2D<Short>& dst); MAGNUM_EXPORT void castInto(const Corrade::Containers::StridedArrayView2D<const Int>& src, const Corrade::Containers::StridedArrayView2D<Long>& dst);
/**
* @overload
* @m_since_latest
*/
MAGNUM_EXPORT void castInto(const Corrade::Containers::StridedArrayView2D<const UnsignedLong>& src, const Corrade::Containers::StridedArrayView2D<UnsignedInt>& dst);
/**
* @overload
* @m_since_latest
*/
MAGNUM_EXPORT void castInto(const Corrade::Containers::StridedArrayView2D<const Long>& src, const Corrade::Containers::StridedArrayView2D<Int>& dst);
/**
* @overload
* @m_since_latest
*/
MAGNUM_EXPORT void castInto(const Corrade::Containers::StridedArrayView2D<const UnsignedLong>& src, const Corrade::Containers::StridedArrayView2D<UnsignedShort>& dst);
/**
* @overload
* @m_since_latest
*/
MAGNUM_EXPORT void castInto(const Corrade::Containers::StridedArrayView2D<const Long>& src, const Corrade::Containers::StridedArrayView2D<Short>& dst);
/**
* @overload
* @m_since_latest
*/
MAGNUM_EXPORT void castInto(const Corrade::Containers::StridedArrayView2D<const UnsignedLong>& src, const Corrade::Containers::StridedArrayView2D<UnsignedByte>& dst);
/**
* @overload
* @m_since_latest
*/
MAGNUM_EXPORT void castInto(const Corrade::Containers::StridedArrayView2D<const Long>& src, const Corrade::Containers::StridedArrayView2D<Byte>& dst);
/**
* @overload
* @m_since{2020,06}
*/
MAGNUM_EXPORT void castInto(const Corrade::Containers::StridedArrayView2D<const UnsignedInt>& src, const Corrade::Containers::StridedArrayView2D<UnsignedShort>& dst);
/**
* @overload
* @m_since{2020,06}
*/
MAGNUM_EXPORT void castInto(const Corrade::Containers::StridedArrayView2D<const Int>& src, const Corrade::Containers::StridedArrayView2D<Short>& dst);
/**
* @overload
* @m_since{2020,06}
*/
MAGNUM_EXPORT void castInto(const Corrade::Containers::StridedArrayView2D<const UnsignedInt>& src, const Corrade::Containers::StridedArrayView2D<UnsignedByte>& dst);
/**
* @overload
* @m_since{2020,06}
*/
MAGNUM_EXPORT void castInto(const Corrade::Containers::StridedArrayView2D<const Int>& src, const Corrade::Containers::StridedArrayView2D<Byte>& dst);
/** /**
* @overload * @overload

19
src/Magnum/Math/Test/PackingBatchTest.cpp

@ -84,12 +84,17 @@ PackingBatchTest::PackingBatchTest() {
&PackingBatchTest::castSignedFloat<Short>, &PackingBatchTest::castSignedFloat<Short>,
&PackingBatchTest::castSignedFloat<Int>, &PackingBatchTest::castSignedFloat<Int>,
&PackingBatchTest::castUnsignedInteger<UnsignedByte, UnsignedShort>,
&PackingBatchTest::castUnsignedInteger<UnsignedByte, UnsignedInt>, &PackingBatchTest::castUnsignedInteger<UnsignedByte, UnsignedInt>,
&PackingBatchTest::castUnsignedInteger<UnsignedShort, UnsignedInt>, &PackingBatchTest::castUnsignedInteger<UnsignedShort, UnsignedInt>,
&PackingBatchTest::castUnsignedInteger<UnsignedByte, UnsignedShort>, &PackingBatchTest::castUnsignedInteger<UnsignedByte, UnsignedLong>,
&PackingBatchTest::castUnsignedInteger<UnsignedShort, UnsignedLong>,
&PackingBatchTest::castUnsignedInteger<UnsignedShort, UnsignedLong>,
&PackingBatchTest::castSignedInteger<Byte, Short>,
&PackingBatchTest::castSignedInteger<Byte, Int>, &PackingBatchTest::castSignedInteger<Byte, Int>,
&PackingBatchTest::castSignedInteger<Short, Int>, &PackingBatchTest::castSignedInteger<Short, Int>,
&PackingBatchTest::castSignedInteger<Byte, Short>, &PackingBatchTest::castSignedInteger<Byte, Long>,
&PackingBatchTest::castSignedInteger<Short, Long>,
&PackingBatchTest::castFloatDouble, &PackingBatchTest::castFloatDouble,
@ -104,12 +109,18 @@ PackingBatchTest::PackingBatchTest() {
&PackingBatchTest::assertionsCast<Float, Short>, &PackingBatchTest::assertionsCast<Float, Short>,
&PackingBatchTest::assertionsCast<Float, UnsignedInt>, &PackingBatchTest::assertionsCast<Float, UnsignedInt>,
&PackingBatchTest::assertionsCast<Float, Int>, &PackingBatchTest::assertionsCast<Float, Int>,
&PackingBatchTest::assertionsCast<UnsignedShort, UnsignedByte>,
&PackingBatchTest::assertionsCast<UnsignedInt, UnsignedByte>, &PackingBatchTest::assertionsCast<UnsignedInt, UnsignedByte>,
&PackingBatchTest::assertionsCast<UnsignedInt, UnsignedShort>, &PackingBatchTest::assertionsCast<UnsignedInt, UnsignedShort>,
&PackingBatchTest::assertionsCast<UnsignedShort, UnsignedByte>, &PackingBatchTest::assertionsCast<UnsignedLong, UnsignedByte>,
&PackingBatchTest::assertionsCast<UnsignedLong, UnsignedShort>,
&PackingBatchTest::assertionsCast<UnsignedLong, UnsignedInt>,
&PackingBatchTest::assertionsCast<Short, Byte>,
&PackingBatchTest::assertionsCast<Int, Byte>, &PackingBatchTest::assertionsCast<Int, Byte>,
&PackingBatchTest::assertionsCast<Int, Short>, &PackingBatchTest::assertionsCast<Int, Short>,
&PackingBatchTest::assertionsCast<Short, Byte>, &PackingBatchTest::assertionsCast<Long, Byte>,
&PackingBatchTest::assertionsCast<Long, Short>,
&PackingBatchTest::assertionsCast<Long, Int>,
&PackingBatchTest::assertionsCast<Double, Float>}); &PackingBatchTest::assertionsCast<Double, Float>});
} }

Loading…
Cancel
Save