Removed dependency on boost::operators
This commit is contained in:
parent
22fd38b255
commit
2745d52dc5
@ -25,21 +25,12 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
|
||||||
#include "boost/cstdint.hpp"
|
#include "boost/cstdint.hpp"
|
||||||
#include <boost/operators.hpp>
|
|
||||||
|
|
||||||
namespace PolyVox
|
namespace PolyVox
|
||||||
{
|
{
|
||||||
//template <boost::uint32_t Size, typename Type> class Matrix; //Forward declaration
|
|
||||||
|
|
||||||
///Represents a vector in space.
|
///Represents a vector in space.
|
||||||
template <boost::uint32_t Size, typename Type>
|
template <boost::uint32_t Size, typename Type>
|
||||||
class Vector
|
class Vector
|
||||||
: boost::addable< Vector<Size,Type> // Vector + Vector
|
|
||||||
, boost::subtractable< Vector<Size,Type> // Vector - Vector
|
|
||||||
, boost::dividable2< Vector<Size,Type>, Type // Vector / Type
|
|
||||||
, boost::multipliable2< Vector<Size,Type>, Type // Vector * Type, Type * Vector
|
|
||||||
, boost::equality_comparable1< Vector<Size,Type> // Vector != Vector
|
|
||||||
> > > > >
|
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
///Constructor.
|
///Constructor.
|
||||||
@ -113,24 +104,38 @@ namespace PolyVox
|
|||||||
};
|
};
|
||||||
|
|
||||||
//Non-member overloaded operators.
|
//Non-member overloaded operators.
|
||||||
//!Multiplication operator.
|
///Addition operator.
|
||||||
//template <boost::uint32_t Size,typename Type>
|
template <boost::uint32_t Size,typename Type>
|
||||||
//Vector<Size,Type> operator*(const Vector<Size,Type>& lhs, const Matrix<Size,Type>& rhs) throw();
|
Vector<Size,Type> operator+(const Vector<Size,Type>& lhs, const Vector<Size,Type>& rhs) throw();
|
||||||
//!Multiplication operator.
|
///Subtraction operator.
|
||||||
//template <boost::uint32_t Size,typename Type>
|
template <boost::uint32_t Size,typename Type>
|
||||||
//Vector<Size,Type> operator*(const Matrix<Size,Type>& lhs, const Vector<Size,Type>& rhs) throw();
|
Vector<Size,Type> operator-(const Vector<Size,Type>& lhs, const Vector<Size,Type>& rhs) throw();
|
||||||
|
///Multiplication operator.
|
||||||
|
template <boost::uint32_t Size,typename Type>
|
||||||
|
Vector<Size,Type> operator*(const Vector<Size,Type>& lhs, const Type& rhs) throw();
|
||||||
|
///Division operator.
|
||||||
|
template <boost::uint32_t Size,typename Type>
|
||||||
|
Vector<Size,Type> operator/(const Vector<Size,Type>& lhs, const Type& rhs) throw();
|
||||||
///Stream insertion operator.
|
///Stream insertion operator.
|
||||||
template <boost::uint32_t Size, typename Type>
|
template <boost::uint32_t Size, typename Type>
|
||||||
std::ostream& operator<<(std::ostream& os, const Vector<Size,Type>& vector) throw();
|
std::ostream& operator<<(std::ostream& os, const Vector<Size,Type>& vector) throw();
|
||||||
|
|
||||||
//Some handy typedefs
|
//Some handy typedefs
|
||||||
|
///A 3D Vector of floats.
|
||||||
typedef Vector<3,float> Vector3DFloat;
|
typedef Vector<3,float> Vector3DFloat;
|
||||||
|
///A 3D Vector of doubles.
|
||||||
typedef Vector<3,double> Vector3DDouble;
|
typedef Vector<3,double> Vector3DDouble;
|
||||||
|
///A 3D Vector of signed 8-bit values.
|
||||||
typedef Vector<3,boost::int8_t> Vector3DInt8;
|
typedef Vector<3,boost::int8_t> Vector3DInt8;
|
||||||
|
///A 3D Vector of unsigned 8-bit values.
|
||||||
typedef Vector<3,boost::uint8_t> Vector3DUint8;
|
typedef Vector<3,boost::uint8_t> Vector3DUint8;
|
||||||
|
///A 3D Vector of signed 16-bit values.
|
||||||
typedef Vector<3,boost::int16_t> Vector3DInt16;
|
typedef Vector<3,boost::int16_t> Vector3DInt16;
|
||||||
|
///A 3D Vector of unsigned 16-bit values.
|
||||||
typedef Vector<3,boost::uint16_t> Vector3DUint16;
|
typedef Vector<3,boost::uint16_t> Vector3DUint16;
|
||||||
|
///A 3D Vector of signed 32-bit values.
|
||||||
typedef Vector<3,boost::int32_t> Vector3DInt32;
|
typedef Vector<3,boost::int32_t> Vector3DInt32;
|
||||||
|
///A 3D Vector of unsigned 32-bit values.
|
||||||
typedef Vector<3,boost::uint32_t> Vector3DUint32;
|
typedef Vector<3,boost::uint32_t> Vector3DUint32;
|
||||||
|
|
||||||
|
|
||||||
|
@ -196,21 +196,6 @@ namespace PolyVox
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
Subtraction operator subtracts corresponding elements of one Vector from the other.
|
|
||||||
\param rhs Vector to subtract
|
|
||||||
\return The resulting Vector.
|
|
||||||
*/
|
|
||||||
template <boost::uint32_t Size, typename Type>
|
|
||||||
inline Vector<Size, Type>& Vector<Size, Type>::operator-=(const Vector<Size, Type>& rhs) throw()
|
|
||||||
{
|
|
||||||
for(boost::uint32_t ct = 0; ct < Size; ++ct)
|
|
||||||
{
|
|
||||||
m_tElements[ct] -= rhs.m_tElements[ct];
|
|
||||||
}
|
|
||||||
return *this;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Addition operator adds corresponding elements of the two Vectors.
|
Addition operator adds corresponding elements of the two Vectors.
|
||||||
\param rhs Vector to add
|
\param rhs Vector to add
|
||||||
@ -226,6 +211,21 @@ namespace PolyVox
|
|||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Subtraction operator subtracts corresponding elements of one Vector from the other.
|
||||||
|
\param rhs Vector to subtract
|
||||||
|
\return The resulting Vector.
|
||||||
|
*/
|
||||||
|
template <boost::uint32_t Size, typename Type>
|
||||||
|
inline Vector<Size, Type>& Vector<Size, Type>::operator-=(const Vector<Size, Type>& rhs) throw()
|
||||||
|
{
|
||||||
|
for(boost::uint32_t ct = 0; ct < Size; ++ct)
|
||||||
|
{
|
||||||
|
m_tElements[ct] -= rhs.m_tElements[ct];
|
||||||
|
}
|
||||||
|
return *this;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Multiplication operator multiplies each element of the Vector by a number.
|
Multiplication operator multiplies each element of the Vector by a number.
|
||||||
\param rhs the number the Vector is multiplied by.
|
\param rhs the number the Vector is multiplied by.
|
||||||
@ -256,56 +256,6 @@ namespace PolyVox
|
|||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
Multiplies a Vector and a Matrix.
|
|
||||||
|
|
||||||
NOTE: Although the Vector class does not distinguish between row and column vectors, the Vector
|
|
||||||
must <i>conceptually</i> be in <i>row</i> form for this operation to make sense.
|
|
||||||
\param lhs The Vector to be multiplied
|
|
||||||
\param rhs The Matrix to multiply by.
|
|
||||||
\return The resulting Vector
|
|
||||||
*/
|
|
||||||
/*template <boost::uint32_t Size,typename Type>
|
|
||||||
Vector<Size,Type> operator*(const Vector<Size,Type>& lhs, const Matrix<Size,Type>& rhs) throw()
|
|
||||||
{
|
|
||||||
Type tZero = static_cast<Type>(0);
|
|
||||||
Vector<Size,Type> result(tZero,tZero,tZero);
|
|
||||||
for(boost::uint32_t colCt = 0; colCt < Size; ++colCt)
|
|
||||||
{
|
|
||||||
for(boost::uint32_t rowCt = 0; rowCt < Size; ++rowCt)
|
|
||||||
{
|
|
||||||
//result(colCt) += lhs(rowCt) * rhs(rowCt, colCt);
|
|
||||||
result.set(colCt, result(colCt) + (lhs(rowCt) * rhs(rowCt, colCt)));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}*/
|
|
||||||
|
|
||||||
/**
|
|
||||||
Multiplies a Matrix and a Vector.
|
|
||||||
|
|
||||||
NOTE: Although the Vector class does not distinguish between row and column vectors, the Vector
|
|
||||||
must <i>conceptually</i> be in <i>column</i> form for this operation to make sense.
|
|
||||||
\param lhs The Matrix to be multiplied
|
|
||||||
\param rhs The Vector to multiply by.
|
|
||||||
\return The resulting Vector
|
|
||||||
*/
|
|
||||||
/*template <boost::uint32_t Size,typename Type>
|
|
||||||
Vector<Size,Type> operator*(const Matrix<Size,Type>& lhs, const Vector<Size,Type>& rhs) throw()
|
|
||||||
{
|
|
||||||
Type tZero = static_cast<Type>(0);
|
|
||||||
Vector<Size,Type> result(tZero,tZero,tZero);
|
|
||||||
for(boost::uint32_t rowCt = 0; rowCt < Size; ++rowCt)
|
|
||||||
{
|
|
||||||
for(boost::uint32_t colCt = 0; colCt < Size; ++colCt)
|
|
||||||
{
|
|
||||||
//result(rowCt) += lhs(rowCt,colCt) * rhs(colCt);
|
|
||||||
result.set(rowCt, result(rowCt) + (lhs(rowCt,colCt) * rhs(colCt)));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return result;
|
|
||||||
}*/
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Enables the Vector to be used intuitively with output streams such as cout.
|
Enables the Vector to be used intuitively with output streams such as cout.
|
||||||
\param os The output stream to write to.
|
\param os The output stream to write to.
|
||||||
@ -525,4 +475,60 @@ namespace PolyVox
|
|||||||
m_tElements[ct] /= static_cast<Type>(length);
|
m_tElements[ct] /= static_cast<Type>(length);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Addition operator adds corresponding elements of the two Vectors.
|
||||||
|
\param lhs Vector to add to.
|
||||||
|
\param rhs Vector to add.
|
||||||
|
\return The resulting Vector.
|
||||||
|
*/
|
||||||
|
template <boost::uint32_t Size,typename Type>
|
||||||
|
Vector<Size,Type> operator+(const Vector<Size,Type>& lhs, const Vector<Size,Type>& rhs) throw()
|
||||||
|
{
|
||||||
|
Vector<Size,Type> result = lhs;
|
||||||
|
result += rhs;
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Subtraction operator subtracts corresponding elements of one Vector from the other.
|
||||||
|
\param lhs Vector to subtract from.
|
||||||
|
\param rhs Vector to subtract.
|
||||||
|
\return The resulting Vector.
|
||||||
|
*/
|
||||||
|
template <boost::uint32_t Size,typename Type>
|
||||||
|
Vector<Size,Type> operator-(const Vector<Size,Type>& lhs, const Vector<Size,Type>& rhs) throw()
|
||||||
|
{
|
||||||
|
Vector<Size,Type> result = lhs;
|
||||||
|
result -= rhs;
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Multiplication operator multiplies each element of the Vector by a number.
|
||||||
|
\param lhs the Vector to multiply.
|
||||||
|
\param rhs the number the Vector is multiplied by.
|
||||||
|
\return The resulting Vector.
|
||||||
|
*/
|
||||||
|
template <boost::uint32_t Size,typename Type>
|
||||||
|
Vector<Size,Type> operator*(const Vector<Size,Type>& lhs, const Type& rhs) throw()
|
||||||
|
{
|
||||||
|
Vector<Size,Type> result = lhs;
|
||||||
|
result *= rhs;
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Division operator divides each element of the Vector by a number.
|
||||||
|
\param lhs the Vector to divide.
|
||||||
|
\param rhs the number the Vector is divided by.
|
||||||
|
\return The resulting Vector.
|
||||||
|
*/
|
||||||
|
template <boost::uint32_t Size,typename Type>
|
||||||
|
Vector<Size,Type> operator/(const Vector<Size,Type>& lhs, const Type& rhs) throw()
|
||||||
|
{
|
||||||
|
Vector<Size,Type> result = lhs;
|
||||||
|
result /= rhs;
|
||||||
|
return result;
|
||||||
|
}
|
||||||
}//namespace Thermite
|
}//namespace Thermite
|
||||||
|
@ -383,7 +383,7 @@ namespace PolyVox
|
|||||||
volIter.setPosition(static_cast<uint16_t>(posX),static_cast<uint16_t>(posY),static_cast<uint16_t>(posZ+1.0));
|
volIter.setPosition(static_cast<uint16_t>(posX),static_cast<uint16_t>(posY),static_cast<uint16_t>(posZ+1.0));
|
||||||
}
|
}
|
||||||
const Vector3DFloat gradCeil = computeSobelGradient(volIter);
|
const Vector3DFloat gradCeil = computeSobelGradient(volIter);
|
||||||
result = ((gradFloor + gradCeil) * -1.0);
|
result = ((gradFloor + gradCeil) * -1.0f);
|
||||||
if(result.lengthSquared() < 0.0001)
|
if(result.lengthSquared() < 0.0001)
|
||||||
{
|
{
|
||||||
//Operation failed - fall back on simple gradient estimation
|
//Operation failed - fall back on simple gradient estimation
|
||||||
@ -407,7 +407,7 @@ namespace PolyVox
|
|||||||
volIter.setPosition(static_cast<uint16_t>(posX),static_cast<uint16_t>(posY),static_cast<uint16_t>(posZ+1.0));
|
volIter.setPosition(static_cast<uint16_t>(posX),static_cast<uint16_t>(posY),static_cast<uint16_t>(posZ+1.0));
|
||||||
}
|
}
|
||||||
const Vector3DFloat gradCeil = computeCentralDifferenceGradient(volIter);
|
const Vector3DFloat gradCeil = computeCentralDifferenceGradient(volIter);
|
||||||
result = ((gradFloor + gradCeil) * -1.0);
|
result = ((gradFloor + gradCeil) * -1.0f);
|
||||||
if(result.lengthSquared() < 0.0001)
|
if(result.lengthSquared() < 0.0001)
|
||||||
{
|
{
|
||||||
//Operation failed - fall back on simple gradient estimation
|
//Operation failed - fall back on simple gradient estimation
|
||||||
@ -785,7 +785,7 @@ namespace PolyVox
|
|||||||
volIter.setPosition(static_cast<uint16_t>(posX),static_cast<uint16_t>(posY),static_cast<uint16_t>(posZ+1.0));
|
volIter.setPosition(static_cast<uint16_t>(posX),static_cast<uint16_t>(posY),static_cast<uint16_t>(posZ+1.0));
|
||||||
}
|
}
|
||||||
const Vector3DFloat gradCeil = computeSobelGradient(volIter);
|
const Vector3DFloat gradCeil = computeSobelGradient(volIter);
|
||||||
result = ((gradFloor + gradCeil) * -1.0);
|
result = ((gradFloor + gradCeil) * -1.0f);
|
||||||
if(result.lengthSquared() < 0.0001)
|
if(result.lengthSquared() < 0.0001)
|
||||||
{
|
{
|
||||||
//Operation failed - fall back on simple gradient estimation
|
//Operation failed - fall back on simple gradient estimation
|
||||||
@ -809,7 +809,7 @@ namespace PolyVox
|
|||||||
volIter.setPosition(static_cast<uint16_t>(posX),static_cast<uint16_t>(posY),static_cast<uint16_t>(posZ+1.0));
|
volIter.setPosition(static_cast<uint16_t>(posX),static_cast<uint16_t>(posY),static_cast<uint16_t>(posZ+1.0));
|
||||||
}
|
}
|
||||||
const Vector3DFloat gradCeil = computeSmoothCentralDifferenceGradient(volIter);
|
const Vector3DFloat gradCeil = computeSmoothCentralDifferenceGradient(volIter);
|
||||||
result = ((gradFloor + gradCeil) * -1.0);
|
result = ((gradFloor + gradCeil) * -1.0f);
|
||||||
if(result.lengthSquared() < 0.0001)
|
if(result.lengthSquared() < 0.0001)
|
||||||
{
|
{
|
||||||
//Operation failed - fall back on simple gradient estimation
|
//Operation failed - fall back on simple gradient estimation
|
||||||
|
Loading…
x
Reference in New Issue
Block a user