diff --git a/Eigen/src/Array/Replicate.h b/Eigen/src/Array/Replicate.h index cd23e0d6f..31fc28c35 100644 --- a/Eigen/src/Array/Replicate.h +++ b/Eigen/src/Array/Replicate.h @@ -76,7 +76,7 @@ template class Replicate THE_MATRIX_OR_EXPRESSION_THAT_YOU_PASSED_DOES_NOT_HAVE_THE_EXPECTED_TYPE) ei_assert(RowFactor!=Dynamic && ColFactor!=Dynamic); } - + template inline Replicate(const OriginalMatrixType& matrix, int rowFactor, int colFactor) : m_matrix(matrix), m_rowFactor(rowFactor), m_colFactor(colFactor) @@ -90,7 +90,14 @@ template 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: