Math/Vector[I]: Replace implicit pointer conversion by [] operator overload

This commit is contained in:
Lynix 2020-05-26 16:03:57 +02:00
parent 3b440254da
commit b1b9030359
7 changed files with 38 additions and 48 deletions

View File

@ -63,8 +63,8 @@ namespace Nz
String ToString() const; String ToString() const;
operator T* (); T& operator[](std::size_t i);
operator const T* () const; T operator[](std::size_t i) const;
const Vector2& operator+() const; const Vector2& operator+() const;
Vector2 operator-() const; Vector2 operator-() const;

View File

@ -450,29 +450,25 @@ namespace Nz
} }
/*! /*!
* \brief Converts vector to pointer to its own data * \brief Access a vector component by index
* \return A pointer to the own data * \return X, Y depending on index (0, 1)
*
* \remark Access to index greather than 1 is undefined behavior
*/ */
template<typename T> template<typename T>
Vector2<T>::operator T* () T& Vector2<T>::operator[](std::size_t i)
{ {
return &x; NazaraAssert(i < 2, "index out of range");
return *(&x + i);
} }
/*! /*!
* \brief Converts vector to const pointer to its own data * \brief Access a vector component by index
* \return A constant pointer to the own data * \return X, Y depending on index (0, 1)
*
* \remark Access to index greather than 1 is undefined behavior
*/ */
template<typename T> template<typename T>
Vector2<T>::operator const T* () const T Vector2<T>::operator[](std::size_t i) const
{ {
return &x; NazaraAssert(i < 2, "index out of range");
return *(&x + i);
} }
/*! /*!

View File

@ -74,8 +74,8 @@ namespace Nz
String ToString() const; String ToString() const;
operator T* (); T& operator[](std::size_t i);
operator const T* () const; T operator[](std::size_t i) const;
const Vector3& operator+() const; const Vector3& operator+() const;
Vector3 operator-() const; Vector3 operator-() const;

View File

@ -583,27 +583,25 @@ namespace Nz
} }
/*! /*!
* \brief Converts vector to pointer to its own data * \brief Access a vector component by index
* \return A pointer to the own data * \return X, Y, Z depending on index (0, 1, 2)
*
* \remark Access to index greather than 2 is undefined behavior
*/ */
template<typename T> template<typename T>
Vector3<T>::operator T* () T& Vector3<T>::operator[](std::size_t i)
{ {
return &x; NazaraAssert(i < 3, "index out of range");
return *(&x + i);
} }
/*! /*!
* \brief Converts vector to const pointer to its own data * \brief Access a vector component by index
* \return A constant pointer to the own data * \return X, Y, Z depending on index (0, 1, 2)
*
* \remark Access to index greather than 2 is undefined behavior
*/ */
template<typename T> template<typename T>
Vector3<T>::operator const T* () const T Vector3<T>::operator[](std::size_t i) const
{ {
return &x; NazaraAssert(i < 3, "index out of range");
return *(&x + i);
} }
/*! /*!

View File

@ -61,8 +61,8 @@ namespace Nz
String ToString() const; String ToString() const;
operator T* (); T& operator[](std::size_t i);
operator const T* () const; T operator[](std::size_t i) const;
const Vector4& operator+() const; const Vector4& operator+() const;
Vector4 operator-() const; Vector4 operator-() const;

View File

@ -494,29 +494,25 @@ namespace Nz
} }
/*! /*!
* \brief Converts vector to pointer to its own data * \brief Access a vector component by index
* \return A pointer to the own data * \return X, Y, Z depending on index (0, 1, 2)
*
* \remark Access to index greather than 3 is undefined behavior
*/ */
template<typename T> template<typename T>
Vector4<T>::operator T* () T& Vector4<T>::operator[](std::size_t i)
{ {
return &x; NazaraAssert(i < 4, "index out of range");
return *(&x + i);
} }
/*! /*!
* \brief Converts vector to const pointer to its own data * \brief Access a vector component by index
* \return A constant pointer to the own data * \return X, Y, Z depending on index (0, 1, 2)
*
* \remark Access to index greather than 3 is undefined behavior
*/ */
template<typename T> template<typename T>
Vector4<T>::operator const T* () const T Vector4<T>::operator[](std::size_t i) const
{ {
return &x; NazaraAssert(i < 4, "index out of range");
return *(&x + i);
} }
/*! /*!

View File

@ -166,8 +166,8 @@ namespace Nz
std::vector<MD2_Vertex> vertices(header.num_vertices); std::vector<MD2_Vertex> vertices(header.num_vertices);
Vector3f scale, translate; Vector3f scale, translate;
stream.Read(scale, sizeof(Vector3f)); stream.Read(&scale, sizeof(Vector3f));
stream.Read(translate, sizeof(Vector3f)); stream.Read(&translate, sizeof(Vector3f));
stream.Read(nullptr, 16*sizeof(char)); //< Frame name, unused stream.Read(nullptr, 16*sizeof(char)); //< Frame name, unused
stream.Read(vertices.data(), header.num_vertices*sizeof(MD2_Vertex)); stream.Read(vertices.data(), header.num_vertices*sizeof(MD2_Vertex));