diff --git a/Eigen/src/Array/Reverse.h b/Eigen/src/Array/Reverse.h index cca425142..2d7510902 100644 --- a/Eigen/src/Array/Reverse.h +++ b/Eigen/src/Array/Reverse.h @@ -84,6 +84,10 @@ template class Reverse EIGEN_DENSE_PUBLIC_INTERFACE(Reverse) using Base::IsRowMajor; + // next line is necessary because otherwise const version of operator() + // is hidden by non-const version defined in this file + using Base::operator(); + protected: enum { PacketSize = ei_packet_traits::size, @@ -106,6 +110,12 @@ template class Reverse inline Index rows() const { return m_matrix.rows(); } inline Index cols() const { return m_matrix.cols(); } + inline Scalar& operator()(Index row, Index col) + { + ei_assert(row >= 0 && row < rows() && col >= 0 && col < cols()); + return coeffRef(row, col); + } + inline Scalar& coeffRef(Index row, Index col) { return m_matrix.const_cast_derived().coeffRef(ReverseRow ? m_matrix.rows() - row - 1 : row, @@ -128,6 +138,12 @@ template class Reverse return m_matrix.const_cast_derived().coeffRef(m_matrix.size() - index - 1); } + inline Scalar& operator()(Index index) + { + ei_assert(index >= 0 && index < m_matrix.size()); + return coeffRef(index); + } + template inline const PacketScalar packet(Index row, Index col) const { diff --git a/Eigen/src/Array/VectorwiseOp.h b/Eigen/src/Array/VectorwiseOp.h index e338a9193..2aa382df2 100644 --- a/Eigen/src/Array/VectorwiseOp.h +++ b/Eigen/src/Array/VectorwiseOp.h @@ -380,8 +380,8 @@ template class VectorwiseOp /** \returns a matrix expression * where each column (or row) are reversed. * - * Example: \include PartialRedux_reverse.cpp - * Output: \verbinclude PartialRedux_reverse.out + * Example: \include VectorWise_reverse.cpp + * Output: \verbinclude VectorWise_reverse.out * * \sa DenseBase::reverse() */ const Reverse reverse() const diff --git a/test/array_reverse.cpp b/test/array_reverse.cpp index ccf8dcc87..3933ff523 100644 --- a/test/array_reverse.cpp +++ b/test/array_reverse.cpp @@ -103,47 +103,6 @@ template void reverse(const MatrixType& m) } } - /* - cout << "m1:" << endl << m1 << endl; - cout << "m1c_reversed:" << endl << m1c_reversed << endl; - - cout << "----------------" << endl; - - for ( int i=0; i< rows*cols; i++){ - cout << m1c_reversed.coeff(i) << endl; - } - - cout << "----------------" << endl; - - for ( int i=0; i< rows*cols; i++){ - cout << m1c_reversed.colwise().reverse().coeff(i) << endl; - } - - cout << "================" << endl; - - cout << "m1.coeff( ind ): " << m1.coeff( ind ) << endl; - cout << "m1c_reversed.colwise().reverse().coeff( ind ): " << m1c_reversed.colwise().reverse().coeff( ind ) << endl; - */ - - //MatrixType m1r_reversed = m1.rowwise().reverse(); - //VERIFY_IS_APPROX( m1r_reversed.rowwise().reverse().coeff( ind ), m1.coeff( ind ) ); - - /* - cout << "m1" << endl << m1 << endl; - cout << "m1 using coeff(int index)" << endl; - for ( int i = 0; i < rows*cols; i++) { - cout << m1.coeff(i) << " "; - } - cout << endl; - - cout << "m1.transpose()" << endl << m1.transpose() << endl; - cout << "m1.transpose() using coeff(int index)" << endl; - for ( int i = 0; i < rows*cols; i++) { - cout << m1.transpose().coeff(i) << " "; - } - cout << endl; - */ - /* Scalar x = ei_random(); int r = ei_random(0, rows-1), @@ -152,6 +111,7 @@ template void reverse(const MatrixType& m) m1.reverse()(r, c) = x; VERIFY_IS_APPROX(x, m1(rows - 1 - r, cols - 1 - c)); + /* m1.colwise().reverse()(r, c) = x; VERIFY_IS_APPROX(x, m1(rows - 1 - r, c));