11 #ifndef EIGEN_MACROS_H 12 #define EIGEN_MACROS_H 14 #define EIGEN_WORLD_VERSION 3 15 #define EIGEN_MAJOR_VERSION 2 16 #define EIGEN_MINOR_VERSION 9 18 #define EIGEN_VERSION_AT_LEAST(x,y,z) (EIGEN_WORLD_VERSION>x || (EIGEN_WORLD_VERSION>=x && \ 19 (EIGEN_MAJOR_VERSION>y || (EIGEN_MAJOR_VERSION>=y && \ 20 EIGEN_MINOR_VERSION>=z)))) 27 #define EIGEN_COMP_GNUC 1 29 #define EIGEN_COMP_GNUC 0 33 #if defined(__clang__) 34 #define EIGEN_COMP_CLANG 1 36 #define EIGEN_COMP_CLANG 0 42 #define EIGEN_COMP_LLVM 1 44 #define EIGEN_COMP_LLVM 0 48 #if defined(__INTEL_COMPILER) 49 #define EIGEN_COMP_ICC __INTEL_COMPILER 51 #define EIGEN_COMP_ICC 0 55 #if defined(__MINGW32__) 56 #define EIGEN_COMP_MINGW 1 58 #define EIGEN_COMP_MINGW 0 62 #if defined(__SUNPRO_CC) 63 #define EIGEN_COMP_SUNCC 1 65 #define EIGEN_COMP_SUNCC 0 70 #define EIGEN_COMP_MSVC _MSC_VER 72 #define EIGEN_COMP_MSVC 0 76 #if EIGEN_COMP_MSVC && !(EIGEN_COMP_ICC) 77 #define EIGEN_COMP_MSVC_STRICT _MSC_VER 79 #define EIGEN_COMP_MSVC_STRICT 0 83 #if defined(__IBMCPP__) || defined(__xlc__) 84 #define EIGEN_COMP_IBM 1 86 #define EIGEN_COMP_IBM 0 91 #define EIGEN_COMP_PGI 1 93 #define EIGEN_COMP_PGI 0 97 #if defined(__CC_ARM) || defined(__ARMCC_VERSION) 98 #define EIGEN_COMP_ARM 1 100 #define EIGEN_COMP_ARM 0 105 #if EIGEN_COMP_GNUC && !(EIGEN_COMP_CLANG || EIGEN_COMP_ICC || EIGEN_COMP_MINGW || EIGEN_COMP_PGI || EIGEN_COMP_IBM || EIGEN_COMP_ARM ) 106 #define EIGEN_COMP_GNUC_STRICT 1 108 #define EIGEN_COMP_GNUC_STRICT 0 113 #define EIGEN_GNUC_AT_LEAST(x,y) ((__GNUC__==x && __GNUC_MINOR__>=y) || __GNUC__>x) 114 #define EIGEN_GNUC_AT_MOST(x,y) ((__GNUC__==x && __GNUC_MINOR__<=y) || __GNUC__<x) 115 #define EIGEN_GNUC_AT(x,y) ( __GNUC__==x && __GNUC_MINOR__==y ) 117 #define EIGEN_GNUC_AT_LEAST(x,y) 0 118 #define EIGEN_GNUC_AT_MOST(x,y) 0 119 #define EIGEN_GNUC_AT(x,y) 0 123 #if EIGEN_COMP_GNUC && (__GNUC__ <= 3) 124 #define EIGEN_GCC3_OR_OLDER 1 126 #define EIGEN_GCC3_OR_OLDER 0 132 #if defined(__x86_64__) || defined(_M_X64) || defined(__amd64) 133 #define EIGEN_ARCH_x86_64 1 135 #define EIGEN_ARCH_x86_64 0 138 #if defined(__i386__) || defined(_M_IX86) || defined(_X86_) || defined(__i386) 139 #define EIGEN_ARCH_i386 1 141 #define EIGEN_ARCH_i386 0 144 #if EIGEN_ARCH_x86_64 || EIGEN_ARCH_i386 145 #define EIGEN_ARCH_i386_OR_x86_64 1 147 #define EIGEN_ARCH_i386_OR_x86_64 0 152 #define EIGEN_ARCH_ARM 1 154 #define EIGEN_ARCH_ARM 0 158 #if defined(__aarch64__) 159 #define EIGEN_ARCH_ARM64 1 161 #define EIGEN_ARCH_ARM64 0 164 #if EIGEN_ARCH_ARM || EIGEN_ARCH_ARM64 165 #define EIGEN_ARCH_ARM_OR_ARM64 1 167 #define EIGEN_ARCH_ARM_OR_ARM64 0 171 #if defined(__mips__) || defined(__mips) 172 #define EIGEN_ARCH_MIPS 1 174 #define EIGEN_ARCH_MIPS 0 178 #if defined(__sparc__) || defined(__sparc) 179 #define EIGEN_ARCH_SPARC 1 181 #define EIGEN_ARCH_SPARC 0 185 #if defined(__ia64__) 186 #define EIGEN_ARCH_IA64 1 188 #define EIGEN_ARCH_IA64 0 192 #if defined(__powerpc__) || defined(__ppc__) || defined(_M_PPC) 193 #define EIGEN_ARCH_PPC 1 195 #define EIGEN_ARCH_PPC 0 203 #if defined(__unix__) || defined(__unix) 204 #define EIGEN_OS_UNIX 1 206 #define EIGEN_OS_UNIX 0 210 #if defined(__linux__) 211 #define EIGEN_OS_LINUX 1 213 #define EIGEN_OS_LINUX 0 218 #if defined(__ANDROID__) || defined(ANDROID) 219 #define EIGEN_OS_ANDROID 1 221 #define EIGEN_OS_ANDROID 0 225 #if defined(__gnu_linux__) && !(EIGEN_OS_ANDROID) 226 #define EIGEN_OS_GNULINUX 1 228 #define EIGEN_OS_GNULINUX 0 232 #if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__bsdi__) || defined(__DragonFly__) 233 #define EIGEN_OS_BSD 1 235 #define EIGEN_OS_BSD 0 239 #if defined(__APPLE__) 240 #define EIGEN_OS_MAC 1 242 #define EIGEN_OS_MAC 0 247 #define EIGEN_OS_QNX 1 249 #define EIGEN_OS_QNX 0 254 #define EIGEN_OS_WIN 1 256 #define EIGEN_OS_WIN 0 261 #define EIGEN_OS_WIN64 1 263 #define EIGEN_OS_WIN64 0 267 #if defined(_WIN32_WCE) 268 #define EIGEN_OS_WINCE 1 270 #define EIGEN_OS_WINCE 0 274 #if defined(__CYGWIN__) 275 #define EIGEN_OS_CYGWIN 1 277 #define EIGEN_OS_CYGWIN 0 281 #if EIGEN_OS_WIN && !( EIGEN_OS_WINCE || EIGEN_OS_CYGWIN ) 282 #define EIGEN_OS_WIN_STRICT 1 284 #define EIGEN_OS_WIN_STRICT 0 288 #if (defined(sun) || defined(__sun)) && !(defined(__SVR4) || defined(__svr4__)) 289 #define EIGEN_OS_SUN 1 291 #define EIGEN_OS_SUN 0 295 #if (defined(sun) || defined(__sun)) && (defined(__SVR4) || defined(__svr4__)) 296 #define EIGEN_OS_SOLARIS 1 298 #define EIGEN_OS_SOLARIS 0 302 #if EIGEN_GNUC_AT_MOST(4,3) && !defined(__clang__) 304 #define EIGEN_SAFE_TO_USE_STANDARD_ASSERT_MACRO 0 306 #define EIGEN_SAFE_TO_USE_STANDARD_ASSERT_MACRO 1 316 #if defined(__GNUC__) && !(defined(__i386__) || defined(__x86_64__) || defined(__ia64__)) 317 #define EIGEN_GCC_AND_ARCH_DOESNT_WANT_STACK_ALIGNMENT 1 319 #define EIGEN_GCC_AND_ARCH_DOESNT_WANT_STACK_ALIGNMENT 0 323 #if !EIGEN_GCC_AND_ARCH_DOESNT_WANT_STACK_ALIGNMENT \ 324 && !EIGEN_GCC3_OR_OLDER \ 325 && !defined(__SUNPRO_CC) \ 326 && !defined(__QNXNTO__) 327 #define EIGEN_ARCH_WANTS_STACK_ALIGNMENT 1 329 #define EIGEN_ARCH_WANTS_STACK_ALIGNMENT 0 332 #ifdef EIGEN_DONT_ALIGN 333 #ifndef EIGEN_DONT_ALIGN_STATICALLY 334 #define EIGEN_DONT_ALIGN_STATICALLY 336 #define EIGEN_ALIGN 0 338 #define EIGEN_ALIGN 1 343 #if EIGEN_ARCH_WANTS_STACK_ALIGNMENT && !defined(EIGEN_DONT_ALIGN_STATICALLY) 344 #define EIGEN_ALIGN_STATICALLY 1 346 #define EIGEN_ALIGN_STATICALLY 0 347 #ifndef EIGEN_DISABLE_UNALIGNED_ARRAY_ASSERT 348 #define EIGEN_DISABLE_UNALIGNED_ARRAY_ASSERT 352 #ifdef EIGEN_DEFAULT_TO_ROW_MAJOR 353 #define EIGEN_DEFAULT_MATRIX_STORAGE_ORDER_OPTION RowMajor 355 #define EIGEN_DEFAULT_MATRIX_STORAGE_ORDER_OPTION ColMajor 358 #ifndef EIGEN_DEFAULT_DENSE_INDEX_TYPE 359 #define EIGEN_DEFAULT_DENSE_INDEX_TYPE std::ptrdiff_t 364 #ifndef __has_feature 365 # define __has_feature(x) 0 369 #if (__has_feature(cxx_rvalue_references) || \ 370 (defined(__cplusplus) && __cplusplus >= 201103L) || \ 371 (defined(_MSC_VER) && _MSC_VER >= 1600)) 372 #define EIGEN_HAVE_RVALUE_REFERENCES 378 # define EIGEN_HAS_BUILTIN(x) __has_builtin(x) 380 # define EIGEN_HAS_BUILTIN(x) 0 388 #ifndef EIGEN_FAST_MATH 389 #define EIGEN_FAST_MATH 1 392 #define EIGEN_DEBUG_VAR(x) std::cerr << #x << " = " << x << std::endl; 395 #define EIGEN_CAT2(a,b) a ## b 396 #define EIGEN_CAT(a,b) EIGEN_CAT2(a,b) 399 #define EIGEN_MAKESTRING2(a) #a 400 #define EIGEN_MAKESTRING(a) EIGEN_MAKESTRING2(a) 405 #if (defined _MSC_VER) || (defined __INTEL_COMPILER) 406 #define EIGEN_STRONG_INLINE __forceinline 408 #define EIGEN_STRONG_INLINE inline 418 #if EIGEN_GNUC_AT_LEAST(4,0) 419 #define EIGEN_ALWAYS_INLINE __attribute__((always_inline)) inline 421 #define EIGEN_ALWAYS_INLINE EIGEN_STRONG_INLINE 424 #if (defined __GNUC__) 425 #define EIGEN_DONT_INLINE __attribute__((noinline)) 426 #elif (defined _MSC_VER) 427 #define EIGEN_DONT_INLINE __declspec(noinline) 429 #define EIGEN_DONT_INLINE 432 #if (defined __GNUC__) 433 #define EIGEN_PERMISSIVE_EXPR __extension__ 435 #define EIGEN_PERMISSIVE_EXPR 442 #define EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS 443 #define EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS inline 446 # ifndef EIGEN_NO_DEBUG 447 # define EIGEN_NO_DEBUG 452 #ifdef EIGEN_NO_DEBUG 453 #define eigen_plain_assert(x) 455 #if EIGEN_SAFE_TO_USE_STANDARD_ASSERT_MACRO 458 inline bool copy_bool(
bool b) {
return b; }
461 #define eigen_plain_assert(x) assert(x) 472 EIGEN_DONT_INLINE
bool copy_bool(
bool b) {
return b; }
474 inline void assert_fail(
const char *condition,
const char *
function,
const char *file,
int line)
476 std::cerr <<
"assertion failed: " << condition <<
" in function " <<
function <<
" at " << file <<
":" << line << std::endl;
481 #define eigen_plain_assert(x) \ 483 if(!Eigen::internal::copy_bool(x)) \ 484 Eigen::internal::assert_fail(EIGEN_MAKESTRING(x), __PRETTY_FUNCTION__, __FILE__, __LINE__); \ 491 #define eigen_assert(x) eigen_plain_assert(x) 494 #ifdef EIGEN_INTERNAL_DEBUGGING 495 #define eigen_internal_assert(x) eigen_assert(x) 497 #define eigen_internal_assert(x) 500 #ifdef EIGEN_NO_DEBUG 501 #define EIGEN_ONLY_USED_FOR_DEBUG(x) (void)x 503 #define EIGEN_ONLY_USED_FOR_DEBUG(x) 506 #ifndef EIGEN_NO_DEPRECATED_WARNING 507 #if (defined __GNUC__) 508 #define EIGEN_DEPRECATED __attribute__((deprecated)) 509 #elif (defined _MSC_VER) 510 #define EIGEN_DEPRECATED __declspec(deprecated) 512 #define EIGEN_DEPRECATED 515 #define EIGEN_DEPRECATED 518 #if (defined __GNUC__) 519 #define EIGEN_UNUSED __attribute__((unused)) 527 template<
typename T>
void ignore_unused_variable(
const T&) {}
530 #define EIGEN_UNUSED_VARIABLE(var) Eigen::internal::ignore_unused_variable(var); 532 #if !defined(EIGEN_ASM_COMMENT) 533 #if (defined __GNUC__) && ( defined(__i386__) || defined(__x86_64__) ) 534 #define EIGEN_ASM_COMMENT(X) __asm__("#" X) 536 #define EIGEN_ASM_COMMENT(X) 547 #if (defined __GNUC__) || (defined __PGI) || (defined __IBMCPP__) || (defined __ARMCC_VERSION) 548 #define EIGEN_ALIGN_TO_BOUNDARY(n) __attribute__((aligned(n))) 549 #elif (defined _MSC_VER) 550 #define EIGEN_ALIGN_TO_BOUNDARY(n) __declspec(align(n)) 551 #elif (defined __SUNPRO_CC) 553 #define EIGEN_ALIGN_TO_BOUNDARY(n) __attribute__((aligned(n))) 555 #error Please tell me what is the equivalent of __attribute__((aligned(n))) for your compiler 558 #define EIGEN_ALIGN8 EIGEN_ALIGN_TO_BOUNDARY(8) 559 #define EIGEN_ALIGN16 EIGEN_ALIGN_TO_BOUNDARY(16) 561 #if EIGEN_ALIGN_STATICALLY 562 #define EIGEN_USER_ALIGN_TO_BOUNDARY(n) EIGEN_ALIGN_TO_BOUNDARY(n) 563 #define EIGEN_USER_ALIGN16 EIGEN_ALIGN16 565 #define EIGEN_USER_ALIGN_TO_BOUNDARY(n) 566 #define EIGEN_USER_ALIGN16 569 #ifdef EIGEN_DONT_USE_RESTRICT_KEYWORD 570 #define EIGEN_RESTRICT 572 #ifndef EIGEN_RESTRICT 573 #define EIGEN_RESTRICT __restrict 576 #ifndef EIGEN_STACK_ALLOCATION_LIMIT 578 #define EIGEN_STACK_ALLOCATION_LIMIT 131072 581 #ifndef EIGEN_DEFAULT_IO_FORMAT 582 #ifdef EIGEN_MAKING_DOCS 585 #define EIGEN_DEFAULT_IO_FORMAT Eigen::IOFormat(3, 0, " ", "\n", "", "") 587 #define EIGEN_DEFAULT_IO_FORMAT Eigen::IOFormat() 594 #if defined(_MSC_VER) && (_MSC_VER < 1900) && (!defined(__INTEL_COMPILER)) 595 #define EIGEN_INHERIT_ASSIGNMENT_EQUAL_OPERATOR(Derived) \ 596 using Base::operator =; 597 #elif defined(__clang__) // workaround clang bug (see http://forum.kde.org/viewtopic.php?f=74&t=102653) 598 #define EIGEN_INHERIT_ASSIGNMENT_EQUAL_OPERATOR(Derived) \ 599 using Base::operator =; \ 600 EIGEN_STRONG_INLINE Derived& operator=(const Derived& other) { Base::operator=(other); return *this; } \ 601 template <typename OtherDerived> \ 602 EIGEN_STRONG_INLINE Derived& operator=(const DenseBase<OtherDerived>& other) { Base::operator=(other.derived()); return *this; } 604 #define EIGEN_INHERIT_ASSIGNMENT_EQUAL_OPERATOR(Derived) \ 605 using Base::operator =; \ 606 EIGEN_STRONG_INLINE Derived& operator=(const Derived& other) \ 608 Base::operator=(other); \ 617 #define EIGEN_INHERIT_ASSIGNMENT_OPERATORS(Derived) EIGEN_INHERIT_ASSIGNMENT_EQUAL_OPERATOR(Derived) 627 #define EIGEN_GENERIC_PUBLIC_INTERFACE(Derived) \ 628 typedef typename Eigen::internal::traits<Derived>::Scalar Scalar; \ 629 typedef typename Eigen::NumTraits<Scalar>::Real RealScalar; \ 630 typedef typename Base::CoeffReturnType CoeffReturnType; \ 631 typedef typename Eigen::internal::nested<Derived>::type Nested; \ 632 typedef typename Eigen::internal::traits<Derived>::StorageKind StorageKind; \ 633 typedef typename Eigen::internal::traits<Derived>::Index Index; \ 634 enum { RowsAtCompileTime = Eigen::internal::traits<Derived>::RowsAtCompileTime, \ 635 ColsAtCompileTime = Eigen::internal::traits<Derived>::ColsAtCompileTime, \ 636 Flags = Eigen::internal::traits<Derived>::Flags, \ 637 CoeffReadCost = Eigen::internal::traits<Derived>::CoeffReadCost, \ 638 SizeAtCompileTime = Base::SizeAtCompileTime, \ 639 MaxSizeAtCompileTime = Base::MaxSizeAtCompileTime, \ 640 IsVectorAtCompileTime = Base::IsVectorAtCompileTime }; 643 #define EIGEN_DENSE_PUBLIC_INTERFACE(Derived) \ 644 typedef typename Eigen::internal::traits<Derived>::Scalar Scalar; \ 645 typedef typename Eigen::NumTraits<Scalar>::Real RealScalar; \ 646 typedef typename Base::PacketScalar PacketScalar; \ 647 typedef typename Base::CoeffReturnType CoeffReturnType; \ 648 typedef typename Eigen::internal::nested<Derived>::type Nested; \ 649 typedef typename Eigen::internal::traits<Derived>::StorageKind StorageKind; \ 650 typedef typename Eigen::internal::traits<Derived>::Index Index; \ 651 enum { RowsAtCompileTime = Eigen::internal::traits<Derived>::RowsAtCompileTime, \ 652 ColsAtCompileTime = Eigen::internal::traits<Derived>::ColsAtCompileTime, \ 653 MaxRowsAtCompileTime = Eigen::internal::traits<Derived>::MaxRowsAtCompileTime, \ 654 MaxColsAtCompileTime = Eigen::internal::traits<Derived>::MaxColsAtCompileTime, \ 655 Flags = Eigen::internal::traits<Derived>::Flags, \ 656 CoeffReadCost = Eigen::internal::traits<Derived>::CoeffReadCost, \ 657 SizeAtCompileTime = Base::SizeAtCompileTime, \ 658 MaxSizeAtCompileTime = Base::MaxSizeAtCompileTime, \ 659 IsVectorAtCompileTime = Base::IsVectorAtCompileTime }; \ 660 using Base::derived; \ 661 using Base::const_cast_derived; 664 #define EIGEN_PLAIN_ENUM_MIN(a,b) (((int)a <= (int)b) ? (int)a : (int)b) 665 #define EIGEN_PLAIN_ENUM_MAX(a,b) (((int)a >= (int)b) ? (int)a : (int)b) 670 #define EIGEN_SIZE_MIN_PREFER_DYNAMIC(a,b) (((int)a == 0 || (int)b == 0) ? 0 \ 671 : ((int)a == 1 || (int)b == 1) ? 1 \ 672 : ((int)a == Dynamic || (int)b == Dynamic) ? Dynamic \ 673 : ((int)a <= (int)b) ? (int)a : (int)b) 678 #define EIGEN_SIZE_MIN_PREFER_FIXED(a,b) (((int)a == 0 || (int)b == 0) ? 0 \ 679 : ((int)a == 1 || (int)b == 1) ? 1 \ 680 : ((int)a == Dynamic && (int)b == Dynamic) ? Dynamic \ 681 : ((int)a == Dynamic) ? (int)b \ 682 : ((int)b == Dynamic) ? (int)a \ 683 : ((int)a <= (int)b) ? (int)a : (int)b) 686 #define EIGEN_SIZE_MAX(a,b) (((int)a == Dynamic || (int)b == Dynamic) ? Dynamic \ 687 : ((int)a >= (int)b) ? (int)a : (int)b) 689 #define EIGEN_ADD_COST(a,b) int(a)==Dynamic || int(b)==Dynamic ? Dynamic : int(a)+int(b) 691 #define EIGEN_LOGICAL_XOR(a,b) (((a) || (b)) && !((a) && (b))) 693 #define EIGEN_IMPLIES(a,b) (!(a) || (b)) 695 #define EIGEN_MAKE_CWISE_BINARY_OP(METHOD,FUNCTOR) \ 696 template<typename OtherDerived> \ 697 EIGEN_STRONG_INLINE const CwiseBinaryOp<FUNCTOR<Scalar>, const Derived, const OtherDerived> \ 698 (METHOD)(const EIGEN_CURRENT_STORAGE_BASE_CLASS<OtherDerived> &other) const \ 700 return CwiseBinaryOp<FUNCTOR<Scalar>, const Derived, const OtherDerived>(derived(), other.derived()); \ 704 #define EIGEN_CWISE_PRODUCT_RETURN_TYPE(LHS,RHS) \ 706 internal::scalar_product_op< \ 707 typename internal::traits<LHS>::Scalar, \ 708 typename internal::traits<RHS>::Scalar \ 714 #endif // EIGEN_MACROS_H
Definition: Eigen_Colamd.h:50