Merge of itasc branch. Project files, scons and cmake should be working. Makefile...
[blender.git] / extern / Eigen2 / Eigen / Core
1 #ifndef EIGEN_CORE_H
2 #define EIGEN_CORE_H
3
4 // first thing Eigen does: prevent MSVC from committing suicide
5 #include "src/Core/util/DisableMSVCWarnings.h"
6
7 #ifdef _MSC_VER
8   #include <malloc.h> // for _aligned_malloc -- need it regardless of whether vectorization is enabled
9   #if (_MSC_VER >= 1500) // 2008 or later
10     // Remember that usage of defined() in a #define is undefined by the standard.
11     // a user reported that in 64-bit mode, MSVC doesn't care to define _M_IX86_FP.
12     #if (defined(_M_IX86_FP) && (_M_IX86_FP >= 2)) || defined(_M_X64)
13       #define EIGEN_SSE2_ON_MSVC_2008_OR_LATER
14     #endif   
15   #endif
16 #endif
17
18 #ifdef __GNUC__
19   #define EIGEN_GNUC_AT_LEAST(x,y) ((__GNUC__>=x && __GNUC_MINOR__>=y) || __GNUC__>x)
20 #else
21   #define EIGEN_GNUC_AT_LEAST(x,y) 0
22 #endif
23
24 // Remember that usage of defined() in a #define is undefined by the standard
25 #if (defined __SSE2__) && ( (!defined __GNUC__) || EIGEN_GNUC_AT_LEAST(4,2) )
26   #define EIGEN_SSE2_BUT_NOT_OLD_GCC
27 #endif
28
29 #ifndef EIGEN_DONT_VECTORIZE
30   #if defined (EIGEN_SSE2_BUT_NOT_OLD_GCC) || defined(EIGEN_SSE2_ON_MSVC_2008_OR_LATER)
31     #define EIGEN_VECTORIZE
32     #define EIGEN_VECTORIZE_SSE
33     #include <emmintrin.h>
34     #include <xmmintrin.h>
35     #ifdef __SSE3__
36       #include <pmmintrin.h>
37     #endif
38     #ifdef __SSSE3__
39       #include <tmmintrin.h>
40     #endif
41   #elif defined __ALTIVEC__
42     #define EIGEN_VECTORIZE
43     #define EIGEN_VECTORIZE_ALTIVEC
44     #include <altivec.h>
45     // We need to #undef all these ugly tokens defined in <altivec.h>
46     // => use __vector instead of vector
47     #undef bool
48     #undef vector
49     #undef pixel
50   #endif
51 #endif
52
53 #include <cstdlib>
54 #include <cmath>
55 #include <complex>
56 #include <cassert>
57 #include <functional>
58 #include <iostream>
59 #include <cstring>
60 #include <string>
61 #include <limits>
62
63 #if (defined(_CPPUNWIND) || defined(__EXCEPTIONS)) && !defined(EIGEN_NO_EXCEPTIONS)
64   #define EIGEN_EXCEPTIONS
65 #endif
66
67 #ifdef EIGEN_EXCEPTIONS
68   #include <new>
69 #endif
70
71 // this needs to be done after all possible windows C header includes and before any Eigen source includes
72 // (system C++ includes are supposed to be able to deal with this already):
73 // windows.h defines min and max macros which would make Eigen fail to compile.
74 #if defined(min) || defined(max)
75 #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.
76 #endif
77
78 namespace Eigen {
79
80 /** \defgroup Core_Module Core module
81   * This is the main module of Eigen providing dense matrix and vector support
82   * (both fixed and dynamic size) with all the features corresponding to a BLAS library
83   * and much more...
84   *
85   * \code
86   * #include <Eigen/Core>
87   * \endcode
88   */
89
90 #include "src/Core/util/Macros.h"
91 #include "src/Core/util/Constants.h"
92 #include "src/Core/util/ForwardDeclarations.h"
93 #include "src/Core/util/Meta.h"
94 #include "src/Core/util/XprHelper.h"
95 #include "src/Core/util/StaticAssert.h"
96 #include "src/Core/util/Memory.h"
97
98 #include "src/Core/NumTraits.h"
99 #include "src/Core/MathFunctions.h"
100 #include "src/Core/GenericPacketMath.h"
101
102 #if defined EIGEN_VECTORIZE_SSE
103   #include "src/Core/arch/SSE/PacketMath.h"
104 #elif defined EIGEN_VECTORIZE_ALTIVEC
105   #include "src/Core/arch/AltiVec/PacketMath.h"
106 #endif
107
108 #ifndef EIGEN_CACHEFRIENDLY_PRODUCT_THRESHOLD
109 #define EIGEN_CACHEFRIENDLY_PRODUCT_THRESHOLD 16
110 #endif
111
112 #include "src/Core/Functors.h"
113 #include "src/Core/MatrixBase.h"
114 #include "src/Core/Coeffs.h"
115
116 #ifndef EIGEN_PARSED_BY_DOXYGEN // work around Doxygen bug triggered by Assign.h r814874
117                                 // at least confirmed with Doxygen 1.5.5 and 1.5.6
118   #include "src/Core/Assign.h"
119 #endif
120
121 #include "src/Core/MatrixStorage.h"
122 #include "src/Core/NestByValue.h"
123 #include "src/Core/Flagged.h"
124 #include "src/Core/Matrix.h"
125 #include "src/Core/Cwise.h"
126 #include "src/Core/CwiseBinaryOp.h"
127 #include "src/Core/CwiseUnaryOp.h"
128 #include "src/Core/CwiseNullaryOp.h"
129 #include "src/Core/Dot.h"
130 #include "src/Core/Product.h"
131 #include "src/Core/DiagonalProduct.h"
132 #include "src/Core/SolveTriangular.h"
133 #include "src/Core/MapBase.h"
134 #include "src/Core/Map.h"
135 #include "src/Core/Block.h"
136 #include "src/Core/Minor.h"
137 #include "src/Core/Transpose.h"
138 #include "src/Core/DiagonalMatrix.h"
139 #include "src/Core/DiagonalCoeffs.h"
140 #include "src/Core/Sum.h"
141 #include "src/Core/Redux.h"
142 #include "src/Core/Visitor.h"
143 #include "src/Core/Fuzzy.h"
144 #include "src/Core/IO.h"
145 #include "src/Core/Swap.h"
146 #include "src/Core/CommaInitializer.h"
147 #include "src/Core/Part.h"
148 #include "src/Core/CacheFriendlyProduct.h"
149
150 } // namespace Eigen
151
152 #include "src/Core/util/EnableMSVCWarnings.h"
153
154 #endif // EIGEN_CORE_H