5#ifndef __pinocchio_eigen_macros_hpp__ 6#define __pinocchio_eigen_macros_hpp__ 8#include "pinocchio/utils/eigen-fix.hpp" 11#define PINOCCHIO_EIGEN_PLAIN_TYPE(D) \ 12 Eigen::internal::plain_matrix_type<typename pinocchio::helper::argument_type<void(D)>::type>::type 13#define PINOCCHIO_EIGEN_PLAIN_TYPE_NO_PARENS(D) \ 14 Eigen::internal::plain_matrix_type<typename pinocchio::helper::argument_type<void D>::type>::type 18#define PINOCCHIO_EIGEN_PLAIN_COLUMN_MAJOR_TYPE(D) \ 19 pinocchio::helper::handle_return_type_without_typename< \ 20 D, Eigen::internal::plain_matrix_type_column_major>::type 23#define PINOCCHIO_EIGEN_PLAIN_ROW_MAJOR_TYPE(D) \ 24 pinocchio::helper::handle_return_type_without_typename< \ 25 D, ::pinocchio::fix::Eigen::internal::plain_matrix_type_row_major>::type 28#define PINOCCHIO_EIGEN_REF_CONST_TYPE(D) Eigen::internal::ref_selector<D>::type 29#if EIGEN_VERSION_AT_LEAST(3, 2, 90) 30 #define PINOCCHIO_EIGEN_REF_TYPE(D) Eigen::internal::ref_selector<D>::non_const_type 32 #define PINOCCHIO_EIGEN_REF_TYPE(D) \ 33 Eigen::internal::conditional< \ 34 bool(Eigen::internal::traits<D>::Flags & Eigen::NestByRefBit), D &, D>::type 38#if EIGEN_VERSION_AT_LEAST(3, 3, 0) 39 #define PINOCCHIO_EIGEN_DOT_PRODUCT_RETURN_TYPE(D1, D2) \ 40 Eigen::ScalarBinaryOpTraits< \ 41 typename Eigen::internal::traits<D1>::Scalar, \ 42 typename Eigen::internal::traits<D2>::Scalar>::ReturnType 44 #define PINOCCHIO_EIGEN_DOT_PRODUCT_RETURN_TYPE(D1, D2) \ 45 Eigen::internal::scalar_product_traits< \ 46 typename Eigen::internal::traits<D1>::Scalar, \ 47 typename Eigen::internal::traits<D2>::Scalar>::ReturnType 51#define PINOCCHIO_EIGEN_CONST_CAST(TYPE, OBJ) const_cast<TYPE &>(OBJ.derived()) 54#if EIGEN_VERSION_AT_LEAST(3, 2, 90) 55 #define PINOCCHIO_WITH_EIGEN_TENSOR_MODULE 62#ifdef PINOCCHIO_EIGEN_CHECK_MALLOC 63 #define PINOCCHIO_EIGEN_MALLOC(allowed) ::Eigen::internal::set_is_malloc_allowed(allowed) 64 #define PINOCCHIO_EIGEN_MALLOC_ALLOWED() PINOCCHIO_EIGEN_MALLOC(true) 65 #define PINOCCHIO_EIGEN_MALLOC_NOT_ALLOWED() PINOCCHIO_EIGEN_MALLOC(false) 66 #define PINOCCHIO_EIGEN_MALLOC_SAVE_STATUS() ::pinocchio::internal::save_eigen_malloc_status() 67 #define PINOCCHIO_EIGEN_MALLOC_RESTORE_STATUS() \ 68 PINOCCHIO_EIGEN_MALLOC((::pinocchio::internal::get_saved_eigen_malloc_status())) 70 #define PINOCCHIO_EIGEN_MALLOC(allowed) 71 #define PINOCCHIO_EIGEN_MALLOC_ALLOWED() 72 #define PINOCCHIO_EIGEN_MALLOC_NOT_ALLOWED() 73 #define PINOCCHIO_EIGEN_MALLOC_SAVE_STATUS() 74 #define PINOCCHIO_EIGEN_MALLOC_RESTORE_STATUS() 77#ifdef PINOCCHIO_EIGEN_CHECK_MALLOC 83 inline bool save_or_get_malloc_status(
bool update,
bool new_value =
false)
85 thread_local static bool value;
91 inline void save_eigen_malloc_status()
93 save_or_get_malloc_status(
true, ::Eigen::internal::is_malloc_allowed());
96 inline bool get_saved_eigen_malloc_status()
98 return save_or_get_malloc_status(
false);
Main pinocchio namespace.