aboutsummaryrefslogtreecommitdiffhomepage
path: root/Eigen/src/Core/Reshaped.h
diff options
context:
space:
mode:
authorGravatar Gael Guennebaud <g.gael@free.fr>2017-02-20 11:46:21 +0100
committerGravatar Gael Guennebaud <g.gael@free.fr>2017-02-20 11:46:21 +0100
commit9081c8f6eaeb61a682950fac53af6b321667e355 (patch)
tree4531a647e5952576c89a4fbac3b3a679774a09d6 /Eigen/src/Core/Reshaped.h
parent4b22048cead4b3b34f2a784bb77f215350496103 (diff)
Add support for RowOrder reshaped
Diffstat (limited to 'Eigen/src/Core/Reshaped.h')
-rw-r--r--Eigen/src/Core/Reshaped.h24
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