diff options
author | Gael Guennebaud <g.gael@free.fr> | 2017-02-11 15:31:28 +0100 |
---|---|---|
committer | Gael Guennebaud <g.gael@free.fr> | 2017-02-11 15:31:28 +0100 |
commit | 83d6a529c3a917763b35aafe8cd5b3b7478fcee6 (patch) | |
tree | 931640b3d66c2cae526995c438eb64000dbae52f /Eigen/src | |
parent | 24409f3acdd987f2734cb3b67d5a78e1d70fd362 (diff) |
Use Eigen::fix<N> to pass compile-time sizes.
Diffstat (limited to 'Eigen/src')
-rw-r--r-- | Eigen/src/Core/Reshaped.h | 17 | ||||
-rw-r--r-- | Eigen/src/plugins/ReshapedMethods.h | 41 |
2 files changed, 39 insertions, 19 deletions
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<int,int>() 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<N>(int) /// +#ifdef EIGEN_PARSED_BY_DOXYGEN +template<typename NRowsType, typename NColsType, typename OrderType> +EIGEN_DEVICE_FUNC +inline Reshaped<Derived,...> +reshaped(NRowsType nRows, NColsType nCols, OrderType = ColOrder); + +/** This is the const version of reshaped(NRowsType,NColsType). */ +template<typename NRowsType, typename NColsType, typename OrderType> +EIGEN_DEVICE_FUNC +inline const Reshaped<const Derived,...> +reshaped(NRowsType nRows, NColsType nCols, OrderType = ColOrder) const; +#else template<typename NRowsType, typename NColsType> EIGEN_DEVICE_FUNC -#ifndef EIGEN_PARSED_BY_DOXYGEN inline Reshaped<Derived,internal::get_fixed_value<NRowsType>::value,internal::get_fixed_value<NColsType>::value> -#else -inline Reshaped<Derived,...> -#endif reshaped(NRowsType nRows, NColsType nCols) { return Reshaped<Derived,internal::get_fixed_value<NRowsType>::value,internal::get_fixed_value<NColsType>::value>( derived(), internal::get_runtime_value(nRows), internal::get_runtime_value(nCols)); } -/** This is the const version of reshaped(NRowsType,NColsType). */ +template<typename NRowsType, typename NColsType, typename OrderType> +EIGEN_DEVICE_FUNC +inline Reshaped<Derived,internal::get_fixed_value<NRowsType>::value,internal::get_fixed_value<NColsType>::value,OrderType::value> +reshaped(NRowsType nRows, NColsType nCols, OrderType) +{ + return Reshaped<Derived,internal::get_fixed_value<NRowsType>::value,internal::get_fixed_value<NColsType>::value,OrderType::value>( + derived(), internal::get_runtime_value(nRows), internal::get_runtime_value(nCols)); +} + + template<typename NRowsType, typename NColsType> EIGEN_DEVICE_FUNC -#ifndef EIGEN_PARSED_BY_DOXYGEN inline const Reshaped<const Derived,internal::get_fixed_value<NRowsType>::value,internal::get_fixed_value<NColsType>::value> -#else -inline const Reshaped<const Derived,...> -#endif reshaped(NRowsType nRows, NColsType nCols) const { return Reshaped<const Derived,internal::get_fixed_value<NRowsType>::value,internal::get_fixed_value<NColsType>::value>( derived(), internal::get_runtime_value(nRows), internal::get_runtime_value(nCols)); } +template<typename NRowsType, typename NColsType, typename OrderType> +EIGEN_DEVICE_FUNC +inline const Reshaped<const Derived,internal::get_fixed_value<NRowsType>::value,internal::get_fixed_value<NColsType>::value,OrderType::value> +reshaped(NRowsType nRows, NColsType nCols, OrderType) const +{ + return Reshaped<const Derived,internal::get_fixed_value<NRowsType>::value,internal::get_fixed_value<NColsType>::value,OrderType::value>( + derived(), internal::get_runtime_value(nRows), internal::get_runtime_value(nCols)); +} + +#endif // EIGEN_PARSED_BY_DOXYGEN |