5 #ifndef __eigenpy_fwd_hpp__
6 #define __eigenpy_fwd_hpp__
9 #define EIGENPY_CLANG_COMPILER
10 #elif defined(__GNUC__)
11 #define EIGENPY_GCC_COMPILER
12 #elif defined(_MSC_VER)
13 #define EIGENPY_MSVC_COMPILER
16 #if (__cplusplus >= 201703L || (defined(_MSVC_LANG) && _MSVC_LANG >= 201703))
17 #define EIGENPY_WITH_CXX17_SUPPORT
20 #if (__cplusplus >= 201402L || (defined(_MSVC_LANG) && _MSVC_LANG >= 201403))
21 #define EIGENPY_WITH_CXX14_SUPPORT
24 #if (__cplusplus >= 201103L || (defined(_MSC_VER) && _MSC_VER >= 1600))
25 #define EIGENPY_WITH_CXX11_SUPPORT
28 #define EIGENPY_STRING_LITERAL(string) #string
29 #define EIGENPY_STRINGIZE(string) EIGENPY_STRING_LITERAL(string)
30 #define _EIGENPY_PPCAT(A, B) A##B
31 #define EIGENPY_PPCAT(A, B) _EIGENPY_PPCAT(A, B)
32 #define EIGENPY_STRINGCAT(A, B) A B
36 #if defined(EIGENPY_CLANG_COMPILER) || defined(EIGENPY_GCC_COMPILER)
37 #define EIGENPY_PRAGMA(x) _Pragma(#x)
38 #define EIGENPY_PRAGMA_MESSAGE(the_message) \
39 EIGENPY_PRAGMA(GCC message the_message)
40 #define EIGENPY_PRAGMA_WARNING(the_message) \
41 EIGENPY_PRAGMA(GCC warning the_message)
42 #define EIGENPY_PRAGMA_DEPRECATED(the_message) \
43 EIGENPY_PRAGMA_WARNING(Deprecated : the_message)
44 #define EIGENPY_PRAGMA_DEPRECATED_HEADER(old_header, new_header) \
45 EIGENPY_PRAGMA_WARNING( \
46 Deprecated header file \
47 : #old_header has been replaced \
48 by #new_header.\n Please use #new_header instead of #old_header.)
50 #define EIGENPY_PRAGMA(x) __pragma(#x)
51 #define EIGENPY_PRAGMA_MESSAGE(the_message) \
52 EIGENPY_PRAGMA(message(#the_message))
53 #define EIGENPY_PRAGMA_WARNING(the_message) \
54 EIGENPY_PRAGMA(message(EIGENPY_STRINGCAT("WARNING: ", the_message)))
57 #define EIGENPY_DEPRECATED_MACRO(macro, the_message) \
58 EIGENPY_PRAGMA_WARNING( \
59 EIGENPY_STRINGCAT("this macro is deprecated: ", the_message))
60 #define EIGENPY_DEPRECATED_FILE(the_message) \
61 EIGENPY_PRAGMA_WARNING( \
62 EIGENPY_STRINGCAT("this file is deprecated: ", the_message))
64 #define EIGENPY_DOCUMENTATION_START_IGNORE
65 #define EIGENPY_DOCUMENTATION_END_IGNORE
67 #include "eigenpy/config.hpp"
68 #include <boost/type_traits/is_base_of.hpp>
73 #define BOOST_BIND_GLOBAL_PLACEHOLDERS
74 #include <boost/python.hpp>
75 #include <boost/python/scope.hpp>
77 #include <type_traits>
86 #define NO_IMPORT_ARRAY
88 #undef NO_IMPORT_ARRAY
90 #undef BOOST_BIND_GLOBAL_PLACEHOLDERS
93 #include <Eigen/Sparse>
94 #include <Eigen/Geometry>
96 #ifdef EIGENPY_WITH_CXX11_SUPPORT
97 #include <unsupported/Eigen/CXX11/Tensor>
98 #define EIGENPY_WITH_TENSOR_SUPPORT
101 #if EIGEN_VERSION_AT_LEAST(3, 2, 90)
102 #define EIGENPY_DEFAULT_ALIGNMENT_VALUE Eigen::Aligned16
104 #define EIGENPY_DEFAULT_ALIGNMENT_VALUE Eigen::Aligned
107 #define EIGENPY_DEFAULT_ALIGN_BYTES EIGEN_DEFAULT_ALIGN_BYTES
109 #define EIGENPY_NO_ALIGNMENT_VALUE Eigen::Unaligned
111 #define EIGENPY_UNUSED_VARIABLE(var) (void)(var)
112 #define EIGENPY_UNUSED_TYPE(type) EIGENPY_UNUSED_VARIABLE((type *)(NULL))
114 #define EIGENPY_USED_VARIABLE_ONLY_IN_DEBUG_MODE(var)
116 #define EIGENPY_USED_VARIABLE_ONLY_IN_DEBUG_MODE(var) \
117 EIGENPY_UNUSED_VARIABLE(var)
120 #ifdef EIGENPY_WITH_CXX11_SUPPORT
122 #define EIGENPY_SHARED_PTR_HOLDER_TYPE(T) ::std::shared_ptr<T>
124 #include <boost/shared_ptr.hpp>
125 #define EIGENPY_SHARED_PTR_HOLDER_TYPE(T) ::boost::shared_ptr<T>
133 template <
typename MatType,
typename Scalar>
135 template <
typename MatType,
typename Scalar>
138 template <
typename T>
140 typedef typename boost::remove_const<
144 template <
typename EigenType>
147 typedef typename boost::mpl::if_<
148 boost::is_base_of<Eigen::MatrixBase<EigenType_>,
EigenType_>,
149 Eigen::MatrixBase<EigenType_>,
150 typename boost::mpl::if_<
151 boost::is_base_of<Eigen::SparseMatrixBase<EigenType_>,
EigenType_>,
152 Eigen::SparseMatrixBase<EigenType_>
153 #ifdef EIGENPY_WITH_TENSOR_SUPPORT
155 typename boost::mpl::if_<
156 boost::is_base_of<Eigen::TensorBase<EigenType_>,
EigenType_>,
157 Eigen::TensorBase<EigenType_>,
void>
::type
164 typedef typename boost::mpl::if_<
165 boost::is_const<typename boost::remove_reference<EigenType>::type>,
169 template <
typename EigenType>
172 template <
typename MatType,
int Options,
typename Str
ide>
174 typedef typename Eigen::internal::traits<
175 Eigen::Ref<MatType, Options, Stride> >::PlainObjectType
type;
178 #ifdef EIGENPY_WITH_TENSOR_SUPPORT
179 template <
typename TensorType>
181 typedef TensorType type;
186 template <
class T1,
class T2>
188 template <
class U,
class V>
189 static auto check(
U *) -> decltype(std::declval<U>() == std::declval<V>());
190 template <
typename,
typename>
191 static auto check(...) -> std::false_type;
193 using type =
typename std::is_same<bool, decltype(check<T1, T2>(0))>::
type;
197 template <
class T1,
class T2 = T1>
205 #endif // ifndef __eigenpy_fwd_hpp__