Math: Add serialization specialization for all types

Former-commit-id: 7e45c50d3b4eabfc581736f290fc208592d3d46c
This commit is contained in:
Lynix
2016-03-06 01:54:13 +01:00
parent d6a436100c
commit e9d126b3a4
28 changed files with 699 additions and 80 deletions

View File

@@ -28,7 +28,6 @@ namespace Nz
* \param Y Y component
* \param Z Z component
*/
template<typename T>
Vector3<T>::Vector3(T X, T Y, T Z)
{
@@ -41,7 +40,6 @@ namespace Nz
* \param X X component
* \param vec vec.X = Y component and vec.y = Z component
*/
template<typename T>
Vector3<T>::Vector3(T X, const Vector2<T>& vec)
{
@@ -53,7 +51,6 @@ namespace Nz
*
* \param scale X component = Y component = Z component
*/
template<typename T>
Vector3<T>::Vector3(T scale)
{
@@ -65,7 +62,6 @@ namespace Nz
*
* \param vec[3] vec[0] is X component, vec[1] is Y component and vec[2] is Z component
*/
template<typename T>
Vector3<T>::Vector3(const T vec[3])
{
@@ -78,7 +74,6 @@ namespace Nz
* \param vec vec.X = X component and vec.y = Y component
* \param Z Z component
*/
template<typename T>
Vector3<T>::Vector3(const Vector2<T>& vec, T Z)
{
@@ -90,7 +85,6 @@ namespace Nz
*
* \param vec Vector of type U to convert to type T
*/
template<typename T>
template<typename U>
Vector3<T>::Vector3(const Vector3<U>& vec)
@@ -103,7 +97,6 @@ namespace Nz
*
* \param vec Vector4 where only the first three components are taken
*/
template<typename T>
Vector3<T>::Vector3(const Vector4<T>& vec)
{
@@ -118,7 +111,6 @@ namespace Nz
*
* \see DotProduct
*/
template<typename T>
T Vector3<T>::AbsDotProduct(const Vector3& vec) const
{
@@ -137,7 +129,6 @@ namespace Nz
*
* \see NormalizeAngle
*/
template<typename T>
T Vector3<T>::AngleBetween(const Vector3& vec) const
{
@@ -166,7 +157,6 @@ namespace Nz
*
* \see CrossProduct
*/
template<typename T>
Vector3<T> Vector3<T>::CrossProduct(const Vector3& vec) const
{
@@ -181,7 +171,6 @@ namespace Nz
*
* \see SquaredDistance
*/
template<typename T>
T Vector3<T>::Distance(const Vector3& vec) const
{
@@ -194,7 +183,6 @@ namespace Nz
*
* \param vec The other vector to measure the distance with
*/
template<typename T>
float Vector3<T>::Distancef(const Vector3& vec) const
{
@@ -209,7 +197,6 @@ namespace Nz
*
* \see AbsDotProduct, DotProduct
*/
template<typename T>
T Vector3<T>::DotProduct(const Vector3& vec) const
{
@@ -222,7 +209,6 @@ namespace Nz
*
* \see GetSquaredLength
*/
template<typename T>
T Vector3<T>::GetLength() const
{
@@ -233,7 +219,6 @@ namespace Nz
* \brief Calculates the length (magnitude) of the vector
* \return The length in float of the vector
*/
template<typename T>
float Vector3<T>::GetLengthf() const
{
@@ -250,7 +235,6 @@ namespace Nz
*
* \see Normalize
*/
template<typename T>
Vector3<T> Vector3<T>::GetNormal(T* length) const
{
@@ -266,7 +250,6 @@ namespace Nz
*
* \see GetLength
*/
template<typename T>
T Vector3<T>::GetSquaredLength() const
{
@@ -279,7 +262,6 @@ namespace Nz
*
* \see Backward
*/
template<typename T>
Vector3<T>& Vector3<T>::MakeBackward()
{
@@ -292,7 +274,6 @@ namespace Nz
*
* \see Down
*/
template<typename T>
Vector3<T>& Vector3<T>::MakeDown()
{
@@ -305,7 +286,6 @@ namespace Nz
*
* \see Forward
*/
template<typename T>
Vector3<T>& Vector3<T>::MakeForward()
{
@@ -318,7 +298,6 @@ namespace Nz
*
* \see Left
*/
template<typename T>
Vector3<T>& Vector3<T>::MakeLeft()
{
@@ -331,7 +310,6 @@ namespace Nz
*
* \see Right
*/
template<typename T>
Vector3<T>& Vector3<T>::MakeRight()
{
@@ -344,7 +322,6 @@ namespace Nz
*
* \see Unit
*/
template<typename T>
Vector3<T>& Vector3<T>::MakeUnit()
{
@@ -357,7 +334,6 @@ namespace Nz
*
* \see UnitX
*/
template<typename T>
Vector3<T>& Vector3<T>::MakeUnitX()
{
@@ -370,7 +346,6 @@ namespace Nz
*
* \see UnitY
*/
template<typename T>
Vector3<T>& Vector3<T>::MakeUnitY()
{
@@ -383,7 +358,6 @@ namespace Nz
*
* \see UnitZ
*/
template<typename T>
Vector3<T>& Vector3<T>::MakeUnitZ()
{
@@ -396,7 +370,6 @@ namespace Nz
*
* \see Up
*/
template<typename T>
Vector3<T>& Vector3<T>::MakeUp()
{
@@ -409,7 +382,6 @@ namespace Nz
*
* \see Zero
*/
template<typename T>
Vector3<T>& Vector3<T>::MakeZero()
{
@@ -424,7 +396,6 @@ namespace Nz
*
* \see Minimize
*/
template<typename T>
Vector3<T>& Vector3<T>::Maximize(const Vector3& vec)
{
@@ -448,7 +419,6 @@ namespace Nz
*
* \see Maximize
*/
template<typename T>
Vector3<T>& Vector3<T>::Minimize(const Vector3& vec)
{
@@ -474,7 +444,6 @@ namespace Nz
*
* \see GetNormal
*/
template<typename T>
Vector3<T>& Vector3<T>::Normalize(T* length)
{
@@ -501,7 +470,6 @@ namespace Nz
* \param Y Y component
* \param Z Z component
*/
template<typename T>
Vector3<T>& Vector3<T>::Set(T X, T Y, T Z)
{
@@ -518,7 +486,6 @@ namespace Nz
* \param X X component
* \param vec vec.X = Y component and vec.y = Z component
*/
template<typename T>
Vector3<T>& Vector3<T>::Set(T X, const Vector2<T>& vec)
{
@@ -535,7 +502,6 @@ namespace Nz
*
* \param scale X component = Y component = Z component
*/
template<typename T>
Vector3<T>& Vector3<T>::Set(T scale)
{
@@ -552,7 +518,6 @@ namespace Nz
*
* \param vec[3] vec[0] is X component, vec[1] is Y component and vec[2] is Z component
*/
template<typename T>
Vector3<T>& Vector3<T>::Set(const T vec[3])
{
@@ -567,7 +532,6 @@ namespace Nz
* \param vec vec.X = X component and vec.y = Y component
* \param Z Z component
*/
template<typename T>
Vector3<T>& Vector3<T>::Set(const Vector2<T>& vec, T Z)
{
@@ -584,7 +548,6 @@ namespace Nz
*
* \param vec The other vector
*/
template<typename T>
Vector3<T>& Vector3<T>::Set(const Vector3& vec)
{
@@ -599,7 +562,6 @@ namespace Nz
*
* \param vec Vector of type U to convert its components
*/
template<typename T>
template<typename U>
Vector3<T>& Vector3<T>::Set(const Vector3<U>& vec)
@@ -617,7 +579,6 @@ namespace Nz
*
* \param vec Vector4 where only the first three components are taken
*/
template<typename T>
Vector3<T>& Vector3<T>::Set(const Vector4<T>& vec)
{
@@ -636,7 +597,6 @@ namespace Nz
*
* \see Distance
*/
template<typename T>
T Vector3<T>::SquaredDistance(const Vector3& vec) const
{
@@ -647,7 +607,6 @@ namespace Nz
* \brief Gives a string representation
* \return A string representation of the object: "Vector3(x, y, z)"
*/
template<typename T>
String Vector3<T>::ToString() const
{
@@ -662,7 +621,6 @@ namespace Nz
*
* \remark Access to index greather than 2 is undefined behavior
*/
template<typename T>
Vector3<T>::operator T* ()
{
@@ -675,7 +633,6 @@ namespace Nz
*
* \remark Access to index greather than 2 is undefined behavior
*/
template<typename T>
Vector3<T>::operator const T* () const
{
@@ -686,7 +643,6 @@ namespace Nz
* \brief Helps to represent the sign of the vector
* \return A constant reference to this vector
*/
template<typename T>
const Vector3<T>& Vector3<T>::operator+() const
{
@@ -697,7 +653,6 @@ namespace Nz
* \brief Negates the components of the vector
* \return A constant reference to this vector with negate components
*/
template<typename T>
Vector3<T> Vector3<T>::operator-() const
{
@@ -710,7 +665,6 @@ namespace Nz
*
* \param vec The other vector to add components with
*/
template<typename T>
Vector3<T> Vector3<T>::operator+(const Vector3& vec) const
{
@@ -723,7 +677,6 @@ namespace Nz
*
* \param vec The other vector to substract components with
*/
template<typename T>
Vector3<T> Vector3<T>::operator-(const Vector3& vec) const
{
@@ -736,7 +689,6 @@ namespace Nz
*
* \param vec The other vector to multiply components with
*/
template<typename T>
Vector3<T> Vector3<T>::operator*(const Vector3& vec) const
{
@@ -749,7 +701,6 @@ namespace Nz
*
* \param scale The scalar to multiply components with
*/
template<typename T>
Vector3<T> Vector3<T>::operator*(T scale) const
{
@@ -765,7 +716,6 @@ namespace Nz
* \remark Produce a NazaraError if one of the vec components is null with NAZARA_MATH_SAFE defined
* \throw std::domain_error if NAZARA_MATH_SAFE is defined and one of the vec components is null
*/
template<typename T>
Vector3<T> Vector3<T>::operator/(const Vector3& vec) const
{
@@ -791,7 +741,6 @@ namespace Nz
* \remark Produce a NazaraError if scale is null with NAZARA_MATH_SAFE defined
* \throw std::domain_error if NAZARA_MATH_SAFE is defined and scale is null
*/
template<typename T>
Vector3<T> Vector3<T>::operator/(T scale) const
{
@@ -814,7 +763,6 @@ namespace Nz
*
* \param vec The other vector to add components with
*/
template<typename T>
Vector3<T>& Vector3<T>::operator+=(const Vector3& vec)
{
@@ -831,7 +779,6 @@ namespace Nz
*
* \param vec The other vector to substract components with
*/
template<typename T>
Vector3<T>& Vector3<T>::operator-=(const Vector3& vec)
{
@@ -848,7 +795,6 @@ namespace Nz
*
* \param vec The other vector to multiply components with
*/
template<typename T>
Vector3<T>& Vector3<T>::operator*=(const Vector3& vec)
{
@@ -865,7 +811,6 @@ namespace Nz
*
* \param vec The other vector to multiply components with
*/
template<typename T>
Vector3<T>& Vector3<T>::operator*=(T scale)
{
@@ -885,7 +830,6 @@ namespace Nz
* \remark Produce a NazaraError if one of the vec components is null with NAZARA_MATH_SAFE defined
* \throw std::domain_error if NAZARA_MATH_SAFE is defined and one of the vec components is null
*/
template<typename T>
Vector3<T>& Vector3<T>::operator/=(const Vector3& vec)
{
@@ -913,7 +857,6 @@ namespace Nz
* \remark Produce a NazaraError if scale is null with NAZARA_MATH_SAFE defined
* \throw std::domain_error if NAZARA_MATH_SAFE is defined and scale is null
*/
template<typename T>
Vector3<T>& Vector3<T>::operator/=(T scale)
{
@@ -938,7 +881,6 @@ namespace Nz
*
* \param vec Other vector to compare with
*/
template<typename T>
bool Vector3<T>::operator==(const Vector3& vec) const
{
@@ -953,7 +895,6 @@ namespace Nz
*
* \param vec Other vector to compare with
*/
template<typename T>
bool Vector3<T>::operator!=(const Vector3& vec) const
{
@@ -966,7 +907,6 @@ namespace Nz
*
* \param vec Other vector to compare with
*/
template<typename T>
bool Vector3<T>::operator<(const Vector3& vec) const
{
@@ -987,7 +927,6 @@ namespace Nz
*
* \param vec Other vector to compare with
*/
template<typename T>
bool Vector3<T>::operator<=(const Vector3& vec) const
{
@@ -1008,7 +947,6 @@ namespace Nz
*
* \param vec Other vector to compare with
*/
template<typename T>
bool Vector3<T>::operator>(const Vector3& vec) const
{
@@ -1021,7 +959,6 @@ namespace Nz
*
* \param vec Other vector to compare with
*/
template<typename T>
bool Vector3<T>::operator>=(const Vector3& vec) const
{
@@ -1037,7 +974,6 @@ namespace Nz
*
* \see CrossProduct
*/
template<typename T>
Vector3<T> Vector3<T>::CrossProduct(const Vector3& vec1, const Vector3& vec2)
{
@@ -1053,7 +989,6 @@ namespace Nz
*
* \see AbsDotProduct, DotProduct
*/
template<typename T>
T Vector3<T>::DotProduct(const Vector3& vec1, const Vector3& vec2)
{
@@ -1066,7 +1001,6 @@ namespace Nz
*
* \see MakeBackward
*/
template<typename T>
Vector3<T> Vector3<T>::Backward()
{
@@ -1082,7 +1016,6 @@ namespace Nz
*
* \see MakeDown
*/
template<typename T>
Vector3<T> Vector3<T>::Down()
{
@@ -1098,7 +1031,6 @@ namespace Nz
*
* \see Forward
*/
template<typename T>
Vector3<T> Vector3<T>::Forward()
{
@@ -1114,7 +1046,6 @@ namespace Nz
*
* \see MakeLeft
*/
template<typename T>
Vector3<T> Vector3<T>::Left()
{
@@ -1136,7 +1067,6 @@ namespace Nz
*
* \see Lerp
*/
template<typename T>
Vector3<T> Vector3<T>::Lerp(const Vector3& from, const Vector3& to, T interpolation)
{
@@ -1158,7 +1088,6 @@ namespace Nz
*
* \see GetNormal
*/
template<typename T>
Vector3<T> Vector3<T>::Normalize(const Vector3& vec)
{
@@ -1171,7 +1100,6 @@ namespace Nz
*
* \see MakeRight
*/
template<typename T>
Vector3<T> Vector3<T>::Right()
{
@@ -1187,7 +1115,6 @@ namespace Nz
*
* \see MakeUnit
*/
template<typename T>
Vector3<T> Vector3<T>::Unit()
{
@@ -1203,7 +1130,6 @@ namespace Nz
*
* \see MakeUnitX
*/
template<typename T>
Vector3<T> Vector3<T>::UnitX()
{
@@ -1219,7 +1145,6 @@ namespace Nz
*
* \see MakeUnitY
*/
template<typename T>
Vector3<T> Vector3<T>::UnitY()
{
@@ -1235,7 +1160,6 @@ namespace Nz
*
* \see MakeUnitZ
*/
template<typename T>
Vector3<T> Vector3<T>::UnitZ()
{
@@ -1251,7 +1175,6 @@ namespace Nz
*
* \see MakeUp
*/
template<typename T>
Vector3<T> Vector3<T>::Up()
{
@@ -1267,7 +1190,6 @@ namespace Nz
*
* \see MakeZero
*/
template<typename T>
Vector3<T> Vector3<T>::Zero()
{
@@ -1276,6 +1198,50 @@ namespace Nz
return vector;
}
/*!
* \brief Serializes a Vector3
* \return true if successfully serialized
*
* \param context Serialization context
* \param vector Input Vector3
*/
template<typename T>
bool Serialize(SerializationContext& context, const Vector3<T>& vector)
{
if (!Serialize(context, vector.x))
return false;
if (!Serialize(context, vector.y))
return false;
if (!Serialize(context, vector.z))
return false;
return true;
}
/*!
* \brief Unserializes a Vector3
* \return true if successfully unserialized
*
* \param context Serialization context
* \param vector Output Vector3
*/
template<typename T>
bool Unserialize(SerializationContext& context, Vector3<T>* vector)
{
if (!Unserialize(context, &vector->x))
return false;
if (!Unserialize(context, &vector->y))
return false;
if (!Unserialize(context, &vector->z))
return false;
return true;
}
}
/*!