Removed value_type and size_type

This commit is contained in:
Christophe Riccio
2013-09-08 02:30:16 +02:00
parent d3f0262a27
commit 0ff1026dbb
42 changed files with 412 additions and 462 deletions

View File

@@ -32,14 +32,14 @@ namespace glm
GLM_FUNC_QUALIFIER genType row
(
genType const & m,
typename genType::size_type const & index,
int const & index,
typename genType::row_type const & x
)
{
assert(index < m.col_size());
assert(index >= 0 && index < m.col_size());
genType Result = m;
for(typename genType::size_type i = 0; i < genType::row_size(); ++i)
for(int i = 0; i < genType::row_size(); ++i)
Result[i][index] = x[i];
return Result;
}
@@ -48,13 +48,13 @@ namespace glm
GLM_FUNC_QUALIFIER typename genType::row_type row
(
genType const & m,
typename genType::size_type const & index
int const & index
)
{
assert(index < m.col_size());
assert(index >= 0 && index < m.col_size());
typename genType::row_type Result;
for(typename genType::size_type i = 0; i < genType::row_size(); ++i)
for(int i = 0; i < genType::row_size(); ++i)
Result[i] = m[i][index];
return Result;
}
@@ -63,11 +63,11 @@ namespace glm
GLM_FUNC_QUALIFIER genType column
(
genType const & m,
typename genType::size_type const & index,
int const & index,
typename genType::col_type const & x
)
{
assert(index < m.row_size());
assert(index >= 0 && index < m.row_size());
genType Result = m;
Result[index] = x;
@@ -78,10 +78,10 @@ namespace glm
GLM_FUNC_QUALIFIER typename genType::col_type column
(
genType const & m,
typename genType::size_type const & index
int const & index
)
{
assert(index < m.row_size());
assert(index >= 0 && index < m.row_size());
return m[index];
}

View File

@@ -52,18 +52,16 @@ namespace glm{
namespace detail
{
template <typename T, precision P>
struct tquat// : public genType<T, tquat>
struct tquat
{
enum ctor{null};
typedef T value_type;
typedef std::size_t size_type;
typedef tvec4<bool, P> bool_type;
public:
value_type x, y, z, w;
T x, y, z, w;
GLM_FUNC_DECL size_type length() const;
GLM_FUNC_DECL int length() const;
// Constructors
tquat();
@@ -90,8 +88,8 @@ namespace detail
tmat4x4<T, P> const & m);
// Accesses
GLM_FUNC_DECL value_type & operator[](size_type i);
GLM_FUNC_DECL T const & operator[](size_type i) const;
GLM_FUNC_DECL T & operator[](int i);
GLM_FUNC_DECL T const & operator[](int i) const;
// Operators
GLM_FUNC_DECL tquat<T, P> & operator*=(T const & s);

View File

@@ -32,7 +32,7 @@ namespace glm{
namespace detail
{
template <typename T, precision P>
GLM_FUNC_QUALIFIER typename tquat<T, P>::size_type tquat<T, P>::length() const
GLM_FUNC_QUALIFIER int tquat<T, P>::length() const
{
return 4;
}
@@ -110,8 +110,8 @@ namespace detail
tvec3<T, P> const & eulerAngle
)
{
tvec3<T, P> c = glm::cos(eulerAngle * value_type(0.5));
tvec3<T, P> s = glm::sin(eulerAngle * value_type(0.5));
tvec3<T, P> c = glm::cos(eulerAngle * T(0.5));
tvec3<T, P> s = glm::sin(eulerAngle * T(0.5));
this->w = c.x * c.y * c.z + s.x * s.y * s.z;
this->x = s.x * c.y * c.z - c.x * s.y * s.z;
@@ -141,14 +141,16 @@ namespace detail
// tquat<T, P> accesses
template <typename T, precision P>
GLM_FUNC_QUALIFIER T & tquat<T, P>::operator[] (size_type i)
GLM_FUNC_QUALIFIER T & tquat<T, P>::operator[] (int i)
{
assert(i >= 0 && i < this->length());
return (&x)[i];
}
template <typename T, precision P>
GLM_FUNC_QUALIFIER T const & tquat<T, P>::operator[] (size_type i) const
GLM_FUNC_QUALIFIER T const & tquat<T, P>::operator[] (int i) const
{
assert(i >= 0 && i < this->length());
return (&x)[i];
}
@@ -229,7 +231,7 @@ namespace detail
detail::tvec3<T, P> const & v
)
{
typename detail::tquat<T, P>::value_type Two(2);
T Two(2);
detail::tvec3<T, P> uv, uuv;
detail::tvec3<T, P> QuatVector(q.x, q.y, q.z);
@@ -344,10 +346,10 @@ namespace detail
detail::tquat<T, P> const & q
)
{
typename detail::tquat<T, P>::value_type len = length(q);
if(len <= typename detail::tquat<T, P>::value_type(0)) // Problem
T len = length(q);
if(len <= T(0)) // Problem
return detail::tquat<T, P>(1, 0, 0, 0);
typename detail::tquat<T, P>::value_type oneOverLen = typename detail::tquat<T, P>::value_type(1) / len;
T oneOverLen = T(1) / len;
return detail::tquat<T, P>(q.w * oneOverLen, q.x * oneOverLen, q.y * oneOverLen, q.z * oneOverLen);
}
@@ -384,12 +386,12 @@ namespace detail
typename detail::tquat<T, P>::T const & a
)
{
if(a <= typename detail::tquat<T, P>::value_type(0)) return x;
if(a >= typename detail::tquat<T, P>::value_type(1)) return y;
if(a <= T(0)) return x;
if(a >= T(1)) return y;
float fCos = dot(x, y);
detail::tquat<T, P> y2(y); //BUG!!! tquat<T, P> y2;
if(fCos < typename detail::tquat<T, P>::value_type(0))
if(fCos < T(0))
{
y2 = -y;
fCos = -fCos;
@@ -397,18 +399,18 @@ namespace detail
//if(fCos > 1.0f) // problem
float k0, k1;
if(fCos > typename detail::tquat<T, P>::value_type(0.9999))
if(fCos > T(0.9999))
{
k0 = typename detail::tquat<T, P>::value_type(1) - a;
k1 = typename detail::tquat<T, P>::value_type(0) + a; //BUG!!! 1.0f + a;
k0 = T(1) - a;
k1 = T(0) + a; //BUG!!! 1.0f + a;
}
else
{
typename detail::tquat<T, P>::value_type fSin = sqrt(T(1) - fCos * fCos);
typename detail::tquat<T, P>::value_type fAngle = atan(fSin, fCos);
typename detail::tquat<T, P>::value_type fOneOverSin = static_cast<T>(1) / fSin;
k0 = sin((typename detail::tquat<T, P>::value_type(1) - a) * fAngle) * fOneOverSin;
k1 = sin((typename detail::tquat<T, P>::value_type(0) + a) * fAngle) * fOneOverSin;
T fSin = sqrt(T(1) - fCos * fCos);
T fAngle = atan(fSin, fCos);
T fOneOverSin = static_cast<T>(1) / fSin;
k0 = sin((T(1) - a) * fAngle) * fOneOverSin;
k1 = sin((T(0) + a) * fAngle) * fOneOverSin;
}
return detail::tquat<T, P>(
@@ -566,7 +568,7 @@ namespace detail
detail::tvec3<T, P> Tmp = v;
// Axis of rotation must be normalised
typename detail::tquat<T, P>::value_type len = glm::length(Tmp);
T len = glm::length(Tmp);
if(abs(len - T(1)) > T(0.001))
{
T oneOverLen = static_cast<T>(1) / len;
@@ -576,11 +578,11 @@ namespace detail
}
#ifdef GLM_FORCE_RADIANS
typename detail::tquat<T, P>::value_type const AngleRad(angle);
T const AngleRad(angle);
#else
typename detail::tquat<T, P>::value_type const AngleRad = radians(angle);
T const AngleRad = radians(angle);
#endif
typename detail::tquat<T, P>::value_type const Sin = sin(AngleRad * T(0.5));
T const Sin = sin(AngleRad * T(0.5));
return q * detail::tquat<T, P>(cos(AngleRad * T(0.5)), Tmp.x * Sin, Tmp.y * Sin, Tmp.z * Sin);
//return gtc::quaternion::cross(q, detail::tquat<T, P>(cos(AngleRad * T(0.5)), Tmp.x * fSin, Tmp.y * fSin, Tmp.z * fSin));
@@ -670,13 +672,13 @@ namespace detail
detail::tmat3x3<T, P> const & m
)
{
typename detail::tquat<T, P>::value_type fourXSquaredMinus1 = m[0][0] - m[1][1] - m[2][2];
typename detail::tquat<T, P>::value_type fourYSquaredMinus1 = m[1][1] - m[0][0] - m[2][2];
typename detail::tquat<T, P>::value_type fourZSquaredMinus1 = m[2][2] - m[0][0] - m[1][1];
typename detail::tquat<T, P>::value_type fourWSquaredMinus1 = m[0][0] + m[1][1] + m[2][2];
T fourXSquaredMinus1 = m[0][0] - m[1][1] - m[2][2];
T fourYSquaredMinus1 = m[1][1] - m[0][0] - m[2][2];
T fourZSquaredMinus1 = m[2][2] - m[0][0] - m[1][1];
T fourWSquaredMinus1 = m[0][0] + m[1][1] + m[2][2];
int biggestIndex = 0;
typename detail::tquat<T, P>::value_type fourBiggestSquaredMinus1 = fourWSquaredMinus1;
T fourBiggestSquaredMinus1 = fourWSquaredMinus1;
if(fourXSquaredMinus1 > fourBiggestSquaredMinus1)
{
fourBiggestSquaredMinus1 = fourXSquaredMinus1;
@@ -693,8 +695,8 @@ namespace detail
biggestIndex = 3;
}
typename detail::tquat<T, P>::value_type biggestVal = sqrt(fourBiggestSquaredMinus1 + T(1)) * T(0.5);
typename detail::tquat<T, P>::value_type mult = static_cast<T>(0.25) / biggestVal;
T biggestVal = sqrt(fourBiggestSquaredMinus1 + T(1)) * T(0.5);
T mult = static_cast<T>(0.25) / biggestVal;
detail::tquat<T, P> Result;
switch(biggestIndex)
@@ -797,7 +799,7 @@ namespace detail
)
{
typename detail::tquat<T, P>::bool_type Result;
for(typename detail::tquat<T, P>::size_type i = 0; i < x.length(); ++i)
for(int i = 0; i < x.length(); ++i)
Result[i] = x[i] < y[i];
return Result;
@@ -811,7 +813,7 @@ namespace detail
)
{
typename detail::tquat<T, P>::bool_type Result;
for(typename detail::tquat<T, P>::size_type i = 0; i < x.length(); ++i)
for(int i = 0; i < x.length(); ++i)
Result[i] = x[i] <= y[i];
return Result;
}
@@ -824,7 +826,7 @@ namespace detail
)
{
typename detail::tquat<T, P>::bool_type Result;
for(typename detail::tquat<T, P>::size_type i = 0; i < x.length(); ++i)
for(int i = 0; i < x.length(); ++i)
Result[i] = x[i] > y[i];
return Result;
}
@@ -837,7 +839,7 @@ namespace detail
)
{
typename detail::tquat<T, P>::bool_type Result;
for(typename detail::tquat<T, P>::size_type i = 0; i < x.length(); ++i)
for(int i = 0; i < x.length(); ++i)
Result[i] = x[i] >= y[i];
return Result;
}
@@ -850,7 +852,7 @@ namespace detail
)
{
typename detail::tquat<T, P>::bool_type Result;
for(typename detail::tquat<T, P>::size_type i = 0; i < x.length(); ++i)
for(int i = 0; i < x.length(); ++i)
Result[i] = x[i] == y[i];
return Result;
}
@@ -863,7 +865,7 @@ namespace detail
)
{
typename detail::tquat<T, P>::bool_type Result;
for(typename detail::tquat<T, P>::size_type i = 0; i < x.length(); ++i)
for(int i = 0; i < x.length(); ++i)
Result[i] = x[i] != y[i];
return Result;
}