diff options
author | Gael Guennebaud <g.gael@free.fr> | 2017-02-20 11:46:21 +0100 |
---|---|---|
committer | Gael Guennebaud <g.gael@free.fr> | 2017-02-20 11:46:21 +0100 |
commit | 9081c8f6eaeb61a682950fac53af6b321667e355 (patch) | |
tree | 4531a647e5952576c89a4fbac3b3a679774a09d6 /Eigen/src/Core/Reshaped.h | |
parent | 4b22048cead4b3b34f2a784bb77f215350496103 (diff) |
Add support for RowOrder reshaped
Diffstat (limited to 'Eigen/src/Core/Reshaped.h')
-rw-r--r-- | Eigen/src/Core/Reshaped.h | 24 |
1 files changed, 16 insertions, 8 deletions
diff --git a/Eigen/src/Core/Reshaped.h b/Eigen/src/Core/Reshaped.h index 42ce2dbae..56fd3519a 100644 --- a/Eigen/src/Core/Reshaped.h +++ b/Eigen/src/Core/Reshaped.h @@ -21,7 +21,7 @@ namespace Eigen { * \tparam XprType the type of the expression in which we are taking a reshape * \tparam Rows the number of rows of the reshape we are taking at compile time (optional) * \tparam Cols the number of columns of the reshape we are taking at compile time (optional) - * \tparam Order + * \tparam Order can be ColMajor or RowMajor, default is ColMajor. * * This class represents an expression of either a fixed-size or dynamic-size reshape. * It is the return type of DenseBase::reshaped(NRowsType,NColsType) and @@ -68,9 +68,8 @@ struct traits<Reshaped<XprType, Rows, Cols, Order> > : traits<XprType> : Dynamic, OuterStrideAtCompileTime = Dynamic, - InOrder = Order, HasDirectAccess = internal::has_direct_access<XprType>::ret - && (Order==int(AutoOrderValue) || Order==int(XpxStorageOrder)) + && (Order==int(XpxStorageOrder)) && ((evaluator<XprType>::Flags&LinearAccessBit)==LinearAccessBit), MaskPacketAccessBit = (InnerSize == Dynamic || (InnerSize % packet_traits<Scalar>::size) == 0) @@ -324,11 +323,20 @@ struct reshaped_evaluator<ArgType, Rows, Cols, Order, /* HasDirectAccess */ fals typedef std::pair<Index, Index> RowCol; - inline RowCol index_remap(Index rowId, Index colId) const { - const Index nth_elem_idx = colId * m_xpr.rows() + rowId; - const Index actual_col = nth_elem_idx / m_xpr.nestedExpression().rows(); - const Index actual_row = nth_elem_idx % m_xpr.nestedExpression().rows(); - return RowCol(actual_row, actual_col); + inline RowCol index_remap(Index rowId, Index colId) const + { + if(Order==ColMajor) + { + const Index nth_elem_idx = colId * m_xpr.rows() + rowId; + return RowCol(nth_elem_idx % m_xpr.nestedExpression().rows(), + nth_elem_idx / m_xpr.nestedExpression().rows()); + } + else + { + const Index nth_elem_idx = colId + rowId * m_xpr.cols(); + return RowCol(nth_elem_idx / m_xpr.nestedExpression().cols(), + nth_elem_idx % m_xpr.nestedExpression().cols()); + } } EIGEN_DEVICE_FUNC |