aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar Gael Guennebaud <g.gael@free.fr>2018-10-03 11:41:47 +0200
committerGravatar Gael Guennebaud <g.gael@free.fr>2018-10-03 11:41:47 +0200
commit5f26f57598b4f795cdaf5797fdb33f0e948cc81c (patch)
treee32a248b84216c0d10db00a6780fa7b164c55870
parent0481900e25764f16e8723d2588f818d3a610cfad (diff)
Change the logic of A.reshaped<Order>() to be a simple alias to A.reshaped<Order>(AutoSize,fix<1>).
This means that now AutoOrder is allowed, and it always return a column-vector.
-rw-r--r--Eigen/src/Core/Reshaped.h2
-rw-r--r--Eigen/src/plugins/ReshapedMethods.h37
-rw-r--r--doc/snippets/MatrixBase_reshaped_to_vector.cpp2
-rw-r--r--test/reshape.cpp5
4 files changed, 19 insertions, 27 deletions
diff --git a/Eigen/src/Core/Reshaped.h b/Eigen/src/Core/Reshaped.h
index aaa5a5739..b7bd1b292 100644
--- a/Eigen/src/Core/Reshaped.h
+++ b/Eigen/src/Core/Reshaped.h
@@ -125,7 +125,7 @@ template<typename XprType, int Rows, int Cols, int Order> class Reshaped
}
};
-// The generic default implementation for dense reshape simplu forward to the internal::ReshapedImpl_dense
+// The generic default implementation for dense reshape simply forward to the internal::ReshapedImpl_dense
// that must be specialized for direct and non-direct access...
template<typename XprType, int Rows, int Cols, int Order>
class ReshapedImpl<XprType, Rows, Cols, Order, Dense>
diff --git a/Eigen/src/plugins/ReshapedMethods.h b/Eigen/src/plugins/ReshapedMethods.h
index 574eb987b..ca9251ed2 100644
--- a/Eigen/src/plugins/ReshapedMethods.h
+++ b/Eigen/src/plugins/ReshapedMethods.h
@@ -32,30 +32,29 @@ EIGEN_DEVICE_FUNC
inline Reshaped<Derived,...>
reshaped(NRowsType nRows, NColsType nCols);
-/** This is the const version of reshaped(NRowsType,NColsType). */
+/// This is the const version of reshaped(NRowsType,NColsType).
template<int Order = ColMajor, typename NRowsType, typename NColsType>
EIGEN_DEVICE_FUNC
inline const Reshaped<const Derived,...>
reshaped(NRowsType nRows, NColsType nCols) const;
-/// \returns an expression of \c *this with columns (or rows) stacked to a linear column (or row) vector
+/// \returns an expression of \c *this with columns (or rows) stacked to a linear column vector
///
-/// \tparam Order specifies whether to stack columns to a column-vector (ColMajor) or
-/// to cat rows to a row-vector (RowMajor). The default is ColMajor.
+/// \tparam Order specifies whether the coefficients should be processed in column-major-order (ColMajor), in row-major-order (RowMajor),
+/// or follows the \em natural order of the nested expression (AutoOrder). The default is ColMajor.
///
-/// If Order==ColMajor (the default), then it returns a column vector from the stacked columns of \c *this.
-/// This is equivalent to `A.reshaped<ColMajor>(AutoSize,fix<1>)`.
+/// This overloads is essentially a shortcut for `A.reshaped<Order>(AutoSize,fix<1>).
///
-/// If Order==RowMajor, then it returns a row vector from the glued rows of \c *this.
-/// This is equivalent to `A.reshaped<RowMajor>(fix<1>,AutoSize)`.
+/// - If Order==ColMajor (the default), then it returns a column-vector from the stacked columns of \c *this.
+/// - If Order==RowMajor, then it returns a column-vector from the stacked rows of \c *this.
+/// - If Order==AutoOrder, then it returns a column-vector with elements stacked following the storage order of \c *this.
+/// This mode is the recommended one when the particular ordering of the element is not relevant.
///
/// Example:
/// \include MatrixBase_reshaped_to_vector.cpp
/// Output: \verbinclude MatrixBase_reshaped_to_vector.out
///
/// If you want more control, you can still fall back to reshaped(NRowsType,NColsType).
-/// For instance, to return a column vector with element stacked following the storage order,
-/// you can do: \code A.reshaped<AutoOrder>(AutoSize,fix<1>) \endcode
///
/// \sa reshaped(NRowsType,NColsType), class Reshaped
///
@@ -64,7 +63,7 @@ EIGEN_DEVICE_FUNC
inline Reshaped<Derived,...>
reshaped();
-/** This is the const version of reshaped(). */
+/// This is the const version of reshaped().
template<int Order = ColMajor>
EIGEN_DEVICE_FUNC
inline const Reshaped<const Derived,...>
@@ -129,20 +128,12 @@ reshaped() EIGEN_RESHAPED_METHOD_CONST
template<int Order>
EIGEN_DEVICE_FUNC
-inline Reshaped<EIGEN_RESHAPED_METHOD_CONST Derived,
- Order==RowMajor ? 1 : SizeAtCompileTime,
- Order==RowMajor ? SizeAtCompileTime : 1,
- Order==AutoOrder?Flags&RowMajorBit:Order>
+inline Reshaped<EIGEN_RESHAPED_METHOD_CONST Derived, SizeAtCompileTime, 1, Order==AutoOrder?Flags&RowMajorBit:Order>
reshaped() EIGEN_RESHAPED_METHOD_CONST
{
- EIGEN_STATIC_ASSERT(Order==RowMajor || Order==ColMajor, INVALID_TEMPLATE_PARAMETER);
- return Reshaped<EIGEN_RESHAPED_METHOD_CONST Derived,
- Order==RowMajor ? 1 : SizeAtCompileTime,
- Order==RowMajor ? SizeAtCompileTime : 1,
- Order==AutoOrder?Flags&RowMajorBit:Order>
- (derived(),
- Order==RowMajor ? 1 : size(),
- Order==RowMajor ? size() : 1);
+ EIGEN_STATIC_ASSERT(Order==RowMajor || Order==ColMajor || Order==AutoOrder, INVALID_TEMPLATE_PARAMETER);
+ return Reshaped<EIGEN_RESHAPED_METHOD_CONST Derived, SizeAtCompileTime, 1, Order==AutoOrder?Flags&RowMajorBit:Order>
+ (derived(), size(), 1);
}
#undef EIGEN_RESHAPED_METHOD_CONST
diff --git a/doc/snippets/MatrixBase_reshaped_to_vector.cpp b/doc/snippets/MatrixBase_reshaped_to_vector.cpp
index ee844c203..37f65f7c6 100644
--- a/doc/snippets/MatrixBase_reshaped_to_vector.cpp
+++ b/doc/snippets/MatrixBase_reshaped_to_vector.cpp
@@ -1,4 +1,4 @@
Matrix4i m = Matrix4i::Random();
cout << "Here is the matrix m:" << endl << m << endl;
cout << "Here is m.reshaped().transpose():" << endl << m.reshaped().transpose() << endl;
-cout << "Here is m.reshaped<RowMajor>(): " << endl << m.reshaped<RowMajor>() << endl;
+cout << "Here is m.reshaped<RowMajor>().transpose(): " << endl << m.reshaped<RowMajor>().transpose() << endl;
diff --git a/test/reshape.cpp b/test/reshape.cpp
index 2c241f2fe..14a02bb3b 100644
--- a/test/reshape.cpp
+++ b/test/reshape.cpp
@@ -157,8 +157,9 @@ void reshape4x4(MatType m)
VERIFY_IS_EQUAL(m.reshaped().reshaped(8,2), m.reshaped(8,2));
VERIFY_IS_EQUAL(m.reshaped(), m.template reshaped<ColMajor>());
- VERIFY_IS_EQUAL(m.transpose().reshaped().transpose(), m.template reshaped<RowMajor>());
- VERIFY_IS_EQUAL(m.template reshaped<RowMajor>(fix<1>, AutoSize), m.template reshaped<RowMajor>());
+ VERIFY_IS_EQUAL(m.transpose().reshaped(), m.template reshaped<RowMajor>());
+ VERIFY_IS_EQUAL(m.template reshaped<RowMajor>(AutoSize,fix<1>), m.template reshaped<RowMajor>());
+ VERIFY_IS_EQUAL(m.template reshaped<AutoOrder>(AutoSize,fix<1>), m.template reshaped<AutoOrder>());
VERIFY(is_same_eq(m.reshaped(AutoSize,fix<1>), m.reshaped()));
VERIFY_IS_EQUAL(m.template reshaped<RowMajor>(fix<1>,AutoSize), m.transpose().reshaped().transpose());