Browse Source

Math: make const vector x/y/z/w and r/g/b/a accessors return const&.

So they can be used in StridedArrayView member function slicing the same
way as the mutable overloads. Pointer, Triple and other low-level
containers do the same thing and this is one of the prime use cases for
the slicing functionality, so it's silly it didn't actually work.
pull/650/head
Vladimír Vondruš 2 years ago
parent
commit
d5b5158869
  1. 8
      src/Magnum/Math/Vector2.h
  2. 18
      src/Magnum/Math/Vector3.h
  3. 24
      src/Magnum/Math/Vector4.h

8
src/Magnum/Math/Vector2.h

@ -171,7 +171,7 @@ template<class T> class Vector2: public Vector<2, T> {
* @see @ref r()
*/
T& x() { return Vector<2, T>::_data[0]; }
constexpr T x() const { return Vector<2, T>::_data[0]; } /**< @overload */
constexpr const T& x() const { return Vector<2, T>::_data[0]; } /**< @overload */
/**
* @brief Y component
@ -179,7 +179,7 @@ template<class T> class Vector2: public Vector<2, T> {
* @see @ref g()
*/
T& y() { return Vector<2, T>::_data[1]; }
constexpr T y() const { return Vector<2, T>::_data[1]; } /**< @overload */
constexpr const T& y() const { return Vector<2, T>::_data[1]; } /**< @overload */
/**
* @brief R component
@ -192,7 +192,7 @@ template<class T> class Vector2: public Vector<2, T> {
* @overload
* @m_since_latest
*/
constexpr T r() const { return Vector<2, T>::_data[0]; }
constexpr const T& r() const { return Vector<2, T>::_data[0]; }
/**
* @brief Y component
@ -205,7 +205,7 @@ template<class T> class Vector2: public Vector<2, T> {
* @overload
* @m_since_latest
*/
constexpr T g() const { return Vector<2, T>::_data[1]; }
constexpr const T& g() const { return Vector<2, T>::_data[1]; }
/**
* @brief Perpendicular vector

18
src/Magnum/Math/Vector3.h

@ -199,7 +199,8 @@ template<class T> class Vector3: public Vector<3, T> {
* @see @ref r()
*/
T& x() { return Vector<3, T>::_data[0]; }
constexpr T x() const { return Vector<3, T>::_data[0]; } /**< @overload */
/** @overload */
constexpr const T& x() const { return Vector<3, T>::_data[0]; }
/**
* @brief Y component
@ -207,7 +208,8 @@ template<class T> class Vector3: public Vector<3, T> {
* @see @ref g()
*/
T& y() { return Vector<3, T>::_data[1]; }
constexpr T y() const { return Vector<3, T>::_data[1]; } /**< @overload */
/** @overload */
constexpr const T& y() const { return Vector<3, T>::_data[1]; }
/**
* @brief Z component
@ -215,7 +217,8 @@ template<class T> class Vector3: public Vector<3, T> {
* @see @ref b()
*/
T& z() { return Vector<3, T>::_data[2]; }
constexpr T z() const { return Vector<3, T>::_data[2]; } /**< @overload */
/** @overload */
constexpr const T& z() const { return Vector<3, T>::_data[2]; }
/**
* @brief R component
@ -223,7 +226,8 @@ template<class T> class Vector3: public Vector<3, T> {
* Equivalent to @ref x().
*/
T& r() { return Vector<3, T>::_data[0]; }
constexpr T r() const { return Vector<3, T>::_data[0]; } /**< @overload */
/** @overload */
constexpr const T& r() const { return Vector<3, T>::_data[0]; }
/**
* @brief G component
@ -231,7 +235,8 @@ template<class T> class Vector3: public Vector<3, T> {
* Equivalent to @ref y().
*/
T& g() { return Vector<3, T>::_data[1]; }
constexpr T g() const { return Vector<3, T>::_data[1]; } /**< @overload */
/** @overload */
constexpr const T& g() const { return Vector<3, T>::_data[1]; }
/**
* @brief B component
@ -239,7 +244,8 @@ template<class T> class Vector3: public Vector<3, T> {
* Equivalent to @ref z().
*/
T& b() { return Vector<3, T>::_data[2]; }
constexpr T b() const { return Vector<3, T>::_data[2]; } /**< @overload */
/** @overload */
constexpr const T& b() const { return Vector<3, T>::_data[2]; }
/**
* @brief XY part of the vector

24
src/Magnum/Math/Vector4.h

@ -141,7 +141,8 @@ template<class T> class Vector4: public Vector<4, T> {
* @see @ref r()
*/
T& x() { return Vector<4, T>::_data[0]; }
constexpr T x() const { return Vector<4, T>::_data[0]; } /**< @overload */
/** @overload */
constexpr const T& x() const { return Vector<4, T>::_data[0]; }
/**
* @brief Y component
@ -149,7 +150,8 @@ template<class T> class Vector4: public Vector<4, T> {
* @see @ref g()
*/
T& y() { return Vector<4, T>::_data[1]; }
constexpr T y() const { return Vector<4, T>::_data[1]; } /**< @overload */
/** @overload */
constexpr const T& y() const { return Vector<4, T>::_data[1]; }
/**
* @brief Z component
@ -157,7 +159,8 @@ template<class T> class Vector4: public Vector<4, T> {
* @see @ref b()
*/
T& z() { return Vector<4, T>::_data[2]; }
constexpr T z() const { return Vector<4, T>::_data[2]; } /**< @overload */
/** @overload */
constexpr const T& z() const { return Vector<4, T>::_data[2]; }
/**
* @brief W component
@ -165,7 +168,8 @@ template<class T> class Vector4: public Vector<4, T> {
* @see @ref a()
*/
T& w() { return Vector<4, T>::_data[3]; }
constexpr T w() const { return Vector<4, T>::_data[3]; } /**< @overload */
/** @overload */
constexpr const T& w() const { return Vector<4, T>::_data[3]; }
/**
* @brief R component
@ -173,7 +177,8 @@ template<class T> class Vector4: public Vector<4, T> {
* Equivalent to @ref x().
*/
T& r() { return Vector<4, T>::_data[0]; }
constexpr T r() const { return Vector<4, T>::_data[0]; } /**< @overload */
/** @overload */
constexpr const T& r() const { return Vector<4, T>::_data[0]; }
/**
* @brief G component
@ -181,7 +186,8 @@ template<class T> class Vector4: public Vector<4, T> {
* Equivalent to @ref y().
*/
T& g() { return Vector<4, T>::_data[1]; }
constexpr T g() const { return Vector<4, T>::_data[1]; } /**< @overload */
/** @overload */
constexpr const T& g() const { return Vector<4, T>::_data[1]; }
/**
* @brief B component
@ -189,7 +195,8 @@ template<class T> class Vector4: public Vector<4, T> {
* Equivalent to @ref z().
*/
T& b() { return Vector<4, T>::_data[2]; }
constexpr T b() const { return Vector<4, T>::_data[2]; } /**< @overload */
/** @overload */
constexpr const T& b() const { return Vector<4, T>::_data[2]; }
/**
* @brief A component
@ -197,7 +204,8 @@ template<class T> class Vector4: public Vector<4, T> {
* Equivalent to @ref w().
*/
T& a() { return Vector<4, T>::_data[3]; }
constexpr T a() const { return Vector<4, T>::_data[3]; } /**< @overload */
/** @overload */
constexpr const T& a() const { return Vector<4, T>::_data[3]; }
/**
* @brief XYZ part of the vector

Loading…
Cancel
Save