From 83d6a529c3a917763b35aafe8cd5b3b7478fcee6 Mon Sep 17 00:00:00 2001 From: Gael Guennebaud Date: Sat, 11 Feb 2017 15:31:28 +0100 Subject: [PATCH] Use Eigen::fix to pass compile-time sizes. --- Eigen/src/Core/Reshaped.h | 17 ++++---- Eigen/src/plugins/ReshapedMethods.h | 41 +++++++++++++++---- ...xedReshape.cpp => class_FixedReshaped.cpp} | 4 +- .../{class_Reshape.cpp => class_Reshaped.cpp} | 6 +-- doc/snippets/MatrixBase_reshaped_fixed.cpp | 2 +- doc/snippets/MatrixBase_reshaped_int_int.cpp | 2 +- 6 files changed, 46 insertions(+), 26 deletions(-) rename doc/examples/{class_FixedReshape.cpp => class_FixedReshaped.cpp} (81%) rename doc/examples/{class_Reshape.cpp => class_Reshaped.cpp} (74%) diff --git a/Eigen/src/Core/Reshaped.h b/Eigen/src/Core/Reshaped.h index 655baa2a2..a6acfd5f4 100644 --- a/Eigen/src/Core/Reshaped.h +++ b/Eigen/src/Core/Reshaped.h @@ -13,7 +13,7 @@ namespace Eigen { -/** \class Reshapedd +/** \class Reshaped * \ingroup Core_Module * * \brief Expression of a fixed-size or dynamic-size reshape @@ -23,27 +23,24 @@ namespace Eigen { * \tparam Cols the number of columns of the reshape we are taking at compile time (optional) * \tparam Order * - * This class represents an expression of either a fixed-size or dynamic-size reshape. It is the return - * type of DenseBase::reshaped(Index,Index) and DenseBase::reshape() and + * 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 * most of the time this is the only way it is used. * - * However, if you want to directly maniputate reshape expressions, + * However, in C++98, if you want to directly maniputate reshaped expressions, * for instance if you want to write a function returning such an expression, you - * will need to use this class. + * will need to use this class. In C++11, it is advised to use the \em auto + * keyword for such use cases. * * Here is an example illustrating the dynamic case: * \include class_Reshaped.cpp * Output: \verbinclude class_Reshaped.out * - * \note Even though this expression has dynamic size, in the case where \a XprType - * has fixed size, this expression inherits a fixed maximal size which means that evaluating - * it does not cause a dynamic memory allocation. - * * Here is an example illustrating the fixed-size case: * \include class_FixedReshaped.cpp * Output: \verbinclude class_FixedReshaped.out * - * \sa DenseBase::reshaped(Index,Index), DenseBase::reshaped(), class VectorReshaped + * \sa DenseBase::reshaped(NRowsType,NColsType) */ namespace internal { diff --git a/Eigen/src/plugins/ReshapedMethods.h b/Eigen/src/plugins/ReshapedMethods.h index 20563c2f9..a9b4af7c3 100644 --- a/Eigen/src/plugins/ReshapedMethods.h +++ b/Eigen/src/plugins/ReshapedMethods.h @@ -17,30 +17,53 @@ /// /// \sa class Reshaped, fix, fix(int) /// +#ifdef EIGEN_PARSED_BY_DOXYGEN +template +EIGEN_DEVICE_FUNC +inline Reshaped +reshaped(NRowsType nRows, NColsType nCols, OrderType = ColOrder); + +/** This is the const version of reshaped(NRowsType,NColsType). */ +template +EIGEN_DEVICE_FUNC +inline const Reshaped +reshaped(NRowsType nRows, NColsType nCols, OrderType = ColOrder) const; +#else template EIGEN_DEVICE_FUNC -#ifndef EIGEN_PARSED_BY_DOXYGEN inline Reshaped::value,internal::get_fixed_value::value> -#else -inline Reshaped -#endif reshaped(NRowsType nRows, NColsType nCols) { return Reshaped::value,internal::get_fixed_value::value>( derived(), internal::get_runtime_value(nRows), internal::get_runtime_value(nCols)); } -/** This is the const version of reshaped(NRowsType,NColsType). */ +template +EIGEN_DEVICE_FUNC +inline Reshaped::value,internal::get_fixed_value::value,OrderType::value> +reshaped(NRowsType nRows, NColsType nCols, OrderType) +{ + return Reshaped::value,internal::get_fixed_value::value,OrderType::value>( + derived(), internal::get_runtime_value(nRows), internal::get_runtime_value(nCols)); +} + + template EIGEN_DEVICE_FUNC -#ifndef EIGEN_PARSED_BY_DOXYGEN inline const Reshaped::value,internal::get_fixed_value::value> -#else -inline const Reshaped -#endif reshaped(NRowsType nRows, NColsType nCols) const { return Reshaped::value,internal::get_fixed_value::value>( derived(), internal::get_runtime_value(nRows), internal::get_runtime_value(nCols)); } +template +EIGEN_DEVICE_FUNC +inline const Reshaped::value,internal::get_fixed_value::value,OrderType::value> +reshaped(NRowsType nRows, NColsType nCols, OrderType) const +{ + return Reshaped::value,internal::get_fixed_value::value,OrderType::value>( + derived(), internal::get_runtime_value(nRows), internal::get_runtime_value(nCols)); +} + +#endif // EIGEN_PARSED_BY_DOXYGEN diff --git a/doc/examples/class_FixedReshape.cpp b/doc/examples/class_FixedReshaped.cpp similarity index 81% rename from doc/examples/class_FixedReshape.cpp rename to doc/examples/class_FixedReshaped.cpp index 40156a123..b6d4085de 100644 --- a/doc/examples/class_FixedReshape.cpp +++ b/doc/examples/class_FixedReshaped.cpp @@ -4,10 +4,10 @@ using namespace Eigen; using namespace std; template -Eigen::Reshape +Eigen::Reshaped reshape_helper(MatrixBase& m) { - return Eigen::Reshape(m.derived()); + return Eigen::Reshaped(m.derived()); } int main(int, char**) diff --git a/doc/examples/class_Reshape.cpp b/doc/examples/class_Reshaped.cpp similarity index 74% rename from doc/examples/class_Reshape.cpp rename to doc/examples/class_Reshaped.cpp index b9abdc2d5..18fb45454 100644 --- a/doc/examples/class_Reshape.cpp +++ b/doc/examples/class_Reshaped.cpp @@ -4,10 +4,10 @@ using namespace std; using namespace Eigen; template -const Reshape +const Reshaped reshape_helper(const MatrixBase& m, int rows, int cols) { - return Reshape(m.derived(), rows, cols); + return Reshaped(m.derived(), rows, cols); } int main(int, char**) @@ -17,7 +17,7 @@ int main(int, char**) 2, 5, 8, 11, 3, 6, 9, 12; cout << m << endl; - auto n = reshape_helper(m, 2, 6); + Ref n = reshape_helper(m, 2, 6); cout << "Matrix m is:" << endl << m << endl; cout << "Matrix n is:" << endl << n << endl; } diff --git a/doc/snippets/MatrixBase_reshaped_fixed.cpp b/doc/snippets/MatrixBase_reshaped_fixed.cpp index 611205929..a268ee5ae 100644 --- a/doc/snippets/MatrixBase_reshaped_fixed.cpp +++ b/doc/snippets/MatrixBase_reshaped_fixed.cpp @@ -1,3 +1,3 @@ Matrix4i m = Matrix4i::Random(); cout << "Here is the matrix m:" << endl << m << endl; -cout << "Here is m.reshape(fix<2>,fix<8>):" << endl << m.reshape(fix<2>,fix<8>) << endl; +cout << "Here is m.reshape(fix<2>,fix<8>):" << endl << m.reshaped(fix<2>,fix<8>) << endl; diff --git a/doc/snippets/MatrixBase_reshaped_int_int.cpp b/doc/snippets/MatrixBase_reshaped_int_int.cpp index 1169cdb2d..4486d8347 100644 --- a/doc/snippets/MatrixBase_reshaped_int_int.cpp +++ b/doc/snippets/MatrixBase_reshaped_int_int.cpp @@ -1,3 +1,3 @@ Matrix4i m = Matrix4i::Random(); cout << "Here is the matrix m:" << endl << m << endl; -cout << "Here is m.reshape(2, 8):" << endl << m.reshape(2, 8) << endl; +cout << "Here is m.reshape(2, 8):" << endl << m.reshaped(2, 8) << endl;