Eigne Matrix Class Library
Dependents: MPC_current_control HydraulicControlBoard_SW AHRS Test_ekf ... more
src/Core/util/Macros.h@0:13a5d365ba16, 2016-10-13 (annotated)
- Committer:
- ykuroda
- Date:
- Thu Oct 13 04:07:23 2016 +0000
- Revision:
- 0:13a5d365ba16
First commint, Eigne Matrix Class Library
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
ykuroda | 0:13a5d365ba16 | 1 | // This file is part of Eigen, a lightweight C++ template library |
ykuroda | 0:13a5d365ba16 | 2 | // for linear algebra. |
ykuroda | 0:13a5d365ba16 | 3 | // |
ykuroda | 0:13a5d365ba16 | 4 | // Copyright (C) 2008-2010 Gael Guennebaud <gael.guennebaud@inria.fr> |
ykuroda | 0:13a5d365ba16 | 5 | // Copyright (C) 2006-2008 Benoit Jacob <jacob.benoit.1@gmail.com> |
ykuroda | 0:13a5d365ba16 | 6 | // |
ykuroda | 0:13a5d365ba16 | 7 | // This Source Code Form is subject to the terms of the Mozilla |
ykuroda | 0:13a5d365ba16 | 8 | // Public License v. 2.0. If a copy of the MPL was not distributed |
ykuroda | 0:13a5d365ba16 | 9 | // with this file, You can obtain one at http://mozilla.org/MPL/2.0/. |
ykuroda | 0:13a5d365ba16 | 10 | |
ykuroda | 0:13a5d365ba16 | 11 | #ifndef EIGEN_MACROS_H |
ykuroda | 0:13a5d365ba16 | 12 | #define EIGEN_MACROS_H |
ykuroda | 0:13a5d365ba16 | 13 | |
ykuroda | 0:13a5d365ba16 | 14 | #define EIGEN_WORLD_VERSION 3 |
ykuroda | 0:13a5d365ba16 | 15 | #define EIGEN_MAJOR_VERSION 2 |
ykuroda | 0:13a5d365ba16 | 16 | #define EIGEN_MINOR_VERSION 8 |
ykuroda | 0:13a5d365ba16 | 17 | |
ykuroda | 0:13a5d365ba16 | 18 | #define EIGEN_VERSION_AT_LEAST(x,y,z) (EIGEN_WORLD_VERSION>x || (EIGEN_WORLD_VERSION>=x && \ |
ykuroda | 0:13a5d365ba16 | 19 | (EIGEN_MAJOR_VERSION>y || (EIGEN_MAJOR_VERSION>=y && \ |
ykuroda | 0:13a5d365ba16 | 20 | EIGEN_MINOR_VERSION>=z)))) |
ykuroda | 0:13a5d365ba16 | 21 | |
ykuroda | 0:13a5d365ba16 | 22 | |
ykuroda | 0:13a5d365ba16 | 23 | // Compiler identification, EIGEN_COMP_* |
ykuroda | 0:13a5d365ba16 | 24 | |
ykuroda | 0:13a5d365ba16 | 25 | /// \internal EIGEN_COMP_GNUC set to 1 for all compilers compatible with GCC |
ykuroda | 0:13a5d365ba16 | 26 | #ifdef __GNUC__ |
ykuroda | 0:13a5d365ba16 | 27 | #define EIGEN_COMP_GNUC 1 |
ykuroda | 0:13a5d365ba16 | 28 | #else |
ykuroda | 0:13a5d365ba16 | 29 | #define EIGEN_COMP_GNUC 0 |
ykuroda | 0:13a5d365ba16 | 30 | #endif |
ykuroda | 0:13a5d365ba16 | 31 | |
ykuroda | 0:13a5d365ba16 | 32 | /// \internal EIGEN_COMP_CLANG set to 1 if the compiler is clang (alias for __clang__) |
ykuroda | 0:13a5d365ba16 | 33 | #if defined(__clang__) |
ykuroda | 0:13a5d365ba16 | 34 | #define EIGEN_COMP_CLANG 1 |
ykuroda | 0:13a5d365ba16 | 35 | #else |
ykuroda | 0:13a5d365ba16 | 36 | #define EIGEN_COMP_CLANG 0 |
ykuroda | 0:13a5d365ba16 | 37 | #endif |
ykuroda | 0:13a5d365ba16 | 38 | |
ykuroda | 0:13a5d365ba16 | 39 | |
ykuroda | 0:13a5d365ba16 | 40 | /// \internal EIGEN_COMP_LLVM set to 1 if the compiler backend is llvm |
ykuroda | 0:13a5d365ba16 | 41 | #if defined(__llvm__) |
ykuroda | 0:13a5d365ba16 | 42 | #define EIGEN_COMP_LLVM 1 |
ykuroda | 0:13a5d365ba16 | 43 | #else |
ykuroda | 0:13a5d365ba16 | 44 | #define EIGEN_COMP_LLVM 0 |
ykuroda | 0:13a5d365ba16 | 45 | #endif |
ykuroda | 0:13a5d365ba16 | 46 | |
ykuroda | 0:13a5d365ba16 | 47 | /// \internal EIGEN_COMP_ICC set to __INTEL_COMPILER if the compiler is Intel compiler, 0 otherwise |
ykuroda | 0:13a5d365ba16 | 48 | #if defined(__INTEL_COMPILER) |
ykuroda | 0:13a5d365ba16 | 49 | #define EIGEN_COMP_ICC __INTEL_COMPILER |
ykuroda | 0:13a5d365ba16 | 50 | #else |
ykuroda | 0:13a5d365ba16 | 51 | #define EIGEN_COMP_ICC 0 |
ykuroda | 0:13a5d365ba16 | 52 | #endif |
ykuroda | 0:13a5d365ba16 | 53 | |
ykuroda | 0:13a5d365ba16 | 54 | /// \internal EIGEN_COMP_MINGW set to 1 if the compiler is mingw |
ykuroda | 0:13a5d365ba16 | 55 | #if defined(__MINGW32__) |
ykuroda | 0:13a5d365ba16 | 56 | #define EIGEN_COMP_MINGW 1 |
ykuroda | 0:13a5d365ba16 | 57 | #else |
ykuroda | 0:13a5d365ba16 | 58 | #define EIGEN_COMP_MINGW 0 |
ykuroda | 0:13a5d365ba16 | 59 | #endif |
ykuroda | 0:13a5d365ba16 | 60 | |
ykuroda | 0:13a5d365ba16 | 61 | /// \internal EIGEN_COMP_SUNCC set to 1 if the compiler is Solaris Studio |
ykuroda | 0:13a5d365ba16 | 62 | #if defined(__SUNPRO_CC) |
ykuroda | 0:13a5d365ba16 | 63 | #define EIGEN_COMP_SUNCC 1 |
ykuroda | 0:13a5d365ba16 | 64 | #else |
ykuroda | 0:13a5d365ba16 | 65 | #define EIGEN_COMP_SUNCC 0 |
ykuroda | 0:13a5d365ba16 | 66 | #endif |
ykuroda | 0:13a5d365ba16 | 67 | |
ykuroda | 0:13a5d365ba16 | 68 | /// \internal EIGEN_COMP_MSVC set to _MSC_VER if the compiler is Microsoft Visual C++, 0 otherwise. |
ykuroda | 0:13a5d365ba16 | 69 | #if defined(_MSC_VER) |
ykuroda | 0:13a5d365ba16 | 70 | #define EIGEN_COMP_MSVC _MSC_VER |
ykuroda | 0:13a5d365ba16 | 71 | #else |
ykuroda | 0:13a5d365ba16 | 72 | #define EIGEN_COMP_MSVC 0 |
ykuroda | 0:13a5d365ba16 | 73 | #endif |
ykuroda | 0:13a5d365ba16 | 74 | |
ykuroda | 0:13a5d365ba16 | 75 | /// \internal EIGEN_COMP_MSVC_STRICT set to 1 if the compiler is really Microsoft Visual C++ and not ,e.g., ICC |
ykuroda | 0:13a5d365ba16 | 76 | #if EIGEN_COMP_MSVC && !(EIGEN_COMP_ICC) |
ykuroda | 0:13a5d365ba16 | 77 | #define EIGEN_COMP_MSVC_STRICT _MSC_VER |
ykuroda | 0:13a5d365ba16 | 78 | #else |
ykuroda | 0:13a5d365ba16 | 79 | #define EIGEN_COMP_MSVC_STRICT 0 |
ykuroda | 0:13a5d365ba16 | 80 | #endif |
ykuroda | 0:13a5d365ba16 | 81 | |
ykuroda | 0:13a5d365ba16 | 82 | /// \internal EIGEN_COMP_IBM set to 1 if the compiler is IBM XL C++ |
ykuroda | 0:13a5d365ba16 | 83 | #if defined(__IBMCPP__) || defined(__xlc__) |
ykuroda | 0:13a5d365ba16 | 84 | #define EIGEN_COMP_IBM 1 |
ykuroda | 0:13a5d365ba16 | 85 | #else |
ykuroda | 0:13a5d365ba16 | 86 | #define EIGEN_COMP_IBM 0 |
ykuroda | 0:13a5d365ba16 | 87 | #endif |
ykuroda | 0:13a5d365ba16 | 88 | |
ykuroda | 0:13a5d365ba16 | 89 | /// \internal EIGEN_COMP_PGI set to 1 if the compiler is Portland Group Compiler |
ykuroda | 0:13a5d365ba16 | 90 | #if defined(__PGI) |
ykuroda | 0:13a5d365ba16 | 91 | #define EIGEN_COMP_PGI 1 |
ykuroda | 0:13a5d365ba16 | 92 | #else |
ykuroda | 0:13a5d365ba16 | 93 | #define EIGEN_COMP_PGI 0 |
ykuroda | 0:13a5d365ba16 | 94 | #endif |
ykuroda | 0:13a5d365ba16 | 95 | |
ykuroda | 0:13a5d365ba16 | 96 | /// \internal EIGEN_COMP_ARM set to 1 if the compiler is ARM Compiler |
ykuroda | 0:13a5d365ba16 | 97 | #if defined(__CC_ARM) || defined(__ARMCC_VERSION) |
ykuroda | 0:13a5d365ba16 | 98 | #define EIGEN_COMP_ARM 1 |
ykuroda | 0:13a5d365ba16 | 99 | #else |
ykuroda | 0:13a5d365ba16 | 100 | #define EIGEN_COMP_ARM 0 |
ykuroda | 0:13a5d365ba16 | 101 | #endif |
ykuroda | 0:13a5d365ba16 | 102 | |
ykuroda | 0:13a5d365ba16 | 103 | |
ykuroda | 0:13a5d365ba16 | 104 | /// \internal EIGEN_GNUC_STRICT set to 1 if the compiler is really GCC and not a compatible compiler (e.g., ICC, clang, mingw, etc.) |
ykuroda | 0:13a5d365ba16 | 105 | #if EIGEN_COMP_GNUC && !(EIGEN_COMP_CLANG || EIGEN_COMP_ICC || EIGEN_COMP_MINGW || EIGEN_COMP_PGI || EIGEN_COMP_IBM || EIGEN_COMP_ARM ) |
ykuroda | 0:13a5d365ba16 | 106 | #define EIGEN_COMP_GNUC_STRICT 1 |
ykuroda | 0:13a5d365ba16 | 107 | #else |
ykuroda | 0:13a5d365ba16 | 108 | #define EIGEN_COMP_GNUC_STRICT 0 |
ykuroda | 0:13a5d365ba16 | 109 | #endif |
ykuroda | 0:13a5d365ba16 | 110 | |
ykuroda | 0:13a5d365ba16 | 111 | |
ykuroda | 0:13a5d365ba16 | 112 | #if EIGEN_COMP_GNUC |
ykuroda | 0:13a5d365ba16 | 113 | #define EIGEN_GNUC_AT_LEAST(x,y) ((__GNUC__==x && __GNUC_MINOR__>=y) || __GNUC__>x) |
ykuroda | 0:13a5d365ba16 | 114 | #define EIGEN_GNUC_AT_MOST(x,y) ((__GNUC__==x && __GNUC_MINOR__<=y) || __GNUC__<x) |
ykuroda | 0:13a5d365ba16 | 115 | #define EIGEN_GNUC_AT(x,y) ( __GNUC__==x && __GNUC_MINOR__==y ) |
ykuroda | 0:13a5d365ba16 | 116 | #else |
ykuroda | 0:13a5d365ba16 | 117 | #define EIGEN_GNUC_AT_LEAST(x,y) 0 |
ykuroda | 0:13a5d365ba16 | 118 | #define EIGEN_GNUC_AT_MOST(x,y) 0 |
ykuroda | 0:13a5d365ba16 | 119 | #define EIGEN_GNUC_AT(x,y) 0 |
ykuroda | 0:13a5d365ba16 | 120 | #endif |
ykuroda | 0:13a5d365ba16 | 121 | |
ykuroda | 0:13a5d365ba16 | 122 | // FIXME: could probably be removed as we do not support gcc 3.x anymore |
ykuroda | 0:13a5d365ba16 | 123 | #if EIGEN_COMP_GNUC && (__GNUC__ <= 3) |
ykuroda | 0:13a5d365ba16 | 124 | #define EIGEN_GCC3_OR_OLDER 1 |
ykuroda | 0:13a5d365ba16 | 125 | #else |
ykuroda | 0:13a5d365ba16 | 126 | #define EIGEN_GCC3_OR_OLDER 0 |
ykuroda | 0:13a5d365ba16 | 127 | #endif |
ykuroda | 0:13a5d365ba16 | 128 | |
ykuroda | 0:13a5d365ba16 | 129 | |
ykuroda | 0:13a5d365ba16 | 130 | // Architecture identification, EIGEN_ARCH_* |
ykuroda | 0:13a5d365ba16 | 131 | |
ykuroda | 0:13a5d365ba16 | 132 | #if defined(__x86_64__) || defined(_M_X64) || defined(__amd64) |
ykuroda | 0:13a5d365ba16 | 133 | #define EIGEN_ARCH_x86_64 1 |
ykuroda | 0:13a5d365ba16 | 134 | #else |
ykuroda | 0:13a5d365ba16 | 135 | #define EIGEN_ARCH_x86_64 0 |
ykuroda | 0:13a5d365ba16 | 136 | #endif |
ykuroda | 0:13a5d365ba16 | 137 | |
ykuroda | 0:13a5d365ba16 | 138 | #if defined(__i386__) || defined(_M_IX86) || defined(_X86_) || defined(__i386) |
ykuroda | 0:13a5d365ba16 | 139 | #define EIGEN_ARCH_i386 1 |
ykuroda | 0:13a5d365ba16 | 140 | #else |
ykuroda | 0:13a5d365ba16 | 141 | #define EIGEN_ARCH_i386 0 |
ykuroda | 0:13a5d365ba16 | 142 | #endif |
ykuroda | 0:13a5d365ba16 | 143 | |
ykuroda | 0:13a5d365ba16 | 144 | #if EIGEN_ARCH_x86_64 || EIGEN_ARCH_i386 |
ykuroda | 0:13a5d365ba16 | 145 | #define EIGEN_ARCH_i386_OR_x86_64 1 |
ykuroda | 0:13a5d365ba16 | 146 | #else |
ykuroda | 0:13a5d365ba16 | 147 | #define EIGEN_ARCH_i386_OR_x86_64 0 |
ykuroda | 0:13a5d365ba16 | 148 | #endif |
ykuroda | 0:13a5d365ba16 | 149 | |
ykuroda | 0:13a5d365ba16 | 150 | /// \internal EIGEN_ARCH_ARM set to 1 if the architecture is ARM |
ykuroda | 0:13a5d365ba16 | 151 | #if defined(__arm__) |
ykuroda | 0:13a5d365ba16 | 152 | #define EIGEN_ARCH_ARM 1 |
ykuroda | 0:13a5d365ba16 | 153 | #else |
ykuroda | 0:13a5d365ba16 | 154 | #define EIGEN_ARCH_ARM 0 |
ykuroda | 0:13a5d365ba16 | 155 | #endif |
ykuroda | 0:13a5d365ba16 | 156 | |
ykuroda | 0:13a5d365ba16 | 157 | /// \internal EIGEN_ARCH_ARM64 set to 1 if the architecture is ARM64 |
ykuroda | 0:13a5d365ba16 | 158 | #if defined(__aarch64__) |
ykuroda | 0:13a5d365ba16 | 159 | #define EIGEN_ARCH_ARM64 1 |
ykuroda | 0:13a5d365ba16 | 160 | #else |
ykuroda | 0:13a5d365ba16 | 161 | #define EIGEN_ARCH_ARM64 0 |
ykuroda | 0:13a5d365ba16 | 162 | #endif |
ykuroda | 0:13a5d365ba16 | 163 | |
ykuroda | 0:13a5d365ba16 | 164 | #if EIGEN_ARCH_ARM || EIGEN_ARCH_ARM64 |
ykuroda | 0:13a5d365ba16 | 165 | #define EIGEN_ARCH_ARM_OR_ARM64 1 |
ykuroda | 0:13a5d365ba16 | 166 | #else |
ykuroda | 0:13a5d365ba16 | 167 | #define EIGEN_ARCH_ARM_OR_ARM64 0 |
ykuroda | 0:13a5d365ba16 | 168 | #endif |
ykuroda | 0:13a5d365ba16 | 169 | |
ykuroda | 0:13a5d365ba16 | 170 | /// \internal EIGEN_ARCH_MIPS set to 1 if the architecture is MIPS |
ykuroda | 0:13a5d365ba16 | 171 | #if defined(__mips__) || defined(__mips) |
ykuroda | 0:13a5d365ba16 | 172 | #define EIGEN_ARCH_MIPS 1 |
ykuroda | 0:13a5d365ba16 | 173 | #else |
ykuroda | 0:13a5d365ba16 | 174 | #define EIGEN_ARCH_MIPS 0 |
ykuroda | 0:13a5d365ba16 | 175 | #endif |
ykuroda | 0:13a5d365ba16 | 176 | |
ykuroda | 0:13a5d365ba16 | 177 | /// \internal EIGEN_ARCH_SPARC set to 1 if the architecture is SPARC |
ykuroda | 0:13a5d365ba16 | 178 | #if defined(__sparc__) || defined(__sparc) |
ykuroda | 0:13a5d365ba16 | 179 | #define EIGEN_ARCH_SPARC 1 |
ykuroda | 0:13a5d365ba16 | 180 | #else |
ykuroda | 0:13a5d365ba16 | 181 | #define EIGEN_ARCH_SPARC 0 |
ykuroda | 0:13a5d365ba16 | 182 | #endif |
ykuroda | 0:13a5d365ba16 | 183 | |
ykuroda | 0:13a5d365ba16 | 184 | /// \internal EIGEN_ARCH_IA64 set to 1 if the architecture is Intel Itanium |
ykuroda | 0:13a5d365ba16 | 185 | #if defined(__ia64__) |
ykuroda | 0:13a5d365ba16 | 186 | #define EIGEN_ARCH_IA64 1 |
ykuroda | 0:13a5d365ba16 | 187 | #else |
ykuroda | 0:13a5d365ba16 | 188 | #define EIGEN_ARCH_IA64 0 |
ykuroda | 0:13a5d365ba16 | 189 | #endif |
ykuroda | 0:13a5d365ba16 | 190 | |
ykuroda | 0:13a5d365ba16 | 191 | /// \internal EIGEN_ARCH_PPC set to 1 if the architecture is PowerPC |
ykuroda | 0:13a5d365ba16 | 192 | #if defined(__powerpc__) || defined(__ppc__) || defined(_M_PPC) |
ykuroda | 0:13a5d365ba16 | 193 | #define EIGEN_ARCH_PPC 1 |
ykuroda | 0:13a5d365ba16 | 194 | #else |
ykuroda | 0:13a5d365ba16 | 195 | #define EIGEN_ARCH_PPC 0 |
ykuroda | 0:13a5d365ba16 | 196 | #endif |
ykuroda | 0:13a5d365ba16 | 197 | |
ykuroda | 0:13a5d365ba16 | 198 | |
ykuroda | 0:13a5d365ba16 | 199 | |
ykuroda | 0:13a5d365ba16 | 200 | // Operating system identification, EIGEN_OS_* |
ykuroda | 0:13a5d365ba16 | 201 | |
ykuroda | 0:13a5d365ba16 | 202 | /// \internal EIGEN_OS_UNIX set to 1 if the OS is a unix variant |
ykuroda | 0:13a5d365ba16 | 203 | #if defined(__unix__) || defined(__unix) |
ykuroda | 0:13a5d365ba16 | 204 | #define EIGEN_OS_UNIX 1 |
ykuroda | 0:13a5d365ba16 | 205 | #else |
ykuroda | 0:13a5d365ba16 | 206 | #define EIGEN_OS_UNIX 0 |
ykuroda | 0:13a5d365ba16 | 207 | #endif |
ykuroda | 0:13a5d365ba16 | 208 | |
ykuroda | 0:13a5d365ba16 | 209 | /// \internal EIGEN_OS_LINUX set to 1 if the OS is based on Linux kernel |
ykuroda | 0:13a5d365ba16 | 210 | #if defined(__linux__) |
ykuroda | 0:13a5d365ba16 | 211 | #define EIGEN_OS_LINUX 1 |
ykuroda | 0:13a5d365ba16 | 212 | #else |
ykuroda | 0:13a5d365ba16 | 213 | #define EIGEN_OS_LINUX 0 |
ykuroda | 0:13a5d365ba16 | 214 | #endif |
ykuroda | 0:13a5d365ba16 | 215 | |
ykuroda | 0:13a5d365ba16 | 216 | /// \internal EIGEN_OS_ANDROID set to 1 if the OS is Android |
ykuroda | 0:13a5d365ba16 | 217 | // note: ANDROID is defined when using ndk_build, __ANDROID__ is defined when using a standalone toolchain. |
ykuroda | 0:13a5d365ba16 | 218 | #if defined(__ANDROID__) || defined(ANDROID) |
ykuroda | 0:13a5d365ba16 | 219 | #define EIGEN_OS_ANDROID 1 |
ykuroda | 0:13a5d365ba16 | 220 | #else |
ykuroda | 0:13a5d365ba16 | 221 | #define EIGEN_OS_ANDROID 0 |
ykuroda | 0:13a5d365ba16 | 222 | #endif |
ykuroda | 0:13a5d365ba16 | 223 | |
ykuroda | 0:13a5d365ba16 | 224 | /// \internal EIGEN_OS_GNULINUX set to 1 if the OS is GNU Linux and not Linux-based OS (e.g., not android) |
ykuroda | 0:13a5d365ba16 | 225 | #if defined(__gnu_linux__) && !(EIGEN_OS_ANDROID) |
ykuroda | 0:13a5d365ba16 | 226 | #define EIGEN_OS_GNULINUX 1 |
ykuroda | 0:13a5d365ba16 | 227 | #else |
ykuroda | 0:13a5d365ba16 | 228 | #define EIGEN_OS_GNULINUX 0 |
ykuroda | 0:13a5d365ba16 | 229 | #endif |
ykuroda | 0:13a5d365ba16 | 230 | |
ykuroda | 0:13a5d365ba16 | 231 | /// \internal EIGEN_OS_BSD set to 1 if the OS is a BSD variant |
ykuroda | 0:13a5d365ba16 | 232 | #if defined(__FreeBSD__) || defined(__NetBSD__) || defined(__OpenBSD__) || defined(__bsdi__) || defined(__DragonFly__) |
ykuroda | 0:13a5d365ba16 | 233 | #define EIGEN_OS_BSD 1 |
ykuroda | 0:13a5d365ba16 | 234 | #else |
ykuroda | 0:13a5d365ba16 | 235 | #define EIGEN_OS_BSD 0 |
ykuroda | 0:13a5d365ba16 | 236 | #endif |
ykuroda | 0:13a5d365ba16 | 237 | |
ykuroda | 0:13a5d365ba16 | 238 | /// \internal EIGEN_OS_MAC set to 1 if the OS is MacOS |
ykuroda | 0:13a5d365ba16 | 239 | #if defined(__APPLE__) |
ykuroda | 0:13a5d365ba16 | 240 | #define EIGEN_OS_MAC 1 |
ykuroda | 0:13a5d365ba16 | 241 | #else |
ykuroda | 0:13a5d365ba16 | 242 | #define EIGEN_OS_MAC 0 |
ykuroda | 0:13a5d365ba16 | 243 | #endif |
ykuroda | 0:13a5d365ba16 | 244 | |
ykuroda | 0:13a5d365ba16 | 245 | /// \internal EIGEN_OS_QNX set to 1 if the OS is QNX |
ykuroda | 0:13a5d365ba16 | 246 | #if defined(__QNX__) |
ykuroda | 0:13a5d365ba16 | 247 | #define EIGEN_OS_QNX 1 |
ykuroda | 0:13a5d365ba16 | 248 | #else |
ykuroda | 0:13a5d365ba16 | 249 | #define EIGEN_OS_QNX 0 |
ykuroda | 0:13a5d365ba16 | 250 | #endif |
ykuroda | 0:13a5d365ba16 | 251 | |
ykuroda | 0:13a5d365ba16 | 252 | /// \internal EIGEN_OS_WIN set to 1 if the OS is Windows based |
ykuroda | 0:13a5d365ba16 | 253 | #if defined(_WIN32) |
ykuroda | 0:13a5d365ba16 | 254 | #define EIGEN_OS_WIN 1 |
ykuroda | 0:13a5d365ba16 | 255 | #else |
ykuroda | 0:13a5d365ba16 | 256 | #define EIGEN_OS_WIN 0 |
ykuroda | 0:13a5d365ba16 | 257 | #endif |
ykuroda | 0:13a5d365ba16 | 258 | |
ykuroda | 0:13a5d365ba16 | 259 | /// \internal EIGEN_OS_WIN64 set to 1 if the OS is Windows 64bits |
ykuroda | 0:13a5d365ba16 | 260 | #if defined(_WIN64) |
ykuroda | 0:13a5d365ba16 | 261 | #define EIGEN_OS_WIN64 1 |
ykuroda | 0:13a5d365ba16 | 262 | #else |
ykuroda | 0:13a5d365ba16 | 263 | #define EIGEN_OS_WIN64 0 |
ykuroda | 0:13a5d365ba16 | 264 | #endif |
ykuroda | 0:13a5d365ba16 | 265 | |
ykuroda | 0:13a5d365ba16 | 266 | /// \internal EIGEN_OS_WINCE set to 1 if the OS is Windows CE |
ykuroda | 0:13a5d365ba16 | 267 | #if defined(_WIN32_WCE) |
ykuroda | 0:13a5d365ba16 | 268 | #define EIGEN_OS_WINCE 1 |
ykuroda | 0:13a5d365ba16 | 269 | #else |
ykuroda | 0:13a5d365ba16 | 270 | #define EIGEN_OS_WINCE 0 |
ykuroda | 0:13a5d365ba16 | 271 | #endif |
ykuroda | 0:13a5d365ba16 | 272 | |
ykuroda | 0:13a5d365ba16 | 273 | /// \internal EIGEN_OS_CYGWIN set to 1 if the OS is Windows/Cygwin |
ykuroda | 0:13a5d365ba16 | 274 | #if defined(__CYGWIN__) |
ykuroda | 0:13a5d365ba16 | 275 | #define EIGEN_OS_CYGWIN 1 |
ykuroda | 0:13a5d365ba16 | 276 | #else |
ykuroda | 0:13a5d365ba16 | 277 | #define EIGEN_OS_CYGWIN 0 |
ykuroda | 0:13a5d365ba16 | 278 | #endif |
ykuroda | 0:13a5d365ba16 | 279 | |
ykuroda | 0:13a5d365ba16 | 280 | /// \internal EIGEN_OS_WIN_STRICT set to 1 if the OS is really Windows and not some variants |
ykuroda | 0:13a5d365ba16 | 281 | #if EIGEN_OS_WIN && !( EIGEN_OS_WINCE || EIGEN_OS_CYGWIN ) |
ykuroda | 0:13a5d365ba16 | 282 | #define EIGEN_OS_WIN_STRICT 1 |
ykuroda | 0:13a5d365ba16 | 283 | #else |
ykuroda | 0:13a5d365ba16 | 284 | #define EIGEN_OS_WIN_STRICT 0 |
ykuroda | 0:13a5d365ba16 | 285 | #endif |
ykuroda | 0:13a5d365ba16 | 286 | |
ykuroda | 0:13a5d365ba16 | 287 | /// \internal EIGEN_OS_SUN set to 1 if the OS is SUN |
ykuroda | 0:13a5d365ba16 | 288 | #if (defined(sun) || defined(__sun)) && !(defined(__SVR4) || defined(__svr4__)) |
ykuroda | 0:13a5d365ba16 | 289 | #define EIGEN_OS_SUN 1 |
ykuroda | 0:13a5d365ba16 | 290 | #else |
ykuroda | 0:13a5d365ba16 | 291 | #define EIGEN_OS_SUN 0 |
ykuroda | 0:13a5d365ba16 | 292 | #endif |
ykuroda | 0:13a5d365ba16 | 293 | |
ykuroda | 0:13a5d365ba16 | 294 | /// \internal EIGEN_OS_SOLARIS set to 1 if the OS is Solaris |
ykuroda | 0:13a5d365ba16 | 295 | #if (defined(sun) || defined(__sun)) && (defined(__SVR4) || defined(__svr4__)) |
ykuroda | 0:13a5d365ba16 | 296 | #define EIGEN_OS_SOLARIS 1 |
ykuroda | 0:13a5d365ba16 | 297 | #else |
ykuroda | 0:13a5d365ba16 | 298 | #define EIGEN_OS_SOLARIS 0 |
ykuroda | 0:13a5d365ba16 | 299 | #endif |
ykuroda | 0:13a5d365ba16 | 300 | |
ykuroda | 0:13a5d365ba16 | 301 | |
ykuroda | 0:13a5d365ba16 | 302 | #if EIGEN_GNUC_AT_MOST(4,3) && !defined(__clang__) |
ykuroda | 0:13a5d365ba16 | 303 | // see bug 89 |
ykuroda | 0:13a5d365ba16 | 304 | #define EIGEN_SAFE_TO_USE_STANDARD_ASSERT_MACRO 0 |
ykuroda | 0:13a5d365ba16 | 305 | #else |
ykuroda | 0:13a5d365ba16 | 306 | #define EIGEN_SAFE_TO_USE_STANDARD_ASSERT_MACRO 1 |
ykuroda | 0:13a5d365ba16 | 307 | #endif |
ykuroda | 0:13a5d365ba16 | 308 | |
ykuroda | 0:13a5d365ba16 | 309 | // 16 byte alignment is only useful for vectorization. Since it affects the ABI, we need to enable |
ykuroda | 0:13a5d365ba16 | 310 | // 16 byte alignment on all platforms where vectorization might be enabled. In theory we could always |
ykuroda | 0:13a5d365ba16 | 311 | // enable alignment, but it can be a cause of problems on some platforms, so we just disable it in |
ykuroda | 0:13a5d365ba16 | 312 | // certain common platform (compiler+architecture combinations) to avoid these problems. |
ykuroda | 0:13a5d365ba16 | 313 | // Only static alignment is really problematic (relies on nonstandard compiler extensions that don't |
ykuroda | 0:13a5d365ba16 | 314 | // work everywhere, for example don't work on GCC/ARM), try to keep heap alignment even |
ykuroda | 0:13a5d365ba16 | 315 | // when we have to disable static alignment. |
ykuroda | 0:13a5d365ba16 | 316 | #if defined(__GNUC__) && !(defined(__i386__) || defined(__x86_64__) || defined(__powerpc__) || defined(__ppc__) || defined(__ia64__)) |
ykuroda | 0:13a5d365ba16 | 317 | #define EIGEN_GCC_AND_ARCH_DOESNT_WANT_STACK_ALIGNMENT 1 |
ykuroda | 0:13a5d365ba16 | 318 | #else |
ykuroda | 0:13a5d365ba16 | 319 | #define EIGEN_GCC_AND_ARCH_DOESNT_WANT_STACK_ALIGNMENT 0 |
ykuroda | 0:13a5d365ba16 | 320 | #endif |
ykuroda | 0:13a5d365ba16 | 321 | |
ykuroda | 0:13a5d365ba16 | 322 | // static alignment is completely disabled with GCC 3, Sun Studio, and QCC/QNX |
ykuroda | 0:13a5d365ba16 | 323 | #if !EIGEN_GCC_AND_ARCH_DOESNT_WANT_STACK_ALIGNMENT \ |
ykuroda | 0:13a5d365ba16 | 324 | && !EIGEN_GCC3_OR_OLDER \ |
ykuroda | 0:13a5d365ba16 | 325 | && !defined(__SUNPRO_CC) \ |
ykuroda | 0:13a5d365ba16 | 326 | && !defined(__QNXNTO__) |
ykuroda | 0:13a5d365ba16 | 327 | #define EIGEN_ARCH_WANTS_STACK_ALIGNMENT 1 |
ykuroda | 0:13a5d365ba16 | 328 | #else |
ykuroda | 0:13a5d365ba16 | 329 | #define EIGEN_ARCH_WANTS_STACK_ALIGNMENT 0 |
ykuroda | 0:13a5d365ba16 | 330 | #endif |
ykuroda | 0:13a5d365ba16 | 331 | |
ykuroda | 0:13a5d365ba16 | 332 | #ifdef EIGEN_DONT_ALIGN |
ykuroda | 0:13a5d365ba16 | 333 | #ifndef EIGEN_DONT_ALIGN_STATICALLY |
ykuroda | 0:13a5d365ba16 | 334 | #define EIGEN_DONT_ALIGN_STATICALLY |
ykuroda | 0:13a5d365ba16 | 335 | #endif |
ykuroda | 0:13a5d365ba16 | 336 | #define EIGEN_ALIGN 0 |
ykuroda | 0:13a5d365ba16 | 337 | #else |
ykuroda | 0:13a5d365ba16 | 338 | #define EIGEN_ALIGN 1 |
ykuroda | 0:13a5d365ba16 | 339 | #endif |
ykuroda | 0:13a5d365ba16 | 340 | |
ykuroda | 0:13a5d365ba16 | 341 | // EIGEN_ALIGN_STATICALLY is the true test whether we want to align arrays on the stack or not. It takes into account both the user choice to explicitly disable |
ykuroda | 0:13a5d365ba16 | 342 | // alignment (EIGEN_DONT_ALIGN_STATICALLY) and the architecture config (EIGEN_ARCH_WANTS_STACK_ALIGNMENT). Henceforth, only EIGEN_ALIGN_STATICALLY should be used. |
ykuroda | 0:13a5d365ba16 | 343 | #if EIGEN_ARCH_WANTS_STACK_ALIGNMENT && !defined(EIGEN_DONT_ALIGN_STATICALLY) |
ykuroda | 0:13a5d365ba16 | 344 | #define EIGEN_ALIGN_STATICALLY 1 |
ykuroda | 0:13a5d365ba16 | 345 | #else |
ykuroda | 0:13a5d365ba16 | 346 | #define EIGEN_ALIGN_STATICALLY 0 |
ykuroda | 0:13a5d365ba16 | 347 | #ifndef EIGEN_DISABLE_UNALIGNED_ARRAY_ASSERT |
ykuroda | 0:13a5d365ba16 | 348 | #define EIGEN_DISABLE_UNALIGNED_ARRAY_ASSERT |
ykuroda | 0:13a5d365ba16 | 349 | #endif |
ykuroda | 0:13a5d365ba16 | 350 | #endif |
ykuroda | 0:13a5d365ba16 | 351 | |
ykuroda | 0:13a5d365ba16 | 352 | #ifdef EIGEN_DEFAULT_TO_ROW_MAJOR |
ykuroda | 0:13a5d365ba16 | 353 | #define EIGEN_DEFAULT_MATRIX_STORAGE_ORDER_OPTION RowMajor |
ykuroda | 0:13a5d365ba16 | 354 | #else |
ykuroda | 0:13a5d365ba16 | 355 | #define EIGEN_DEFAULT_MATRIX_STORAGE_ORDER_OPTION ColMajor |
ykuroda | 0:13a5d365ba16 | 356 | #endif |
ykuroda | 0:13a5d365ba16 | 357 | |
ykuroda | 0:13a5d365ba16 | 358 | #ifndef EIGEN_DEFAULT_DENSE_INDEX_TYPE |
ykuroda | 0:13a5d365ba16 | 359 | #define EIGEN_DEFAULT_DENSE_INDEX_TYPE std::ptrdiff_t |
ykuroda | 0:13a5d365ba16 | 360 | #endif |
ykuroda | 0:13a5d365ba16 | 361 | |
ykuroda | 0:13a5d365ba16 | 362 | // A Clang feature extension to determine compiler features. |
ykuroda | 0:13a5d365ba16 | 363 | // We use it to determine 'cxx_rvalue_references' |
ykuroda | 0:13a5d365ba16 | 364 | #ifndef __has_feature |
ykuroda | 0:13a5d365ba16 | 365 | # define __has_feature(x) 0 |
ykuroda | 0:13a5d365ba16 | 366 | #endif |
ykuroda | 0:13a5d365ba16 | 367 | |
ykuroda | 0:13a5d365ba16 | 368 | // Do we support r-value references? |
ykuroda | 0:13a5d365ba16 | 369 | #if (__has_feature(cxx_rvalue_references) || \ |
ykuroda | 0:13a5d365ba16 | 370 | (defined(__cplusplus) && __cplusplus >= 201103L) || \ |
ykuroda | 0:13a5d365ba16 | 371 | (defined(_MSC_VER) && _MSC_VER >= 1600)) |
ykuroda | 0:13a5d365ba16 | 372 | #define EIGEN_HAVE_RVALUE_REFERENCES |
ykuroda | 0:13a5d365ba16 | 373 | #endif |
ykuroda | 0:13a5d365ba16 | 374 | |
ykuroda | 0:13a5d365ba16 | 375 | |
ykuroda | 0:13a5d365ba16 | 376 | // Cross compiler wrapper around LLVM's __has_builtin |
ykuroda | 0:13a5d365ba16 | 377 | #ifdef __has_builtin |
ykuroda | 0:13a5d365ba16 | 378 | # define EIGEN_HAS_BUILTIN(x) __has_builtin(x) |
ykuroda | 0:13a5d365ba16 | 379 | #else |
ykuroda | 0:13a5d365ba16 | 380 | # define EIGEN_HAS_BUILTIN(x) 0 |
ykuroda | 0:13a5d365ba16 | 381 | #endif |
ykuroda | 0:13a5d365ba16 | 382 | |
ykuroda | 0:13a5d365ba16 | 383 | /** Allows to disable some optimizations which might affect the accuracy of the result. |
ykuroda | 0:13a5d365ba16 | 384 | * Such optimization are enabled by default, and set EIGEN_FAST_MATH to 0 to disable them. |
ykuroda | 0:13a5d365ba16 | 385 | * They currently include: |
ykuroda | 0:13a5d365ba16 | 386 | * - single precision Cwise::sin() and Cwise::cos() when SSE vectorization is enabled. |
ykuroda | 0:13a5d365ba16 | 387 | */ |
ykuroda | 0:13a5d365ba16 | 388 | #ifndef EIGEN_FAST_MATH |
ykuroda | 0:13a5d365ba16 | 389 | #define EIGEN_FAST_MATH 1 |
ykuroda | 0:13a5d365ba16 | 390 | #endif |
ykuroda | 0:13a5d365ba16 | 391 | |
ykuroda | 0:13a5d365ba16 | 392 | #define EIGEN_DEBUG_VAR(x) std::cerr << #x << " = " << x << std::endl; |
ykuroda | 0:13a5d365ba16 | 393 | |
ykuroda | 0:13a5d365ba16 | 394 | // concatenate two tokens |
ykuroda | 0:13a5d365ba16 | 395 | #define EIGEN_CAT2(a,b) a ## b |
ykuroda | 0:13a5d365ba16 | 396 | #define EIGEN_CAT(a,b) EIGEN_CAT2(a,b) |
ykuroda | 0:13a5d365ba16 | 397 | |
ykuroda | 0:13a5d365ba16 | 398 | // convert a token to a string |
ykuroda | 0:13a5d365ba16 | 399 | #define EIGEN_MAKESTRING2(a) #a |
ykuroda | 0:13a5d365ba16 | 400 | #define EIGEN_MAKESTRING(a) EIGEN_MAKESTRING2(a) |
ykuroda | 0:13a5d365ba16 | 401 | |
ykuroda | 0:13a5d365ba16 | 402 | // EIGEN_STRONG_INLINE is a stronger version of the inline, using __forceinline on MSVC, |
ykuroda | 0:13a5d365ba16 | 403 | // but it still doesn't use GCC's always_inline. This is useful in (common) situations where MSVC needs forceinline |
ykuroda | 0:13a5d365ba16 | 404 | // but GCC is still doing fine with just inline. |
ykuroda | 0:13a5d365ba16 | 405 | #if (defined _MSC_VER) || (defined __INTEL_COMPILER) |
ykuroda | 0:13a5d365ba16 | 406 | #define EIGEN_STRONG_INLINE __forceinline |
ykuroda | 0:13a5d365ba16 | 407 | #else |
ykuroda | 0:13a5d365ba16 | 408 | #define EIGEN_STRONG_INLINE inline |
ykuroda | 0:13a5d365ba16 | 409 | #endif |
ykuroda | 0:13a5d365ba16 | 410 | |
ykuroda | 0:13a5d365ba16 | 411 | // EIGEN_ALWAYS_INLINE is the stronget, it has the effect of making the function inline and adding every possible |
ykuroda | 0:13a5d365ba16 | 412 | // attribute to maximize inlining. This should only be used when really necessary: in particular, |
ykuroda | 0:13a5d365ba16 | 413 | // it uses __attribute__((always_inline)) on GCC, which most of the time is useless and can severely harm compile times. |
ykuroda | 0:13a5d365ba16 | 414 | // FIXME with the always_inline attribute, |
ykuroda | 0:13a5d365ba16 | 415 | // gcc 3.4.x reports the following compilation error: |
ykuroda | 0:13a5d365ba16 | 416 | // Eval.h:91: sorry, unimplemented: inlining failed in call to 'const Eigen::Eval<Derived> Eigen::MatrixBase<Scalar, Derived>::eval() const' |
ykuroda | 0:13a5d365ba16 | 417 | // : function body not available |
ykuroda | 0:13a5d365ba16 | 418 | #if EIGEN_GNUC_AT_LEAST(4,0) |
ykuroda | 0:13a5d365ba16 | 419 | #define EIGEN_ALWAYS_INLINE __attribute__((always_inline)) inline |
ykuroda | 0:13a5d365ba16 | 420 | #else |
ykuroda | 0:13a5d365ba16 | 421 | #define EIGEN_ALWAYS_INLINE EIGEN_STRONG_INLINE |
ykuroda | 0:13a5d365ba16 | 422 | #endif |
ykuroda | 0:13a5d365ba16 | 423 | |
ykuroda | 0:13a5d365ba16 | 424 | #if (defined __GNUC__) |
ykuroda | 0:13a5d365ba16 | 425 | #define EIGEN_DONT_INLINE __attribute__((noinline)) |
ykuroda | 0:13a5d365ba16 | 426 | #elif (defined _MSC_VER) |
ykuroda | 0:13a5d365ba16 | 427 | #define EIGEN_DONT_INLINE __declspec(noinline) |
ykuroda | 0:13a5d365ba16 | 428 | #else |
ykuroda | 0:13a5d365ba16 | 429 | #define EIGEN_DONT_INLINE |
ykuroda | 0:13a5d365ba16 | 430 | #endif |
ykuroda | 0:13a5d365ba16 | 431 | |
ykuroda | 0:13a5d365ba16 | 432 | #if (defined __GNUC__) |
ykuroda | 0:13a5d365ba16 | 433 | #define EIGEN_PERMISSIVE_EXPR __extension__ |
ykuroda | 0:13a5d365ba16 | 434 | #else |
ykuroda | 0:13a5d365ba16 | 435 | #define EIGEN_PERMISSIVE_EXPR |
ykuroda | 0:13a5d365ba16 | 436 | #endif |
ykuroda | 0:13a5d365ba16 | 437 | |
ykuroda | 0:13a5d365ba16 | 438 | // this macro allows to get rid of linking errors about multiply defined functions. |
ykuroda | 0:13a5d365ba16 | 439 | // - static is not very good because it prevents definitions from different object files to be merged. |
ykuroda | 0:13a5d365ba16 | 440 | // So static causes the resulting linked executable to be bloated with multiple copies of the same function. |
ykuroda | 0:13a5d365ba16 | 441 | // - inline is not perfect either as it unwantedly hints the compiler toward inlining the function. |
ykuroda | 0:13a5d365ba16 | 442 | #define EIGEN_DECLARE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS |
ykuroda | 0:13a5d365ba16 | 443 | #define EIGEN_DEFINE_FUNCTION_ALLOWING_MULTIPLE_DEFINITIONS inline |
ykuroda | 0:13a5d365ba16 | 444 | |
ykuroda | 0:13a5d365ba16 | 445 | #ifdef NDEBUG |
ykuroda | 0:13a5d365ba16 | 446 | # ifndef EIGEN_NO_DEBUG |
ykuroda | 0:13a5d365ba16 | 447 | # define EIGEN_NO_DEBUG |
ykuroda | 0:13a5d365ba16 | 448 | # endif |
ykuroda | 0:13a5d365ba16 | 449 | #endif |
ykuroda | 0:13a5d365ba16 | 450 | |
ykuroda | 0:13a5d365ba16 | 451 | // eigen_plain_assert is where we implement the workaround for the assert() bug in GCC <= 4.3, see bug 89 |
ykuroda | 0:13a5d365ba16 | 452 | #ifdef EIGEN_NO_DEBUG |
ykuroda | 0:13a5d365ba16 | 453 | #define eigen_plain_assert(x) |
ykuroda | 0:13a5d365ba16 | 454 | #else |
ykuroda | 0:13a5d365ba16 | 455 | #if EIGEN_SAFE_TO_USE_STANDARD_ASSERT_MACRO |
ykuroda | 0:13a5d365ba16 | 456 | namespace Eigen { |
ykuroda | 0:13a5d365ba16 | 457 | namespace internal { |
ykuroda | 0:13a5d365ba16 | 458 | inline bool copy_bool(bool b) { return b; } |
ykuroda | 0:13a5d365ba16 | 459 | } |
ykuroda | 0:13a5d365ba16 | 460 | } |
ykuroda | 0:13a5d365ba16 | 461 | #define eigen_plain_assert(x) assert(x) |
ykuroda | 0:13a5d365ba16 | 462 | #else |
ykuroda | 0:13a5d365ba16 | 463 | // work around bug 89 |
ykuroda | 0:13a5d365ba16 | 464 | #include <cstdlib> // for abort |
ykuroda | 0:13a5d365ba16 | 465 | #include <iostream> // for std::cerr |
ykuroda | 0:13a5d365ba16 | 466 | |
ykuroda | 0:13a5d365ba16 | 467 | namespace Eigen { |
ykuroda | 0:13a5d365ba16 | 468 | namespace internal { |
ykuroda | 0:13a5d365ba16 | 469 | // trivial function copying a bool. Must be EIGEN_DONT_INLINE, so we implement it after including Eigen headers. |
ykuroda | 0:13a5d365ba16 | 470 | // see bug 89. |
ykuroda | 0:13a5d365ba16 | 471 | namespace { |
ykuroda | 0:13a5d365ba16 | 472 | EIGEN_DONT_INLINE bool copy_bool(bool b) { return b; } |
ykuroda | 0:13a5d365ba16 | 473 | } |
ykuroda | 0:13a5d365ba16 | 474 | inline void assert_fail(const char *condition, const char *function, const char *file, int line) |
ykuroda | 0:13a5d365ba16 | 475 | { |
ykuroda | 0:13a5d365ba16 | 476 | std::cerr << "assertion failed: " << condition << " in function " << function << " at " << file << ":" << line << std::endl; |
ykuroda | 0:13a5d365ba16 | 477 | abort(); |
ykuroda | 0:13a5d365ba16 | 478 | } |
ykuroda | 0:13a5d365ba16 | 479 | } |
ykuroda | 0:13a5d365ba16 | 480 | } |
ykuroda | 0:13a5d365ba16 | 481 | #define eigen_plain_assert(x) \ |
ykuroda | 0:13a5d365ba16 | 482 | do { \ |
ykuroda | 0:13a5d365ba16 | 483 | if(!Eigen::internal::copy_bool(x)) \ |
ykuroda | 0:13a5d365ba16 | 484 | Eigen::internal::assert_fail(EIGEN_MAKESTRING(x), __PRETTY_FUNCTION__, __FILE__, __LINE__); \ |
ykuroda | 0:13a5d365ba16 | 485 | } while(false) |
ykuroda | 0:13a5d365ba16 | 486 | #endif |
ykuroda | 0:13a5d365ba16 | 487 | #endif |
ykuroda | 0:13a5d365ba16 | 488 | |
ykuroda | 0:13a5d365ba16 | 489 | // eigen_assert can be overridden |
ykuroda | 0:13a5d365ba16 | 490 | #ifndef eigen_assert |
ykuroda | 0:13a5d365ba16 | 491 | #define eigen_assert(x) eigen_plain_assert(x) |
ykuroda | 0:13a5d365ba16 | 492 | #endif |
ykuroda | 0:13a5d365ba16 | 493 | |
ykuroda | 0:13a5d365ba16 | 494 | #ifdef EIGEN_INTERNAL_DEBUGGING |
ykuroda | 0:13a5d365ba16 | 495 | #define eigen_internal_assert(x) eigen_assert(x) |
ykuroda | 0:13a5d365ba16 | 496 | #else |
ykuroda | 0:13a5d365ba16 | 497 | #define eigen_internal_assert(x) |
ykuroda | 0:13a5d365ba16 | 498 | #endif |
ykuroda | 0:13a5d365ba16 | 499 | |
ykuroda | 0:13a5d365ba16 | 500 | #ifdef EIGEN_NO_DEBUG |
ykuroda | 0:13a5d365ba16 | 501 | #define EIGEN_ONLY_USED_FOR_DEBUG(x) (void)x |
ykuroda | 0:13a5d365ba16 | 502 | #else |
ykuroda | 0:13a5d365ba16 | 503 | #define EIGEN_ONLY_USED_FOR_DEBUG(x) |
ykuroda | 0:13a5d365ba16 | 504 | #endif |
ykuroda | 0:13a5d365ba16 | 505 | |
ykuroda | 0:13a5d365ba16 | 506 | #ifndef EIGEN_NO_DEPRECATED_WARNING |
ykuroda | 0:13a5d365ba16 | 507 | #if (defined __GNUC__) |
ykuroda | 0:13a5d365ba16 | 508 | #define EIGEN_DEPRECATED __attribute__((deprecated)) |
ykuroda | 0:13a5d365ba16 | 509 | #elif (defined _MSC_VER) |
ykuroda | 0:13a5d365ba16 | 510 | #define EIGEN_DEPRECATED __declspec(deprecated) |
ykuroda | 0:13a5d365ba16 | 511 | #else |
ykuroda | 0:13a5d365ba16 | 512 | #define EIGEN_DEPRECATED |
ykuroda | 0:13a5d365ba16 | 513 | #endif |
ykuroda | 0:13a5d365ba16 | 514 | #else |
ykuroda | 0:13a5d365ba16 | 515 | #define EIGEN_DEPRECATED |
ykuroda | 0:13a5d365ba16 | 516 | #endif |
ykuroda | 0:13a5d365ba16 | 517 | |
ykuroda | 0:13a5d365ba16 | 518 | #if (defined __GNUC__) |
ykuroda | 0:13a5d365ba16 | 519 | #define EIGEN_UNUSED __attribute__((unused)) |
ykuroda | 0:13a5d365ba16 | 520 | #else |
ykuroda | 0:13a5d365ba16 | 521 | #define EIGEN_UNUSED |
ykuroda | 0:13a5d365ba16 | 522 | #endif |
ykuroda | 0:13a5d365ba16 | 523 | |
ykuroda | 0:13a5d365ba16 | 524 | // Suppresses 'unused variable' warnings. |
ykuroda | 0:13a5d365ba16 | 525 | namespace Eigen { |
ykuroda | 0:13a5d365ba16 | 526 | namespace internal { |
ykuroda | 0:13a5d365ba16 | 527 | template<typename T> void ignore_unused_variable(const T&) {} |
ykuroda | 0:13a5d365ba16 | 528 | } |
ykuroda | 0:13a5d365ba16 | 529 | } |
ykuroda | 0:13a5d365ba16 | 530 | #define EIGEN_UNUSED_VARIABLE(var) Eigen::internal::ignore_unused_variable(var); |
ykuroda | 0:13a5d365ba16 | 531 | |
ykuroda | 0:13a5d365ba16 | 532 | #if !defined(EIGEN_ASM_COMMENT) |
ykuroda | 0:13a5d365ba16 | 533 | #if (defined __GNUC__) && ( defined(__i386__) || defined(__x86_64__) ) |
ykuroda | 0:13a5d365ba16 | 534 | #define EIGEN_ASM_COMMENT(X) __asm__("#" X) |
ykuroda | 0:13a5d365ba16 | 535 | #else |
ykuroda | 0:13a5d365ba16 | 536 | #define EIGEN_ASM_COMMENT(X) |
ykuroda | 0:13a5d365ba16 | 537 | #endif |
ykuroda | 0:13a5d365ba16 | 538 | #endif |
ykuroda | 0:13a5d365ba16 | 539 | |
ykuroda | 0:13a5d365ba16 | 540 | /* EIGEN_ALIGN_TO_BOUNDARY(n) forces data to be n-byte aligned. This is used to satisfy SIMD requirements. |
ykuroda | 0:13a5d365ba16 | 541 | * However, we do that EVEN if vectorization (EIGEN_VECTORIZE) is disabled, |
ykuroda | 0:13a5d365ba16 | 542 | * so that vectorization doesn't affect binary compatibility. |
ykuroda | 0:13a5d365ba16 | 543 | * |
ykuroda | 0:13a5d365ba16 | 544 | * If we made alignment depend on whether or not EIGEN_VECTORIZE is defined, it would be impossible to link |
ykuroda | 0:13a5d365ba16 | 545 | * vectorized and non-vectorized code. |
ykuroda | 0:13a5d365ba16 | 546 | */ |
ykuroda | 0:13a5d365ba16 | 547 | #if (defined __GNUC__) || (defined __PGI) || (defined __IBMCPP__) || (defined __ARMCC_VERSION) |
ykuroda | 0:13a5d365ba16 | 548 | #define EIGEN_ALIGN_TO_BOUNDARY(n) __attribute__((aligned(n))) |
ykuroda | 0:13a5d365ba16 | 549 | #elif (defined _MSC_VER) |
ykuroda | 0:13a5d365ba16 | 550 | #define EIGEN_ALIGN_TO_BOUNDARY(n) __declspec(align(n)) |
ykuroda | 0:13a5d365ba16 | 551 | #elif (defined __SUNPRO_CC) |
ykuroda | 0:13a5d365ba16 | 552 | // FIXME not sure about this one: |
ykuroda | 0:13a5d365ba16 | 553 | #define EIGEN_ALIGN_TO_BOUNDARY(n) __attribute__((aligned(n))) |
ykuroda | 0:13a5d365ba16 | 554 | #else |
ykuroda | 0:13a5d365ba16 | 555 | #error Please tell me what is the equivalent of __attribute__((aligned(n))) for your compiler |
ykuroda | 0:13a5d365ba16 | 556 | #endif |
ykuroda | 0:13a5d365ba16 | 557 | |
ykuroda | 0:13a5d365ba16 | 558 | #define EIGEN_ALIGN8 EIGEN_ALIGN_TO_BOUNDARY(8) |
ykuroda | 0:13a5d365ba16 | 559 | #define EIGEN_ALIGN16 EIGEN_ALIGN_TO_BOUNDARY(16) |
ykuroda | 0:13a5d365ba16 | 560 | |
ykuroda | 0:13a5d365ba16 | 561 | #if EIGEN_ALIGN_STATICALLY |
ykuroda | 0:13a5d365ba16 | 562 | #define EIGEN_USER_ALIGN_TO_BOUNDARY(n) EIGEN_ALIGN_TO_BOUNDARY(n) |
ykuroda | 0:13a5d365ba16 | 563 | #define EIGEN_USER_ALIGN16 EIGEN_ALIGN16 |
ykuroda | 0:13a5d365ba16 | 564 | #else |
ykuroda | 0:13a5d365ba16 | 565 | #define EIGEN_USER_ALIGN_TO_BOUNDARY(n) |
ykuroda | 0:13a5d365ba16 | 566 | #define EIGEN_USER_ALIGN16 |
ykuroda | 0:13a5d365ba16 | 567 | #endif |
ykuroda | 0:13a5d365ba16 | 568 | |
ykuroda | 0:13a5d365ba16 | 569 | #ifdef EIGEN_DONT_USE_RESTRICT_KEYWORD |
ykuroda | 0:13a5d365ba16 | 570 | #define EIGEN_RESTRICT |
ykuroda | 0:13a5d365ba16 | 571 | #endif |
ykuroda | 0:13a5d365ba16 | 572 | #ifndef EIGEN_RESTRICT |
ykuroda | 0:13a5d365ba16 | 573 | #define EIGEN_RESTRICT __restrict |
ykuroda | 0:13a5d365ba16 | 574 | #endif |
ykuroda | 0:13a5d365ba16 | 575 | |
ykuroda | 0:13a5d365ba16 | 576 | #ifndef EIGEN_STACK_ALLOCATION_LIMIT |
ykuroda | 0:13a5d365ba16 | 577 | // 131072 == 128 KB |
ykuroda | 0:13a5d365ba16 | 578 | #define EIGEN_STACK_ALLOCATION_LIMIT 131072 |
ykuroda | 0:13a5d365ba16 | 579 | #endif |
ykuroda | 0:13a5d365ba16 | 580 | |
ykuroda | 0:13a5d365ba16 | 581 | #ifndef EIGEN_DEFAULT_IO_FORMAT |
ykuroda | 0:13a5d365ba16 | 582 | #ifdef EIGEN_MAKING_DOCS |
ykuroda | 0:13a5d365ba16 | 583 | // format used in Eigen's documentation |
ykuroda | 0:13a5d365ba16 | 584 | // needed to define it here as escaping characters in CMake add_definition's argument seems very problematic. |
ykuroda | 0:13a5d365ba16 | 585 | #define EIGEN_DEFAULT_IO_FORMAT Eigen::IOFormat(3, 0, " ", "\n", "", "") |
ykuroda | 0:13a5d365ba16 | 586 | #else |
ykuroda | 0:13a5d365ba16 | 587 | #define EIGEN_DEFAULT_IO_FORMAT Eigen::IOFormat() |
ykuroda | 0:13a5d365ba16 | 588 | #endif |
ykuroda | 0:13a5d365ba16 | 589 | #endif |
ykuroda | 0:13a5d365ba16 | 590 | |
ykuroda | 0:13a5d365ba16 | 591 | // just an empty macro ! |
ykuroda | 0:13a5d365ba16 | 592 | #define EIGEN_EMPTY |
ykuroda | 0:13a5d365ba16 | 593 | |
ykuroda | 0:13a5d365ba16 | 594 | #if defined(_MSC_VER) && (_MSC_VER < 1900) && (!defined(__INTEL_COMPILER)) |
ykuroda | 0:13a5d365ba16 | 595 | #define EIGEN_INHERIT_ASSIGNMENT_EQUAL_OPERATOR(Derived) \ |
ykuroda | 0:13a5d365ba16 | 596 | using Base::operator =; |
ykuroda | 0:13a5d365ba16 | 597 | #elif defined(__clang__) // workaround clang bug (see http://forum.kde.org/viewtopic.php?f=74&t=102653) |
ykuroda | 0:13a5d365ba16 | 598 | #define EIGEN_INHERIT_ASSIGNMENT_EQUAL_OPERATOR(Derived) \ |
ykuroda | 0:13a5d365ba16 | 599 | using Base::operator =; \ |
ykuroda | 0:13a5d365ba16 | 600 | EIGEN_STRONG_INLINE Derived& operator=(const Derived& other) { Base::operator=(other); return *this; } \ |
ykuroda | 0:13a5d365ba16 | 601 | template <typename OtherDerived> \ |
ykuroda | 0:13a5d365ba16 | 602 | EIGEN_STRONG_INLINE Derived& operator=(const DenseBase<OtherDerived>& other) { Base::operator=(other.derived()); return *this; } |
ykuroda | 0:13a5d365ba16 | 603 | #else |
ykuroda | 0:13a5d365ba16 | 604 | #define EIGEN_INHERIT_ASSIGNMENT_EQUAL_OPERATOR(Derived) \ |
ykuroda | 0:13a5d365ba16 | 605 | using Base::operator =; \ |
ykuroda | 0:13a5d365ba16 | 606 | EIGEN_STRONG_INLINE Derived& operator=(const Derived& other) \ |
ykuroda | 0:13a5d365ba16 | 607 | { \ |
ykuroda | 0:13a5d365ba16 | 608 | Base::operator=(other); \ |
ykuroda | 0:13a5d365ba16 | 609 | return *this; \ |
ykuroda | 0:13a5d365ba16 | 610 | } |
ykuroda | 0:13a5d365ba16 | 611 | #endif |
ykuroda | 0:13a5d365ba16 | 612 | |
ykuroda | 0:13a5d365ba16 | 613 | /** \internal |
ykuroda | 0:13a5d365ba16 | 614 | * \brief Macro to manually inherit assignment operators. |
ykuroda | 0:13a5d365ba16 | 615 | * This is necessary, because the implicitly defined assignment operator gets deleted when a custom operator= is defined. |
ykuroda | 0:13a5d365ba16 | 616 | */ |
ykuroda | 0:13a5d365ba16 | 617 | #define EIGEN_INHERIT_ASSIGNMENT_OPERATORS(Derived) EIGEN_INHERIT_ASSIGNMENT_EQUAL_OPERATOR(Derived) |
ykuroda | 0:13a5d365ba16 | 618 | |
ykuroda | 0:13a5d365ba16 | 619 | /** |
ykuroda | 0:13a5d365ba16 | 620 | * Just a side note. Commenting within defines works only by documenting |
ykuroda | 0:13a5d365ba16 | 621 | * behind the object (via '!<'). Comments cannot be multi-line and thus |
ykuroda | 0:13a5d365ba16 | 622 | * we have these extra long lines. What is confusing doxygen over here is |
ykuroda | 0:13a5d365ba16 | 623 | * that we use '\' and basically have a bunch of typedefs with their |
ykuroda | 0:13a5d365ba16 | 624 | * documentation in a single line. |
ykuroda | 0:13a5d365ba16 | 625 | **/ |
ykuroda | 0:13a5d365ba16 | 626 | |
ykuroda | 0:13a5d365ba16 | 627 | #define EIGEN_GENERIC_PUBLIC_INTERFACE(Derived) \ |
ykuroda | 0:13a5d365ba16 | 628 | typedef typename Eigen::internal::traits<Derived>::Scalar Scalar; /*!< \brief Numeric type, e.g. float, double, int or std::complex<float>. */ \ |
ykuroda | 0:13a5d365ba16 | 629 | 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. */ \ |
ykuroda | 0:13a5d365ba16 | 630 | 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. */ \ |
ykuroda | 0:13a5d365ba16 | 631 | typedef typename Eigen::internal::nested<Derived>::type Nested; \ |
ykuroda | 0:13a5d365ba16 | 632 | typedef typename Eigen::internal::traits<Derived>::StorageKind StorageKind; \ |
ykuroda | 0:13a5d365ba16 | 633 | typedef typename Eigen::internal::traits<Derived>::Index Index; \ |
ykuroda | 0:13a5d365ba16 | 634 | enum { RowsAtCompileTime = Eigen::internal::traits<Derived>::RowsAtCompileTime, \ |
ykuroda | 0:13a5d365ba16 | 635 | ColsAtCompileTime = Eigen::internal::traits<Derived>::ColsAtCompileTime, \ |
ykuroda | 0:13a5d365ba16 | 636 | Flags = Eigen::internal::traits<Derived>::Flags, \ |
ykuroda | 0:13a5d365ba16 | 637 | CoeffReadCost = Eigen::internal::traits<Derived>::CoeffReadCost, \ |
ykuroda | 0:13a5d365ba16 | 638 | SizeAtCompileTime = Base::SizeAtCompileTime, \ |
ykuroda | 0:13a5d365ba16 | 639 | MaxSizeAtCompileTime = Base::MaxSizeAtCompileTime, \ |
ykuroda | 0:13a5d365ba16 | 640 | IsVectorAtCompileTime = Base::IsVectorAtCompileTime }; |
ykuroda | 0:13a5d365ba16 | 641 | |
ykuroda | 0:13a5d365ba16 | 642 | |
ykuroda | 0:13a5d365ba16 | 643 | #define EIGEN_DENSE_PUBLIC_INTERFACE(Derived) \ |
ykuroda | 0:13a5d365ba16 | 644 | typedef typename Eigen::internal::traits<Derived>::Scalar Scalar; /*!< \brief Numeric type, e.g. float, double, int or std::complex<float>. */ \ |
ykuroda | 0:13a5d365ba16 | 645 | 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. */ \ |
ykuroda | 0:13a5d365ba16 | 646 | typedef typename Base::PacketScalar PacketScalar; \ |
ykuroda | 0:13a5d365ba16 | 647 | 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. */ \ |
ykuroda | 0:13a5d365ba16 | 648 | typedef typename Eigen::internal::nested<Derived>::type Nested; \ |
ykuroda | 0:13a5d365ba16 | 649 | typedef typename Eigen::internal::traits<Derived>::StorageKind StorageKind; \ |
ykuroda | 0:13a5d365ba16 | 650 | typedef typename Eigen::internal::traits<Derived>::Index Index; \ |
ykuroda | 0:13a5d365ba16 | 651 | enum { RowsAtCompileTime = Eigen::internal::traits<Derived>::RowsAtCompileTime, \ |
ykuroda | 0:13a5d365ba16 | 652 | ColsAtCompileTime = Eigen::internal::traits<Derived>::ColsAtCompileTime, \ |
ykuroda | 0:13a5d365ba16 | 653 | MaxRowsAtCompileTime = Eigen::internal::traits<Derived>::MaxRowsAtCompileTime, \ |
ykuroda | 0:13a5d365ba16 | 654 | MaxColsAtCompileTime = Eigen::internal::traits<Derived>::MaxColsAtCompileTime, \ |
ykuroda | 0:13a5d365ba16 | 655 | Flags = Eigen::internal::traits<Derived>::Flags, \ |
ykuroda | 0:13a5d365ba16 | 656 | CoeffReadCost = Eigen::internal::traits<Derived>::CoeffReadCost, \ |
ykuroda | 0:13a5d365ba16 | 657 | SizeAtCompileTime = Base::SizeAtCompileTime, \ |
ykuroda | 0:13a5d365ba16 | 658 | MaxSizeAtCompileTime = Base::MaxSizeAtCompileTime, \ |
ykuroda | 0:13a5d365ba16 | 659 | IsVectorAtCompileTime = Base::IsVectorAtCompileTime }; \ |
ykuroda | 0:13a5d365ba16 | 660 | using Base::derived; \ |
ykuroda | 0:13a5d365ba16 | 661 | using Base::const_cast_derived; |
ykuroda | 0:13a5d365ba16 | 662 | |
ykuroda | 0:13a5d365ba16 | 663 | |
ykuroda | 0:13a5d365ba16 | 664 | #define EIGEN_PLAIN_ENUM_MIN(a,b) (((int)a <= (int)b) ? (int)a : (int)b) |
ykuroda | 0:13a5d365ba16 | 665 | #define EIGEN_PLAIN_ENUM_MAX(a,b) (((int)a >= (int)b) ? (int)a : (int)b) |
ykuroda | 0:13a5d365ba16 | 666 | |
ykuroda | 0:13a5d365ba16 | 667 | // EIGEN_SIZE_MIN_PREFER_DYNAMIC gives the min between compile-time sizes. 0 has absolute priority, followed by 1, |
ykuroda | 0:13a5d365ba16 | 668 | // followed by Dynamic, followed by other finite values. The reason for giving Dynamic the priority over |
ykuroda | 0:13a5d365ba16 | 669 | // finite values is that min(3, Dynamic) should be Dynamic, since that could be anything between 0 and 3. |
ykuroda | 0:13a5d365ba16 | 670 | #define EIGEN_SIZE_MIN_PREFER_DYNAMIC(a,b) (((int)a == 0 || (int)b == 0) ? 0 \ |
ykuroda | 0:13a5d365ba16 | 671 | : ((int)a == 1 || (int)b == 1) ? 1 \ |
ykuroda | 0:13a5d365ba16 | 672 | : ((int)a == Dynamic || (int)b == Dynamic) ? Dynamic \ |
ykuroda | 0:13a5d365ba16 | 673 | : ((int)a <= (int)b) ? (int)a : (int)b) |
ykuroda | 0:13a5d365ba16 | 674 | |
ykuroda | 0:13a5d365ba16 | 675 | // EIGEN_SIZE_MIN_PREFER_FIXED is a variant of EIGEN_SIZE_MIN_PREFER_DYNAMIC comparing MaxSizes. The difference is that finite values |
ykuroda | 0:13a5d365ba16 | 676 | // now have priority over Dynamic, so that min(3, Dynamic) gives 3. Indeed, whatever the actual value is |
ykuroda | 0:13a5d365ba16 | 677 | // (between 0 and 3), it is not more than 3. |
ykuroda | 0:13a5d365ba16 | 678 | #define EIGEN_SIZE_MIN_PREFER_FIXED(a,b) (((int)a == 0 || (int)b == 0) ? 0 \ |
ykuroda | 0:13a5d365ba16 | 679 | : ((int)a == 1 || (int)b == 1) ? 1 \ |
ykuroda | 0:13a5d365ba16 | 680 | : ((int)a == Dynamic && (int)b == Dynamic) ? Dynamic \ |
ykuroda | 0:13a5d365ba16 | 681 | : ((int)a == Dynamic) ? (int)b \ |
ykuroda | 0:13a5d365ba16 | 682 | : ((int)b == Dynamic) ? (int)a \ |
ykuroda | 0:13a5d365ba16 | 683 | : ((int)a <= (int)b) ? (int)a : (int)b) |
ykuroda | 0:13a5d365ba16 | 684 | |
ykuroda | 0:13a5d365ba16 | 685 | // see EIGEN_SIZE_MIN_PREFER_DYNAMIC. No need for a separate variant for MaxSizes here. |
ykuroda | 0:13a5d365ba16 | 686 | #define EIGEN_SIZE_MAX(a,b) (((int)a == Dynamic || (int)b == Dynamic) ? Dynamic \ |
ykuroda | 0:13a5d365ba16 | 687 | : ((int)a >= (int)b) ? (int)a : (int)b) |
ykuroda | 0:13a5d365ba16 | 688 | |
ykuroda | 0:13a5d365ba16 | 689 | #define EIGEN_ADD_COST(a,b) int(a)==Dynamic || int(b)==Dynamic ? Dynamic : int(a)+int(b) |
ykuroda | 0:13a5d365ba16 | 690 | |
ykuroda | 0:13a5d365ba16 | 691 | #define EIGEN_LOGICAL_XOR(a,b) (((a) || (b)) && !((a) && (b))) |
ykuroda | 0:13a5d365ba16 | 692 | |
ykuroda | 0:13a5d365ba16 | 693 | #define EIGEN_IMPLIES(a,b) (!(a) || (b)) |
ykuroda | 0:13a5d365ba16 | 694 | |
ykuroda | 0:13a5d365ba16 | 695 | #define EIGEN_MAKE_CWISE_BINARY_OP(METHOD,FUNCTOR) \ |
ykuroda | 0:13a5d365ba16 | 696 | template<typename OtherDerived> \ |
ykuroda | 0:13a5d365ba16 | 697 | EIGEN_STRONG_INLINE const CwiseBinaryOp<FUNCTOR<Scalar>, const Derived, const OtherDerived> \ |
ykuroda | 0:13a5d365ba16 | 698 | (METHOD)(const EIGEN_CURRENT_STORAGE_BASE_CLASS<OtherDerived> &other) const \ |
ykuroda | 0:13a5d365ba16 | 699 | { \ |
ykuroda | 0:13a5d365ba16 | 700 | return CwiseBinaryOp<FUNCTOR<Scalar>, const Derived, const OtherDerived>(derived(), other.derived()); \ |
ykuroda | 0:13a5d365ba16 | 701 | } |
ykuroda | 0:13a5d365ba16 | 702 | |
ykuroda | 0:13a5d365ba16 | 703 | // the expression type of a cwise product |
ykuroda | 0:13a5d365ba16 | 704 | #define EIGEN_CWISE_PRODUCT_RETURN_TYPE(LHS,RHS) \ |
ykuroda | 0:13a5d365ba16 | 705 | CwiseBinaryOp< \ |
ykuroda | 0:13a5d365ba16 | 706 | internal::scalar_product_op< \ |
ykuroda | 0:13a5d365ba16 | 707 | typename internal::traits<LHS>::Scalar, \ |
ykuroda | 0:13a5d365ba16 | 708 | typename internal::traits<RHS>::Scalar \ |
ykuroda | 0:13a5d365ba16 | 709 | >, \ |
ykuroda | 0:13a5d365ba16 | 710 | const LHS, \ |
ykuroda | 0:13a5d365ba16 | 711 | const RHS \ |
ykuroda | 0:13a5d365ba16 | 712 | > |
ykuroda | 0:13a5d365ba16 | 713 | |
ykuroda | 0:13a5d365ba16 | 714 | #endif // EIGEN_MACROS_H |