more sun studio fixes

This commit is contained in:
Gael Guennebaud 2009-07-10 16:27:01 +02:00
parent ec5c608aa3
commit ab17f92728
4 changed files with 14 additions and 12 deletions

View File

@ -45,7 +45,7 @@ struct ei_traits<CwiseUnaryView<ViewOp, MatrixType> >
ViewOp(typename ei_traits<MatrixType>::Scalar) ViewOp(typename ei_traits<MatrixType>::Scalar)
>::type Scalar; >::type Scalar;
typedef typename MatrixType::Nested MatrixTypeNested; typedef typename MatrixType::Nested MatrixTypeNested;
typedef typename ei_unref<MatrixTypeNested>::type _MatrixTypeNested; typedef typename ei_cleantype<MatrixTypeNested>::type _MatrixTypeNested;
enum { enum {
Flags = (ei_traits<_MatrixTypeNested>::Flags & (HereditaryBits | LinearAccessBit | AlignedBit)), Flags = (ei_traits<_MatrixTypeNested>::Flags & (HereditaryBits | LinearAccessBit | AlignedBit)),
CoeffReadCost = ei_traits<_MatrixTypeNested>::CoeffReadCost + ei_functor_traits<ViewOp>::Cost CoeffReadCost = ei_traits<_MatrixTypeNested>::CoeffReadCost + ei_functor_traits<ViewOp>::Cost

View File

@ -83,13 +83,15 @@ struct ProductReturnType<Lhs,Rhs,CacheFriendlyProduct>
template<typename Lhs, typename Rhs> struct ei_product_mode template<typename Lhs, typename Rhs> struct ei_product_mode
{ {
enum{ enum{
// workaround sun studio:
LhsIsVectorAtCompileTime = ei_traits<Lhs>::ColsAtCompileTime==1 || ei_traits<Rhs>::ColsAtCompileTime==1,
value = ei_is_diagonal<Rhs>::ret || ei_is_diagonal<Lhs>::ret value = ei_is_diagonal<Rhs>::ret || ei_is_diagonal<Lhs>::ret
? DiagonalProduct ? DiagonalProduct
: ei_traits<Lhs>::MaxColsAtCompileTime == Dynamic : ei_traits<Lhs>::MaxColsAtCompileTime == Dynamic
&& ( ei_traits<Lhs>::MaxRowsAtCompileTime == Dynamic && ( ei_traits<Lhs>::MaxRowsAtCompileTime == Dynamic
|| ei_traits<Rhs>::MaxColsAtCompileTime == Dynamic ) || ei_traits<Rhs>::MaxColsAtCompileTime == Dynamic )
&& (!(ei_traits<Rhs>::IsVectorAtCompileTime && (ei_traits<Lhs>::Flags&RowMajorBit) && (!(ei_traits<Lhs>::Flags&DirectAccessBit)))) && (!(Rhs::IsVectorAtCompileTime && (ei_traits<Lhs>::Flags&RowMajorBit) && (!(ei_traits<Lhs>::Flags&DirectAccessBit))))
&& (!(ei_traits<Lhs>::IsVectorAtCompileTime && (!(ei_traits<Rhs>::Flags&RowMajorBit)) && (!(ei_traits<Rhs>::Flags&DirectAccessBit)))) && (!(LhsIsVectorAtCompileTime && (!(ei_traits<Rhs>::Flags&RowMajorBit)) && (!(ei_traits<Rhs>::Flags&DirectAccessBit))))
&& (ei_is_same_type<typename ei_traits<Lhs>::Scalar, typename ei_traits<Rhs>::Scalar>::ret) && (ei_is_same_type<typename ei_traits<Lhs>::Scalar, typename ei_traits<Rhs>::Scalar>::ret)
? CacheFriendlyProduct ? CacheFriendlyProduct
: NormalProduct }; : NormalProduct };

View File

@ -198,13 +198,6 @@ const unsigned int SelfAdjoint = SelfAdjointBit;
const unsigned int UnitUpperTriangular = UpperTriangularBit | UnitDiagBit; const unsigned int UnitUpperTriangular = UpperTriangularBit | UnitDiagBit;
const unsigned int UnitLowerTriangular = LowerTriangularBit | UnitDiagBit; const unsigned int UnitLowerTriangular = LowerTriangularBit | UnitDiagBit;
template<typename T> struct ei_is_diagonal
{
enum {
ret = ( int(ei_traits<T>::Flags) & DiagonalBits ) == DiagonalBits
};
};
enum { Aligned, Unaligned }; enum { Aligned, Unaligned };
enum { ForceAligned, AsRequested }; enum { ForceAligned, AsRequested };
enum { ConditionalJumpCost = 5 }; enum { ConditionalJumpCost = 5 };

View File

@ -262,4 +262,11 @@ template<typename XprType, typename CastType> struct ei_cast_return_type
const XprType&,CastType>::ret type; const XprType&,CastType>::ret type;
}; };
template<typename T> struct ei_is_diagonal
{
enum {
ret = ( int(ei_traits<T>::Flags) & DiagonalBits ) == DiagonalBits
};
};
#endif // EIGEN_XPRHELPER_H #endif // EIGEN_XPRHELPER_H