From 54ed4770d77b310c780497a7a4baab58ae6395c5 Mon Sep 17 00:00:00 2001 From: jcarpent <jcarpent@laas.fr> Date: Wed, 10 Jan 2018 08:42:22 +0100 Subject: [PATCH] [Core] Fix compatibility with version of Eigen lower than 3.3.x --- src/ref.hpp | 36 +++++++++++++++++++++++++----------- 1 file changed, 25 insertions(+), 11 deletions(-) diff --git a/src/ref.hpp b/src/ref.hpp index ddeee580..641228e1 100644 --- a/src/ref.hpp +++ b/src/ref.hpp @@ -19,6 +19,12 @@ #include "eigenpy/fwd.hpp" +// For old Eigen versions, EIGEN_DEVICE_FUNC is not defined. +// We must define it just in the scope of this file. +#if not EIGEN_VERSION_AT_LEAST(3,2,91) +#define EIGEN_DEVICE_FUNC +#endif + namespace eigenpy { template<typename MatType, int IsVectorAtCompileTime = MatType::IsVectorAtCompileTime> @@ -49,17 +55,21 @@ namespace eigenpy typedef typename Eigen::internal::traits<Base>::Scalar Scalar; /*!< \brief Numeric type, e.g. float, double, int or std::complex<float>. */ \ typedef typename Eigen::NumTraits<Scalar>::Real RealScalar; /*!< \brief The underlying numeric type for composed scalar types. \details In cases where Scalar is e.g. std::complex<T>, T were corresponding to RealScalar. */ \ - typedef typename Base::CoeffReturnType CoeffReturnType; /*!< \brief The return type for coefficient access. \details Depending on whether the object allows direct coefficient access (e.g. for a MatrixXd), this type is either 'const Scalar&' or simply 'Scalar' for objects that do not allow direct coefficient access. */ \ - typedef typename Eigen::internal::ref_selector<Base>::type Nested; \ - typedef typename Eigen::internal::traits<Base>::StorageKind StorageKind; \ - typedef typename Eigen::internal::traits<Base>::StorageIndex StorageIndex; \ - enum { RowsAtCompileTime = Eigen::internal::traits<Base>::RowsAtCompileTime, \ - ColsAtCompileTime = Eigen::internal::traits<Base>::ColsAtCompileTime, \ - Flags = Eigen::internal::traits<Base>::Flags, \ - SizeAtCompileTime = Base::SizeAtCompileTime, \ - MaxSizeAtCompileTime = Base::MaxSizeAtCompileTime, \ - IsVectorAtCompileTime = Base::IsVectorAtCompileTime }; \ - using Base::derived; \ + typedef typename Base::CoeffReturnType CoeffReturnType; /*!< \brief The return type for coefficient access. \details Depending on whether the object allows direct coefficient access (e.g. for a MatrixXd), this type is either 'const Scalar&' or simply 'Scalar' for objects that do not allow direct coefficient access. */ + typedef typename Eigen::internal::ref_selector<Base>::type Nested; + typedef typename Eigen::internal::traits<Base>::StorageKind StorageKind; +#if EIGEN_VERSION_AT_LEAST(3,2,91) + typedef typename Eigen::internal::traits<Base>::StorageIndex StorageIndex; +#else + typedef typename Eigen::internal::traits<Base>::Index StorageIndex; +#endif + enum { RowsAtCompileTime = Eigen::internal::traits<Base>::RowsAtCompileTime, + ColsAtCompileTime = Eigen::internal::traits<Base>::ColsAtCompileTime, + Flags = Eigen::internal::traits<Base>::Flags, + SizeAtCompileTime = Base::SizeAtCompileTime, + MaxSizeAtCompileTime = Base::MaxSizeAtCompileTime, + IsVectorAtCompileTime = Base::IsVectorAtCompileTime }; + using Base::derived; using Base::const_cast_derived; typedef typename Base::PacketScalar PacketScalar; @@ -94,4 +104,8 @@ namespace eigenpy }; // struct Ref<PlainObjectType> } +#if not EIGEN_VERSION_AT_LEAST(3,2,91) +#undef EIGEN_DEVICE_FUNC +#endif + #endif // ifndef __eigenpy_ref_hpp__ -- GitLab