Try to avoid modulo operations in Replicate if possible.

This commit is contained in:
Hauke Heibel 2010-03-13 14:33:39 +01:00
parent b9644f3323
commit fc20e6fd55

View File

@ -76,7 +76,7 @@ template<typename MatrixType,int RowFactor,int ColFactor> class Replicate
THE_MATRIX_OR_EXPRESSION_THAT_YOU_PASSED_DOES_NOT_HAVE_THE_EXPECTED_TYPE)
ei_assert(RowFactor!=Dynamic && ColFactor!=Dynamic);
}
template<typename OriginalMatrixType>
inline Replicate(const OriginalMatrixType& matrix, int rowFactor, int colFactor)
: m_matrix(matrix), m_rowFactor(rowFactor), m_colFactor(colFactor)
@ -90,7 +90,14 @@ template<typename MatrixType,int RowFactor,int ColFactor> class Replicate
inline Scalar coeff(int row, int col) const
{
return m_matrix.coeff(row%m_matrix.rows(), col%m_matrix.cols());
// try to avoid using modulo; this is a pure optimization strategy
// - it is assumed unlikely that RowFactor==1 && ColFactor==1
if (RowFactor==1)
return m_matrix.coeff(m_matrix.rows(), col%m_matrix.cols());
else if (ColFactor==1)
return m_matrix.coeff(row%m_matrix.rows(), m_matrix.cols());
else
return m_matrix.coeff(row%m_matrix.rows(), col%m_matrix.cols());
}
protected: