Propagate fixed size dimensions if available (on MSVC it leads >2.5x speedup for some reductions).

This commit is contained in:
Hauke Heibel 2010-03-13 13:15:27 +01:00
parent 3e08c22028
commit b9644f3323

View File

@ -121,8 +121,20 @@ class CwiseBinaryOp : ei_no_assignment_operator,
ei_assert(lhs.rows() == rhs.rows() && lhs.cols() == rhs.cols());
}
EIGEN_STRONG_INLINE int rows() const { return m_lhs.rows(); }
EIGEN_STRONG_INLINE int cols() const { return m_lhs.cols(); }
EIGEN_STRONG_INLINE int rows() const {
// return the fixed size type if available to enable compile time optimizations
if (ei_traits<ei_cleantype<LhsNested>::type>::RowsAtCompileTime==Dynamic)
return m_rhs.rows();
else
return m_lhs.rows();
}
EIGEN_STRONG_INLINE int cols() const {
// return the fixed size type if available to enable compile time optimizations
if (ei_traits<ei_cleantype<LhsNested>::type>::ColsAtCompileTime==Dynamic)
return m_rhs.cols();
else
return m_lhs.cols();
}
/** \returns the left hand side nested expression */
const _LhsNested& lhs() const { return m_lhs; }