This commit is contained in:
Gael Guennebaud 2016-07-18 10:44:15 +02:00
commit 0c3fe4aca5
3 changed files with 13 additions and 5 deletions

View File

@ -284,6 +284,7 @@ template<typename ExpressionType, int Direction> class VectorwiseOp
typedef typename ReturnType<internal::member_any>::Type AnyReturnType; typedef typename ReturnType<internal::member_any>::Type AnyReturnType;
typedef PartialReduxExpr<ExpressionType, internal::member_count<Index>, Direction> CountReturnType; typedef PartialReduxExpr<ExpressionType, internal::member_count<Index>, Direction> CountReturnType;
typedef typename ReturnType<internal::member_prod>::Type ProdReturnType; typedef typename ReturnType<internal::member_prod>::Type ProdReturnType;
typedef Reverse<const ExpressionType, Direction> ConstReverseReturnType;
typedef Reverse<ExpressionType, Direction> ReverseReturnType; typedef Reverse<ExpressionType, Direction> ReverseReturnType;
template<int p> struct LpNormReturnType { template<int p> struct LpNormReturnType {
@ -456,7 +457,15 @@ template<typename ExpressionType, int Direction> class VectorwiseOp
* *
* \sa DenseBase::reverse() */ * \sa DenseBase::reverse() */
EIGEN_DEVICE_FUNC EIGEN_DEVICE_FUNC
const ReverseReturnType reverse() const const ConstReverseReturnType reverse() const
{ return ConstReverseReturnType( _expression() ); }
/** \returns a writable matrix expression
* where each column (or row) are reversed.
*
* \sa reverse() const */
EIGEN_DEVICE_FUNC
ReverseReturnType reverse()
{ return ReverseReturnType( _expression() ); } { return ReverseReturnType( _expression() ); }
typedef Replicate<ExpressionType,(isVertical?Dynamic:1),(isHorizontal?Dynamic:1)> ReplicateReturnType; typedef Replicate<ExpressionType,(isVertical?Dynamic:1),(isHorizontal?Dynamic:1)> ReplicateReturnType;

View File

@ -333,8 +333,9 @@ GeneralizedEigenSolver<MatrixType>::compute(const MatrixType& A, const MatrixTyp
// T = [a 0] // T = [a 0]
// [0 b] // [0 b]
RealScalar a = matT.coeff(i, i), RealScalar a = matT.diagonal().coeff(i),
b = matT(i+1, i+1); // NOTE: using operator() instead of coeff() workarounds a MSVC bug. b = matT.diagonal().coeff(i+1);
// ^^ NOTE: using diagonal()(i) instead of coeff(i,i) workarounds a MSVC bug.
Matrix<RealScalar,2,2> S2 = m_matS.template block<2,2>(i,i) * Matrix<Scalar,2,1>(b,a).asDiagonal(); Matrix<RealScalar,2,2> S2 = m_matS.template block<2,2>(i,i) * Matrix<Scalar,2,1>(b,a).asDiagonal();
Scalar p = Scalar(0.5) * (S2.coeff(0,0) - S2.coeff(1,1)); Scalar p = Scalar(0.5) * (S2.coeff(0,0) - S2.coeff(1,1));

View File

@ -117,13 +117,11 @@ template<typename MatrixType> void reverse(const MatrixType& m)
m2.colwise().reverseInPlace(); m2.colwise().reverseInPlace();
VERIFY_IS_APPROX(m2,m1.colwise().reverse().eval()); VERIFY_IS_APPROX(m2,m1.colwise().reverse().eval());
/*
m1.colwise().reverse()(r, c) = x; m1.colwise().reverse()(r, c) = x;
VERIFY_IS_APPROX(x, m1(rows - 1 - r, c)); VERIFY_IS_APPROX(x, m1(rows - 1 - r, c));
m1.rowwise().reverse()(r, c) = x; m1.rowwise().reverse()(r, c) = x;
VERIFY_IS_APPROX(x, m1(r, cols - 1 - c)); VERIFY_IS_APPROX(x, m1(r, cols - 1 - c));
*/
} }
void test_array_reverse() void test_array_reverse()