Browse Source

math: add explicit casts between matrices of same size but different types.

undefined
Sam Hocevar 10 years ago
parent
commit
91451eaf70
1 changed files with 37 additions and 0 deletions
  1. +37
    -0
      src/lol/math/matrix.h

+ 37
- 0
src/lol/math/matrix.h View File

@@ -49,6 +49,14 @@ struct mat_t
m_data[i][j] = i == j ? val : zero;
}

/* Explicit constructor for type conversion */
template<typename U>
explicit inline mat_t(mat_t<U, COLS, ROWS> const &m)
{
for (int i = 0; i < COLS; ++i)
m_data[i] = (vec_t<T,ROWS>)m[i];
}

inline vec_t<T,ROWS>& operator[](size_t n) { return m_data[n]; }
inline vec_t<T,ROWS> const& operator[](size_t n) const { return m_data[n]; }

@@ -92,6 +100,15 @@ struct mat_t<T, 2, 2>
: m_v0(m[0].xy), m_v1(m[1].xy) {}
#endif

/* Explicit constructor for type conversion */
template<typename U>
explicit inline mat_t(mat_t<U,2,2> const &m)
#if LOL_FEATURE_CXX11_ARRAY_INITIALIZERS
: m_data{ (element)m[0], (element)m[1] } {}
#else
: m_v0((element)m[0]), m_v1((element)m[1]) {}
#endif

#if LOL_FEATURE_CXX11_ARRAY_INITIALIZERS
inline vec_t<T,2>& operator[](size_t n) { return m_data[n]; }
inline vec_t<T,2> const& operator[](size_t n) const { return m_data[n]; }
@@ -180,6 +197,15 @@ struct mat_t<T, 3, 3>
: m_v0(m[0].xyz), m_v1(m[1].xyz), m_v2(m[2].xyz) {}
#endif

/* Explicit constructor for type conversion */
template<typename U>
explicit inline mat_t(mat_t<U,3,3> const &m)
#if LOL_FEATURE_CXX11_ARRAY_INITIALIZERS
: m_data{ (element)m[0], (element)m[1], (element)m[2] } {}
#else
: m_v0((element)m[0]), m_v1((element)m[1], m_v2((element)m[2]) {}
#endif

explicit mat_t(quat_t<T> const &q);

#if LOL_FEATURE_CXX11_ARRAY_INITIALIZERS
@@ -311,6 +337,17 @@ struct mat_t<T, 4, 4>
m_v3((T)0, (T)0, (T)0, val) {}
#endif

/* Explicit constructor for type conversion */
template<typename U>
explicit inline mat_t(mat_t<U,4,4> const &m)
#if LOL_FEATURE_CXX11_ARRAY_INITIALIZERS
: m_data{ (element)m[0], (element)m[1],
(element)m[2], (element)m[3] } {}
#else
: m_v0((element)m[0]), m_v1((element)m[1],
m_v2((element)m[2]), m_v3((element)m[3]) {}
#endif

explicit mat_t(quat_t<T> const &q);

#if LOL_FEATURE_CXX11_ARRAY_INITIALIZERS


Loading…
Cancel
Save