compilation fixes for sun CC

This commit is contained in:
Gael Guennebaud 2009-07-31 10:04:34 +02:00
parent d8bfd151d1
commit 2e9f7f80bf
2 changed files with 30 additions and 25 deletions

View File

@ -62,11 +62,13 @@ struct ei_traits<Homogeneous<MatrixType,Direction> >
template<typename MatrixType,typename Lhs> struct ei_homogeneous_left_product_impl;
template<typename MatrixType,typename Rhs> struct ei_homogeneous_right_product_impl;
template<typename MatrixType,int Direction> class Homogeneous
: public MatrixBase<Homogeneous<MatrixType,Direction> >
template<typename MatrixType,int _Direction> class Homogeneous
: public MatrixBase<Homogeneous<MatrixType,_Direction> >
{
public:
enum { Direction = _Direction };
EIGEN_GENERIC_PUBLIC_INTERFACE(Homogeneous)
inline Homogeneous(const MatrixType& matrix)

View File

@ -25,8 +25,9 @@
#ifndef EIGEN_ROTATIONBASE_H
#define EIGEN_ROTATIONBASE_H
// this file aims to contains the various representations of rotation/orientation
// in 2D and 3D space excepted Matrix and Quaternion.
// forward declaration
template<typename RotationDerived, typename MatrixType, bool IsVector=MatrixType::IsVectorAtCompileTime>
struct ei_rotation_base_generic_product_selector;
/** \class RotationBase
*
@ -47,25 +48,6 @@ class RotationBase
typedef Matrix<Scalar,Dim,Dim> RotationMatrixType;
typedef Matrix<Scalar,Dim,1> VectorType;
protected:
template<typename MatrixType, bool IsVector=MatrixType::IsVectorAtCompileTime>
struct generic_product_selector
{
typedef RotationMatrixType ReturnType;
inline static RotationMatrixType run(const Derived& r, const MatrixType& m)
{ return r.toRotationMatrix() * m; }
};
template<typename OtherVectorType>
struct generic_product_selector<OtherVectorType,true>
{
typedef VectorType ReturnType;
inline static VectorType run(const Derived& r, const OtherVectorType& v)
{
return r._transformVector(v);
}
};
public:
inline const Derived& derived() const { return *static_cast<const Derived*>(this); }
inline Derived& derived() { return *static_cast<Derived*>(this); }
@ -90,9 +72,9 @@ class RotationBase
* - a vector of size Dim
*/
template<typename OtherDerived>
inline typename generic_product_selector<OtherDerived,OtherDerived::IsVectorAtCompileTime>::ReturnType
inline typename ei_rotation_base_generic_product_selector<Derived,OtherDerived,OtherDerived::IsVectorAtCompileTime>::ReturnType
operator*(const MatrixBase<OtherDerived>& e) const
{ return generic_product_selector<OtherDerived>::run(derived(), e.derived()); }
{ return ei_rotation_base_generic_product_selector<Derived,OtherDerived>::run(derived(), e.derived()); }
/** \returns the concatenation of a linear transformation \a l with the rotation \a r */
template<typename OtherDerived> friend
@ -109,6 +91,27 @@ class RotationBase
{ return toRotationMatrix() * v; }
};
// implementation of the generic product rotation * matrix
template<typename RotationDerived, typename MatrixType>
struct ei_rotation_base_generic_product_selector<RotationDerived,MatrixType,false>
{
enum { Dim = RotationDerived::Dim };
typedef Matrix<typename RotationDerived::Scalar,Dim,Dim> ReturnType;
inline static ReturnType run(const RotationDerived& r, const MatrixType& m)
{ return r.toRotationMatrix() * m; }
};
template<typename RotationDerived,typename OtherVectorType>
struct ei_rotation_base_generic_product_selector<RotationDerived,OtherVectorType,true>
{
enum { Dim = RotationDerived::Dim };
typedef Matrix<typename RotationDerived::Scalar,Dim,1> ReturnType;
inline static ReturnType run(const RotationDerived& r, const OtherVectorType& v)
{
return r._transformVector(v);
}
};
/** \geometry_module
*
* Constructs a Dim x Dim rotation matrix from the rotation \a r