simplify some ei_traits<> using inheritance

(less loc and slight compilation speed up)
This commit is contained in:
Gael Guennebaud 2009-01-11 22:03:40 +00:00
parent 9e8f437a6f
commit f268e79709
5 changed files with 9 additions and 43 deletions

View File

@ -41,14 +41,9 @@
* \sa class CwiseUnaryOp, class CwiseBinaryOp, MatrixBase::NullaryExpr() * \sa class CwiseUnaryOp, class CwiseBinaryOp, MatrixBase::NullaryExpr()
*/ */
template<typename NullaryOp, typename MatrixType> template<typename NullaryOp, typename MatrixType>
struct ei_traits<CwiseNullaryOp<NullaryOp, MatrixType> > struct ei_traits<CwiseNullaryOp<NullaryOp, MatrixType> > : ei_traits<MatrixType>
{ {
typedef typename ei_traits<MatrixType>::Scalar Scalar;
enum { enum {
RowsAtCompileTime = ei_traits<MatrixType>::RowsAtCompileTime,
ColsAtCompileTime = ei_traits<MatrixType>::ColsAtCompileTime,
MaxRowsAtCompileTime = ei_traits<MatrixType>::MaxRowsAtCompileTime,
MaxColsAtCompileTime = ei_traits<MatrixType>::MaxColsAtCompileTime,
Flags = (ei_traits<MatrixType>::Flags Flags = (ei_traits<MatrixType>::Flags
& ( HereditaryBits & ( HereditaryBits
| (ei_functor_has_linear_access<NullaryOp>::ret ? LinearAccessBit : 0) | (ei_functor_has_linear_access<NullaryOp>::ret ? LinearAccessBit : 0)

View File

@ -41,6 +41,7 @@
*/ */
template<typename UnaryOp, typename MatrixType> template<typename UnaryOp, typename MatrixType>
struct ei_traits<CwiseUnaryOp<UnaryOp, MatrixType> > struct ei_traits<CwiseUnaryOp<UnaryOp, MatrixType> >
: ei_traits<MatrixType>
{ {
typedef typename ei_result_of< typedef typename ei_result_of<
UnaryOp(typename MatrixType::Scalar) UnaryOp(typename MatrixType::Scalar)
@ -48,16 +49,10 @@ struct ei_traits<CwiseUnaryOp<UnaryOp, MatrixType> >
typedef typename MatrixType::Nested MatrixTypeNested; typedef typename MatrixType::Nested MatrixTypeNested;
typedef typename ei_unref<MatrixTypeNested>::type _MatrixTypeNested; typedef typename ei_unref<MatrixTypeNested>::type _MatrixTypeNested;
enum { enum {
MatrixTypeCoeffReadCost = _MatrixTypeNested::CoeffReadCost, Flags = (_MatrixTypeNested::Flags & (
MatrixTypeFlags = _MatrixTypeNested::Flags,
RowsAtCompileTime = MatrixType::RowsAtCompileTime,
ColsAtCompileTime = MatrixType::ColsAtCompileTime,
MaxRowsAtCompileTime = MatrixType::MaxRowsAtCompileTime,
MaxColsAtCompileTime = MatrixType::MaxColsAtCompileTime,
Flags = (MatrixTypeFlags & (
HereditaryBits | LinearAccessBit | AlignedBit HereditaryBits | LinearAccessBit | AlignedBit
| (ei_functor_traits<UnaryOp>::PacketAccess ? PacketAccessBit : 0))), | (ei_functor_traits<UnaryOp>::PacketAccess ? PacketAccessBit : 0))),
CoeffReadCost = MatrixTypeCoeffReadCost + ei_functor_traits<UnaryOp>::Cost CoeffReadCost = _MatrixTypeNested::CoeffReadCost + ei_functor_traits<UnaryOp>::Cost
}; };
}; };

View File

@ -40,18 +40,9 @@
* \sa MatrixBase::flagged() * \sa MatrixBase::flagged()
*/ */
template<typename ExpressionType, unsigned int Added, unsigned int Removed> template<typename ExpressionType, unsigned int Added, unsigned int Removed>
struct ei_traits<Flagged<ExpressionType, Added, Removed> > struct ei_traits<Flagged<ExpressionType, Added, Removed> > : ei_traits<ExpressionType>
{ {
typedef typename ExpressionType::Scalar Scalar; enum { Flags = (ExpressionType::Flags | Added) & ~Removed };
enum {
RowsAtCompileTime = ExpressionType::RowsAtCompileTime,
ColsAtCompileTime = ExpressionType::ColsAtCompileTime,
MaxRowsAtCompileTime = ExpressionType::MaxRowsAtCompileTime,
MaxColsAtCompileTime = ExpressionType::MaxColsAtCompileTime,
Flags = (ExpressionType::Flags | Added) & ~Removed,
CoeffReadCost = ExpressionType::CoeffReadCost
};
}; };
template<typename ExpressionType, unsigned int Added, unsigned int Removed> class Flagged template<typename ExpressionType, unsigned int Added, unsigned int Removed> class Flagged

View File

@ -38,18 +38,8 @@
* \sa MatrixBase::nestByValue() * \sa MatrixBase::nestByValue()
*/ */
template<typename ExpressionType> template<typename ExpressionType>
struct ei_traits<NestByValue<ExpressionType> > struct ei_traits<NestByValue<ExpressionType> > : public ei_traits<ExpressionType>
{ {};
typedef typename ExpressionType::Scalar Scalar;
enum {
RowsAtCompileTime = ExpressionType::RowsAtCompileTime,
ColsAtCompileTime = ExpressionType::ColsAtCompileTime,
MaxRowsAtCompileTime = ExpressionType::MaxRowsAtCompileTime,
MaxColsAtCompileTime = ExpressionType::MaxColsAtCompileTime,
Flags = ExpressionType::Flags,
CoeffReadCost = ExpressionType::CoeffReadCost
};
};
template<typename ExpressionType> class NestByValue template<typename ExpressionType> class NestByValue
: public MatrixBase<NestByValue<ExpressionType> > : public MatrixBase<NestByValue<ExpressionType> >

View File

@ -43,16 +43,11 @@
* \sa MatrixBase::part() * \sa MatrixBase::part()
*/ */
template<typename MatrixType, unsigned int Mode> template<typename MatrixType, unsigned int Mode>
struct ei_traits<Part<MatrixType, Mode> > struct ei_traits<Part<MatrixType, Mode> > : ei_traits<MatrixType>
{ {
typedef typename MatrixType::Scalar Scalar;
typedef typename ei_nested<MatrixType>::type MatrixTypeNested; typedef typename ei_nested<MatrixType>::type MatrixTypeNested;
typedef typename ei_unref<MatrixTypeNested>::type _MatrixTypeNested; typedef typename ei_unref<MatrixTypeNested>::type _MatrixTypeNested;
enum { enum {
RowsAtCompileTime = MatrixType::RowsAtCompileTime,
ColsAtCompileTime = MatrixType::ColsAtCompileTime,
MaxRowsAtCompileTime = MatrixType::MaxRowsAtCompileTime,
MaxColsAtCompileTime = MatrixType::MaxColsAtCompileTime,
Flags = (_MatrixTypeNested::Flags & (HereditaryBits) & (~(PacketAccessBit | DirectAccessBit | LinearAccessBit))) | Mode, Flags = (_MatrixTypeNested::Flags & (HereditaryBits) & (~(PacketAccessBit | DirectAccessBit | LinearAccessBit))) | Mode,
CoeffReadCost = _MatrixTypeNested::CoeffReadCost CoeffReadCost = _MatrixTypeNested::CoeffReadCost
}; };