5#ifndef __pinocchio_macros_hpp__ 6#define __pinocchio_macros_hpp__ 14#if (__cplusplus >= 202002L) 15 #define PINOCCHIO_WITH_CXX20_SUPPORT 18#if (__cplusplus >= 201703L || (defined(_MSVC_LANG) && _MSVC_LANG >= 201703)) 19 #define PINOCCHIO_WITH_CXX17_SUPPORT 22#if (__cplusplus >= 201402L || (defined(_MSVC_LANG) && _MSVC_LANG >= 201403)) 23 #define PINOCCHIO_WITH_CXX14_SUPPORT 26#if (__cplusplus >= 201103L || (defined(_MSC_VER) && _MSC_VER >= 1600)) 27 #define PINOCCHIO_WITH_CXX11_SUPPORT 30#define PINOCCHIO_STRING_LITERAL(string) #string 34#if defined(__GNUC__) || defined(__clang__) 35 #define PINOCCHIO_PRAGMA(x) _Pragma(#x) 36 #define PINOCCHIO_PRAGMA_MESSAGE(the_message) PINOCCHIO_PRAGMA(GCC message #the_message) 37 #define PINOCCHIO_PRAGMA_WARNING(the_message) PINOCCHIO_PRAGMA(GCC warning #the_message) 38 #define PINOCCHIO_PRAGMA_DEPRECATED(the_message) \ 39 PINOCCHIO_PRAGMA_WARNING(Deprecated : #the_message) 40 #define PINOCCHIO_PRAGMA_DEPRECATED_HEADER(old_header, new_header) \ 41 PINOCCHIO_PRAGMA_WARNING(Deprecated header file : #old_header has been replaced \ 42 by #new_header.\n Please use #new_header instead of #old_header.) 44 #define PINOCCHIO_PRAGMA(x) 45 #define PINOCCHIO_PRAGMA_MESSAGE(the_message) 46 #define PINOCCHIO_PRAGMA_WARNING(the_message) 47 #define PINOCCHIO_PRAGMA_DEPRECATED(the_message) 48 #define PINOCCHIO_PRAGMA_DEPRECATED_HEADER(old_header, new_header) 53#define PINOCCHIO_DONT_INLINE EIGEN_DONT_INLINE 56#define PINOCCHIO_NOT_A_MACRO 64 template<
typename T,
typename U>
73#define PINOCCHIO_MACRO_EMPTY_ARG 76#define PINOCCHIO_UNUSED_VARIABLE(var) (void)(var) 79#define PINOCCHIO_ASSERT_MATRIX_SPECIFIC_SIZE(type, M, nrows, ncols) \ 80 EIGEN_STATIC_ASSERT( \ 81 (type::RowsAtCompileTime == Eigen::Dynamic || type::RowsAtCompileTime == nrows) \ 82 && (type::ColsAtCompileTime == Eigen::Dynamic || type::ColsAtCompileTime == ncols), \ 83 THIS_METHOD_IS_ONLY_FOR_MATRICES_OF_A_SPECIFIC_SIZE); \ 84 assert(M.rows() == nrows && M.cols() == ncols); 89#define PINOCCHIO_STATIC_ASSERT(condition, msg) \ 91 int msg[(condition) ? 1 : -1]; \ 99 template<
typename D,
template<
typename>
class TypeAccess>
102 typedef typename TypeAccess<
typename argument_type<void(D)>::type>::type type;
108#if defined(__GNUC__) || defined(__clang__) 109 #define PINOCCHIO_COMPILER_DIAGNOSTIC_PUSH _Pragma("GCC diagnostic push") 110 #define PINOCCHIO_COMPILER_DIAGNOSTIC_POP _Pragma("GCC diagnostic pop") 111 #define PINOCCHIO_COMPILER_DIAGNOSTIC_IGNORED_DEPRECECATED_DECLARATIONS \ 112 _Pragma("GCC diagnostic ignored \"-Wdeprecated-declarations\"") 113 #define PINOCCHIO_COMPILER_DIAGNOSTIC_IGNORED_VARIADIC_MACROS \ 114 _Pragma("GCC diagnostic ignored \"-Wvariadic-macros\"") 115 #if defined(__clang__) 116 #define PINOCCHIO_COMPILER_DIAGNOSTIC_IGNORED_MAYBE_UNINITIALIZED 117 #define PINOCCHIO_COMPILER_DIAGNOSTIC_IGNORED_SELF_ASSIGN_OVERLOADED \ 118 _Pragma("GCC diagnostic ignored \"-Wself-assign-overloaded\"") 120 #define PINOCCHIO_COMPILER_DIAGNOSTIC_IGNORED_MAYBE_UNINITIALIZED \ 121 _Pragma("GCC diagnostic ignored \"-Wmaybe-uninitialized\"") 122 #define PINOCCHIO_COMPILER_DIAGNOSTIC_IGNORED_SELF_ASSIGN_OVERLOADED 125 #define PINOCCHIO_COMPILER_DIAGNOSTIC_PUSH _Pragma("warning(push)") 126 #define PINOCCHIO_COMPILER_DIAGNOSTIC_POP _Pragma("warning(pop)") 127 #define PINOCCHIO_COMPILER_DIAGNOSTIC_IGNORED_DEPRECECATED_DECLARATIONS \ 128 _Pragma("warning(disable : 4996)") 129 #define PINOCCHIO_COMPILER_DIAGNOSTIC_IGNORED_VARIADIC_MACROS 130 #define PINOCCHIO_COMPILER_DIAGNOSTIC_IGNORED_SELF_ASSIGN_OVERLOADED 131 #define PINOCCHIO_COMPILER_DIAGNOSTIC_IGNORED_MAYBE_UNINITIALIZED 133 #define PINOCCHIO_COMPILER_DIAGNOSTIC_PUSH 134 #define PINOCCHIO_COMPILER_DIAGNOSTIC_POP 135 #define PINOCCHIO_COMPILER_DIAGNOSTIC_IGNORED_DEPRECECATED_DECLARATIONS 136 #define PINOCCHIO_COMPILER_DIAGNOSTIC_IGNORED_VARIADIC_MACROS 137 #define PINOCCHIO_COMPILER_DIAGNOSTIC_IGNORED_SELF_ASSIGN_OVERLOADED 138 #define PINOCCHIO_COMPILER_DIAGNOSTIC_IGNORED_MAYBE_UNINITIALIZED 147 #pragma GCC system_header 150PINOCCHIO_COMPILER_DIAGNOSTIC_PUSH
151PINOCCHIO_COMPILER_DIAGNOSTIC_IGNORED_VARIADIC_MACROS
154 #define PINOCCHIO_PRETTY_FUNCTION __FUNCSIG__ 156 #define PINOCCHIO_PRETTY_FUNCTION __PRETTY_FUNCTION__ 161#if !defined(PINOCCHIO_NO_THROW) 162 #define PINOCCHIO_THROW(condition, exception_type, message) \ 165 throw exception_type(message); \ 168 #define PINOCCHIO_THROW_PRETTY(exception, message) \ 170 std::stringstream ss; \ 171 ss << "From file: " << __FILE__ << "\n"; \ 172 ss << "in function: " << PINOCCHIO_PRETTY_FUNCTION << "\n"; \ 173 ss << "at line: " << __LINE__ << "\n"; \ 174 ss << "message: " << message << "\n"; \ 175 throw exception(ss.str()); \ 178 #define PINOCCHIO_THROW(condition, exception_type, message) 179 #define PINOCCHIO_THROW_PRETTY(exception, message) 182#define _PINOCCHIO_EXPAND(x) x 183#define _PINOCCHIO_GET_OVERRIDE_FOR_CHECK_INPUT_ARGUMENT(_1, _2, MACRO_NAME, ...) MACRO_NAME 185#define _PINOCCHIO_CHECK_INPUT_ARGUMENT_2(condition, message) \ 186 PINOCCHIO_THROW(condition, std::invalid_argument, message) 188#define _PINOCCHIO_CHECK_INPUT_ARGUMENT_1(condition) \ 189 _PINOCCHIO_CHECK_INPUT_ARGUMENT_2( \ 190 condition, "The following check on the input argument has failed: " #condition) 192#define _PINOCCHIO_CHECK_INPUT_ARGUMENT_0 196#define PINOCCHIO_CHECK_INPUT_ARGUMENT(...) \ 197 _PINOCCHIO_EXPAND(_PINOCCHIO_EXPAND(_PINOCCHIO_GET_OVERRIDE_FOR_CHECK_INPUT_ARGUMENT( \ 198 __VA_ARGS__, _PINOCCHIO_CHECK_INPUT_ARGUMENT_2, _PINOCCHIO_CHECK_INPUT_ARGUMENT_1, \ 199 _PINOCCHIO_CHECK_INPUT_ARGUMENT_0))(__VA_ARGS__)) 201#define _PINOCCHIO_GET_OVERRIDE_FOR_CHECK_ARGUMENT_SIZE(_1, _2, _3, MACRO_NAME, ...) MACRO_NAME 203#define _PINOCCHIO_CHECK_ARGUMENT_SIZE_3(size, expected_size, message) \ 204 if (size != expected_size) \ 206 std::ostringstream oss; \ 207 oss << "wrong argument size: expected " << expected_size << ", got " << size << std::endl; \ 208 oss << "hint: " << message << std::endl; \ 209 PINOCCHIO_THROW(false, std::invalid_argument, oss.str()); \ 212#define _PINOCCHIO_CHECK_ARGUMENT_SIZE_2(size, expected_size) \ 213 _PINOCCHIO_CHECK_ARGUMENT_SIZE_3( \ 214 size, expected_size, \ 215 PINOCCHIO_STRING_LITERAL(size) " is different from " PINOCCHIO_STRING_LITERAL(expected_size)) 217#define _PINOCCHIO_CHECK_ARGUMENT_SIZE_1 220#define PINOCCHIO_CHECK_ARGUMENT_SIZE(...) \ 221 _PINOCCHIO_EXPAND(_PINOCCHIO_EXPAND(_PINOCCHIO_GET_OVERRIDE_FOR_CHECK_ARGUMENT_SIZE( \ 222 __VA_ARGS__, _PINOCCHIO_CHECK_ARGUMENT_SIZE_3, _PINOCCHIO_CHECK_ARGUMENT_SIZE_2, \ 223 _PINOCCHIO_CHECK_ARGUMENT_SIZE_1))(__VA_ARGS__)) 225PINOCCHIO_COMPILER_DIAGNOSTIC_POP
Main pinocchio namespace.