Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #ifndef EIGEN_CORE_H
00027 #define EIGEN_CORE_H
00028
00029
00030 #include "src/Core/util/DisableStupidWarnings.h"
00031
00032
00033
00034
00035 #include "src/Core/util/Macros.h"
00036
00037
00038
00039 #if !EIGEN_ALIGN
00040 #ifndef EIGEN_DONT_VECTORIZE
00041 #define EIGEN_DONT_VECTORIZE
00042 #endif
00043 #endif
00044
00045 #ifdef _MSC_VER
00046 #include <malloc.h>
00047 #if (_MSC_VER >= 1500) // 2008 or later
00048
00049
00050 #if (defined(_M_IX86_FP) && (_M_IX86_FP >= 2)) || defined(_M_X64)
00051 #define EIGEN_SSE2_ON_MSVC_2008_OR_LATER
00052 #endif
00053 #endif
00054 #else
00055
00056 #if (defined __SSE2__) && ( (!defined __GNUC__) || EIGEN_GNUC_AT_LEAST(4,2) )
00057 #define EIGEN_SSE2_ON_NON_MSVC_BUT_NOT_OLD_GCC
00058 #endif
00059 #endif
00060
00061 #ifndef EIGEN_DONT_VECTORIZE
00062
00063 #if defined (EIGEN_SSE2_ON_NON_MSVC_BUT_NOT_OLD_GCC) || defined(EIGEN_SSE2_ON_MSVC_2008_OR_LATER)
00064
00065
00066
00067
00068 #define EIGEN_VECTORIZE
00069 #define EIGEN_VECTORIZE_SSE
00070 #define EIGEN_VECTORIZE_SSE2
00071
00072
00073
00074
00075
00076 #ifdef __SSE3__
00077 #define EIGEN_VECTORIZE_SSE3
00078 #endif
00079 #ifdef __SSSE3__
00080 #define EIGEN_VECTORIZE_SSSE3
00081 #endif
00082 #ifdef __SSE4_1__
00083 #define EIGEN_VECTORIZE_SSE4_1
00084 #endif
00085 #ifdef __SSE4_2__
00086 #define EIGEN_VECTORIZE_SSE4_2
00087 #endif
00088
00089
00090
00091
00092
00093
00094
00095
00096
00097
00098 extern "C" {
00099 #include <emmintrin.h>
00100 #include <xmmintrin.h>
00101 #ifdef EIGEN_VECTORIZE_SSE3
00102 #include <pmmintrin.h>
00103 #endif
00104 #ifdef EIGEN_VECTORIZE_SSSE3
00105 #include <tmmintrin.h>
00106 #endif
00107 #ifdef EIGEN_VECTORIZE_SSE4_1
00108 #include <smmintrin.h>
00109 #endif
00110 #ifdef EIGEN_VECTORIZE_SSE4_2
00111 #include <nmmintrin.h>
00112 #endif
00113 }
00114 #elif defined __ALTIVEC__
00115 #define EIGEN_VECTORIZE
00116 #define EIGEN_VECTORIZE_ALTIVEC
00117 #include <altivec.h>
00118
00119
00120 #undef bool
00121 #undef vector
00122 #undef pixel
00123 #elif defined __ARM_NEON__
00124 #define EIGEN_VECTORIZE
00125 #define EIGEN_VECTORIZE_NEON
00126 #include <arm_neon.h>
00127 #endif
00128 #endif
00129
00130 #if (defined _OPENMP) && (!defined EIGEN_DONT_PARALLELIZE)
00131 #define EIGEN_HAS_OPENMP
00132 #endif
00133
00134 #ifdef EIGEN_HAS_OPENMP
00135 #include <omp.h>
00136 #endif
00137
00138
00139 #if !(defined(_MSC_VER) && defined(_WIN32_WCE))
00140 #define EIGEN_HAS_ERRNO
00141 #endif
00142
00143 #ifdef EIGEN_HAS_ERRNO
00144 #include <cerrno>
00145 #endif
00146 #include <cstddef>
00147 #include <cstdlib>
00148 #include <cmath>
00149 #include <complex>
00150 #include <cassert>
00151 #include <functional>
00152 #include <iosfwd>
00153 #include <cstring>
00154 #include <string>
00155 #include <limits>
00156 #include <climits>
00157
00158 #include <algorithm>
00159
00160
00161 #ifdef EIGEN_DEBUG_ASSIGN
00162 #include <iostream>
00163 #endif
00164
00165
00166 #if defined(_MSC_VER) && (defined(_M_IX86)||defined(_M_X64))
00167 #include <intrin.h>
00168 #endif
00169
00170 #if (defined(_CPPUNWIND) || defined(__EXCEPTIONS)) && !defined(EIGEN_NO_EXCEPTIONS)
00171 #define EIGEN_EXCEPTIONS
00172 #endif
00173
00174 #ifdef EIGEN_EXCEPTIONS
00175 #include <new>
00176 #endif
00177
00178
00179
00180
00181 #if defined(min) || defined(max)
00182 #error The preprocessor symbols 'min' or 'max' are defined. If you are compiling on Windows, do #define NOMINMAX to prevent windows.h from defining these symbols.
00183 #endif
00184
00185
00186 #undef B0
00187
00188
00189 namespace Eigen {
00190
00191 inline static const char *SimdInstructionSetsInUse(void) {
00192 #if defined(EIGEN_VECTORIZE_SSE4_2)
00193 return "SSE, SSE2, SSE3, SSSE3, SSE4.1, SSE4.2";
00194 #elif defined(EIGEN_VECTORIZE_SSE4_1)
00195 return "SSE, SSE2, SSE3, SSSE3, SSE4.1";
00196 #elif defined(EIGEN_VECTORIZE_SSSE3)
00197 return "SSE, SSE2, SSE3, SSSE3";
00198 #elif defined(EIGEN_VECTORIZE_SSE3)
00199 return "SSE, SSE2, SSE3";
00200 #elif defined(EIGEN_VECTORIZE_SSE2)
00201 return "SSE, SSE2";
00202 #elif defined(EIGEN_VECTORIZE_ALTIVEC)
00203 return "AltiVec";
00204 #elif defined(EIGEN_VECTORIZE_NEON)
00205 return "ARM NEON";
00206 #else
00207 return "None";
00208 #endif
00209 }
00210
00211 #define STAGE10_FULL_EIGEN2_API 10
00212 #define STAGE20_RESOLVE_API_CONFLICTS 20
00213 #define STAGE30_FULL_EIGEN3_API 30
00214 #define STAGE40_FULL_EIGEN3_STRICTNESS 40
00215 #define STAGE99_NO_EIGEN2_SUPPORT 99
00216
00217 #if defined EIGEN2_SUPPORT_STAGE40_FULL_EIGEN3_STRICTNESS
00218 #define EIGEN2_SUPPORT
00219 #define EIGEN2_SUPPORT_STAGE STAGE40_FULL_EIGEN3_STRICTNESS
00220 #elif defined EIGEN2_SUPPORT_STAGE30_FULL_EIGEN3_API
00221 #define EIGEN2_SUPPORT
00222 #define EIGEN2_SUPPORT_STAGE STAGE30_FULL_EIGEN3_API
00223 #elif defined EIGEN2_SUPPORT_STAGE20_RESOLVE_API_CONFLICTS
00224 #define EIGEN2_SUPPORT
00225 #define EIGEN2_SUPPORT_STAGE STAGE20_RESOLVE_API_CONFLICTS
00226 #elif defined EIGEN2_SUPPORT_STAGE10_FULL_EIGEN2_API
00227 #define EIGEN2_SUPPORT
00228 #define EIGEN2_SUPPORT_STAGE STAGE10_FULL_EIGEN2_API
00229 #elif defined EIGEN2_SUPPORT
00230
00231 #define EIGEN2_SUPPORT_STAGE30_FULL_EIGEN3_API
00232 #define EIGEN2_SUPPORT_STAGE STAGE30_FULL_EIGEN3_API
00233 #else
00234 #define EIGEN2_SUPPORT_STAGE STAGE99_NO_EIGEN2_SUPPORT
00235 #endif
00236
00237 #ifdef EIGEN2_SUPPORT
00238 #undef minor
00239 #endif
00240
00241
00242
00243 using std::size_t;
00244
00245 using std::ptrdiff_t;
00246
00247
00248
00249
00250
00251
00252
00253
00254
00255
00256
00257
00258
00259 #include "src/Core/util/Constants.h"
00260 #include "src/Core/util/ForwardDeclarations.h"
00261 #include "src/Core/util/Meta.h"
00262 #include "src/Core/util/XprHelper.h"
00263 #include "src/Core/util/StaticAssert.h"
00264 #include "src/Core/util/Memory.h"
00265
00266 #include "src/Core/NumTraits.h"
00267 #include "src/Core/MathFunctions.h"
00268 #include "src/Core/GenericPacketMath.h"
00269
00270 #if defined EIGEN_VECTORIZE_SSE
00271 #include "src/Core/arch/SSE/PacketMath.h"
00272 #include "src/Core/arch/SSE/MathFunctions.h"
00273 #include "src/Core/arch/SSE/Complex.h"
00274 #elif defined EIGEN_VECTORIZE_ALTIVEC
00275 #include "src/Core/arch/AltiVec/PacketMath.h"
00276 #include "src/Core/arch/AltiVec/Complex.h"
00277 #elif defined EIGEN_VECTORIZE_NEON
00278 #include "src/Core/arch/NEON/PacketMath.h"
00279 #include "src/Core/arch/NEON/Complex.h"
00280 #endif
00281
00282 #include "src/Core/arch/Default/Settings.h"
00283
00284 #include "src/Core/Functors.h"
00285 #include "src/Core/DenseCoeffsBase.h"
00286 #include "src/Core/DenseBase.h"
00287 #include "src/Core/MatrixBase.h"
00288 #include "src/Core/EigenBase.h"
00289
00290 #ifndef EIGEN_PARSED_BY_DOXYGEN // work around Doxygen bug triggered by Assign.h r814874
00291
00292 #include "src/Core/Assign.h"
00293 #endif
00294
00295 #include "src/Core/util/BlasUtil.h"
00296 #include "src/Core/DenseStorage.h"
00297 #include "src/Core/NestByValue.h"
00298 #include "src/Core/ForceAlignedAccess.h"
00299 #include "src/Core/ReturnByValue.h"
00300 #include "src/Core/NoAlias.h"
00301 #include "src/Core/PlainObjectBase.h"
00302 #include "src/Core/Matrix.h"
00303 #include "src/Core/Array.h"
00304 #include "src/Core/CwiseBinaryOp.h"
00305 #include "src/Core/CwiseUnaryOp.h"
00306 #include "src/Core/CwiseNullaryOp.h"
00307 #include "src/Core/CwiseUnaryView.h"
00308 #include "src/Core/SelfCwiseBinaryOp.h"
00309 #include "src/Core/Dot.h"
00310 #include "src/Core/StableNorm.h"
00311 #include "src/Core/MapBase.h"
00312 #include "src/Core/Stride.h"
00313 #include "src/Core/Map.h"
00314 #include "src/Core/Block.h"
00315 #include "src/Core/VectorBlock.h"
00316 #include "src/Core/Transpose.h"
00317 #include "src/Core/DiagonalMatrix.h"
00318 #include "src/Core/Diagonal.h"
00319 #include "src/Core/DiagonalProduct.h"
00320 #include "src/Core/PermutationMatrix.h"
00321 #include "src/Core/Transpositions.h"
00322 #include "src/Core/Redux.h"
00323 #include "src/Core/Visitor.h"
00324 #include "src/Core/Fuzzy.h"
00325 #include "src/Core/IO.h"
00326 #include "src/Core/Swap.h"
00327 #include "src/Core/CommaInitializer.h"
00328 #include "src/Core/Flagged.h"
00329 #include "src/Core/ProductBase.h"
00330 #include "src/Core/GeneralProduct.h"
00331 #include "src/Core/TriangularMatrix.h"
00332 #include "src/Core/SelfAdjointView.h"
00333 #include "src/Core/SolveTriangular.h"
00334 #include "src/Core/products/Parallelizer.h"
00335 #include "src/Core/products/CoeffBasedProduct.h"
00336 #include "src/Core/products/GeneralBlockPanelKernel.h"
00337 #include "src/Core/products/GeneralMatrixVector.h"
00338 #include "src/Core/products/GeneralMatrixMatrix.h"
00339 #include "src/Core/products/GeneralMatrixMatrixTriangular.h"
00340 #include "src/Core/products/SelfadjointMatrixVector.h"
00341 #include "src/Core/products/SelfadjointMatrixMatrix.h"
00342 #include "src/Core/products/SelfadjointProduct.h"
00343 #include "src/Core/products/SelfadjointRank2Update.h"
00344 #include "src/Core/products/TriangularMatrixVector.h"
00345 #include "src/Core/products/TriangularMatrixMatrix.h"
00346 #include "src/Core/products/TriangularSolverMatrix.h"
00347 #include "src/Core/products/TriangularSolverVector.h"
00348 #include "src/Core/BandMatrix.h"
00349
00350 #include "src/Core/BooleanRedux.h"
00351 #include "src/Core/Select.h"
00352 #include "src/Core/VectorwiseOp.h"
00353 #include "src/Core/Random.h"
00354 #include "src/Core/Replicate.h"
00355 #include "src/Core/Reverse.h"
00356 #include "src/Core/ArrayBase.h"
00357 #include "src/Core/ArrayWrapper.h"
00358
00359 #ifdef EIGEN_ENABLE_EVALUATORS
00360 #include "src/Core/Product.h"
00361 #include "src/Core/CoreEvaluators.h"
00362 #include "src/Core/AssignEvaluator.h"
00363 #endif
00364
00365 }
00366
00367 #include "src/Core/GlobalFunctions.h"
00368
00369 #include "src/Core/util/ReenableStupidWarnings.h"
00370
00371 #ifdef EIGEN2_SUPPORT
00372 #include "Eigen2Support"
00373 #endif
00374
00375 #endif // EIGEN_CORE_H