@smake/eigen 1.0.1 → 1.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (283) hide show
  1. package/README.md +1 -1
  2. package/eigen/COPYING.APACHE +203 -0
  3. package/eigen/COPYING.BSD +1 -1
  4. package/eigen/COPYING.MINPACK +51 -52
  5. package/eigen/Eigen/Cholesky +0 -1
  6. package/eigen/Eigen/Core +108 -266
  7. package/eigen/Eigen/Eigenvalues +0 -1
  8. package/eigen/Eigen/Geometry +3 -6
  9. package/eigen/Eigen/Householder +0 -1
  10. package/eigen/Eigen/Jacobi +0 -1
  11. package/eigen/Eigen/KLUSupport +41 -0
  12. package/eigen/Eigen/LU +2 -5
  13. package/eigen/Eigen/OrderingMethods +0 -3
  14. package/eigen/Eigen/PaStiXSupport +1 -0
  15. package/eigen/Eigen/PardisoSupport +0 -0
  16. package/eigen/Eigen/QR +0 -1
  17. package/eigen/Eigen/QtAlignedMalloc +0 -1
  18. package/eigen/Eigen/SVD +0 -1
  19. package/eigen/Eigen/Sparse +0 -2
  20. package/eigen/Eigen/SparseCholesky +0 -8
  21. package/eigen/Eigen/SparseLU +4 -0
  22. package/eigen/Eigen/src/Cholesky/LDLT.h +42 -27
  23. package/eigen/Eigen/src/Cholesky/LLT.h +39 -23
  24. package/eigen/Eigen/src/CholmodSupport/CholmodSupport.h +90 -47
  25. package/eigen/Eigen/src/Core/ArithmeticSequence.h +413 -0
  26. package/eigen/Eigen/src/Core/Array.h +99 -11
  27. package/eigen/Eigen/src/Core/ArrayBase.h +1 -1
  28. package/eigen/Eigen/src/Core/ArrayWrapper.h +21 -21
  29. package/eigen/Eigen/src/Core/Assign.h +1 -1
  30. package/eigen/Eigen/src/Core/AssignEvaluator.h +125 -50
  31. package/eigen/Eigen/src/Core/Assign_MKL.h +10 -10
  32. package/eigen/Eigen/src/Core/BandMatrix.h +16 -16
  33. package/eigen/Eigen/src/Core/Block.h +56 -60
  34. package/eigen/Eigen/src/Core/BooleanRedux.h +29 -31
  35. package/eigen/Eigen/src/Core/CommaInitializer.h +7 -3
  36. package/eigen/Eigen/src/Core/CoreEvaluators.h +325 -272
  37. package/eigen/Eigen/src/Core/CoreIterators.h +5 -0
  38. package/eigen/Eigen/src/Core/CwiseBinaryOp.h +21 -22
  39. package/eigen/Eigen/src/Core/CwiseNullaryOp.h +153 -18
  40. package/eigen/Eigen/src/Core/CwiseUnaryOp.h +6 -6
  41. package/eigen/Eigen/src/Core/CwiseUnaryView.h +12 -10
  42. package/eigen/Eigen/src/Core/DenseBase.h +128 -39
  43. package/eigen/Eigen/src/Core/DenseCoeffsBase.h +25 -21
  44. package/eigen/Eigen/src/Core/DenseStorage.h +150 -68
  45. package/eigen/Eigen/src/Core/Diagonal.h +21 -23
  46. package/eigen/Eigen/src/Core/DiagonalMatrix.h +50 -2
  47. package/eigen/Eigen/src/Core/DiagonalProduct.h +1 -1
  48. package/eigen/Eigen/src/Core/Dot.h +10 -10
  49. package/eigen/Eigen/src/Core/EigenBase.h +10 -9
  50. package/eigen/Eigen/src/Core/ForceAlignedAccess.h +8 -4
  51. package/eigen/Eigen/src/Core/Fuzzy.h +3 -3
  52. package/eigen/Eigen/src/Core/GeneralProduct.h +20 -10
  53. package/eigen/Eigen/src/Core/GenericPacketMath.h +597 -147
  54. package/eigen/Eigen/src/Core/GlobalFunctions.h +40 -33
  55. package/eigen/Eigen/src/Core/IO.h +40 -7
  56. package/eigen/Eigen/src/Core/IndexedView.h +237 -0
  57. package/eigen/Eigen/src/Core/Inverse.h +9 -10
  58. package/eigen/Eigen/src/Core/Map.h +7 -7
  59. package/eigen/Eigen/src/Core/MapBase.h +5 -3
  60. package/eigen/Eigen/src/Core/MathFunctions.h +756 -120
  61. package/eigen/Eigen/src/Core/MathFunctionsImpl.h +118 -19
  62. package/eigen/Eigen/src/Core/Matrix.h +131 -25
  63. package/eigen/Eigen/src/Core/MatrixBase.h +19 -2
  64. package/eigen/Eigen/src/Core/NestByValue.h +25 -50
  65. package/eigen/Eigen/src/Core/NoAlias.h +4 -3
  66. package/eigen/Eigen/src/Core/NumTraits.h +107 -20
  67. package/eigen/Eigen/src/Core/PartialReduxEvaluator.h +232 -0
  68. package/eigen/Eigen/src/Core/PermutationMatrix.h +3 -3
  69. package/eigen/Eigen/src/Core/PlainObjectBase.h +145 -54
  70. package/eigen/Eigen/src/Core/Product.h +30 -25
  71. package/eigen/Eigen/src/Core/ProductEvaluators.h +183 -142
  72. package/eigen/Eigen/src/Core/Random.h +37 -1
  73. package/eigen/Eigen/src/Core/Redux.h +180 -170
  74. package/eigen/Eigen/src/Core/Ref.h +118 -21
  75. package/eigen/Eigen/src/Core/Replicate.h +8 -8
  76. package/eigen/Eigen/src/Core/Reshaped.h +454 -0
  77. package/eigen/Eigen/src/Core/ReturnByValue.h +7 -5
  78. package/eigen/Eigen/src/Core/Reverse.h +18 -12
  79. package/eigen/Eigen/src/Core/Select.h +8 -6
  80. package/eigen/Eigen/src/Core/SelfAdjointView.h +33 -20
  81. package/eigen/Eigen/src/Core/Solve.h +14 -14
  82. package/eigen/Eigen/src/Core/SolveTriangular.h +13 -13
  83. package/eigen/Eigen/src/Core/SolverBase.h +41 -3
  84. package/eigen/Eigen/src/Core/StableNorm.h +100 -70
  85. package/eigen/Eigen/src/Core/StlIterators.h +463 -0
  86. package/eigen/Eigen/src/Core/Stride.h +9 -4
  87. package/eigen/Eigen/src/Core/Swap.h +5 -4
  88. package/eigen/Eigen/src/Core/Transpose.h +86 -27
  89. package/eigen/Eigen/src/Core/Transpositions.h +26 -8
  90. package/eigen/Eigen/src/Core/TriangularMatrix.h +88 -72
  91. package/eigen/Eigen/src/Core/VectorBlock.h +5 -5
  92. package/eigen/Eigen/src/Core/VectorwiseOp.h +159 -70
  93. package/eigen/Eigen/src/Core/Visitor.h +137 -29
  94. package/eigen/Eigen/src/Core/arch/AVX/Complex.h +50 -129
  95. package/eigen/Eigen/src/Core/arch/AVX/MathFunctions.h +126 -337
  96. package/eigen/Eigen/src/Core/arch/AVX/PacketMath.h +1092 -155
  97. package/eigen/Eigen/src/Core/arch/AVX/TypeCasting.h +65 -1
  98. package/eigen/Eigen/src/Core/arch/AVX512/Complex.h +422 -0
  99. package/eigen/Eigen/src/Core/arch/AVX512/MathFunctions.h +186 -213
  100. package/eigen/Eigen/src/Core/arch/AVX512/PacketMath.h +1250 -252
  101. package/eigen/Eigen/src/Core/arch/AVX512/TypeCasting.h +89 -0
  102. package/eigen/Eigen/src/Core/arch/AltiVec/Complex.h +152 -165
  103. package/eigen/Eigen/src/Core/arch/AltiVec/MathFunctions.h +19 -251
  104. package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProduct.h +2937 -0
  105. package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductCommon.h +221 -0
  106. package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductMMA.h +629 -0
  107. package/eigen/Eigen/src/Core/arch/AltiVec/PacketMath.h +2042 -392
  108. package/eigen/Eigen/src/Core/arch/CUDA/Complex.h +235 -80
  109. package/eigen/Eigen/src/Core/arch/Default/BFloat16.h +700 -0
  110. package/eigen/Eigen/src/Core/arch/Default/ConjHelper.h +102 -14
  111. package/eigen/Eigen/src/Core/arch/Default/GenericPacketMathFunctions.h +1649 -0
  112. package/eigen/Eigen/src/Core/arch/Default/GenericPacketMathFunctionsFwd.h +110 -0
  113. package/eigen/Eigen/src/Core/arch/Default/Half.h +942 -0
  114. package/eigen/Eigen/src/Core/arch/Default/Settings.h +1 -1
  115. package/eigen/Eigen/src/Core/arch/Default/TypeCasting.h +120 -0
  116. package/eigen/Eigen/src/Core/arch/{CUDA → GPU}/MathFunctions.h +16 -4
  117. package/eigen/Eigen/src/Core/arch/GPU/PacketMath.h +1685 -0
  118. package/eigen/Eigen/src/Core/arch/GPU/TypeCasting.h +80 -0
  119. package/eigen/Eigen/src/Core/arch/HIP/hcc/math_constants.h +23 -0
  120. package/eigen/Eigen/src/Core/arch/MSA/Complex.h +648 -0
  121. package/eigen/Eigen/src/Core/arch/MSA/MathFunctions.h +387 -0
  122. package/eigen/Eigen/src/Core/arch/MSA/PacketMath.h +1233 -0
  123. package/eigen/Eigen/src/Core/arch/NEON/Complex.h +313 -219
  124. package/eigen/Eigen/src/Core/arch/NEON/GeneralBlockPanelKernel.h +183 -0
  125. package/eigen/Eigen/src/Core/arch/NEON/MathFunctions.h +54 -70
  126. package/eigen/Eigen/src/Core/arch/NEON/PacketMath.h +4376 -549
  127. package/eigen/Eigen/src/Core/arch/NEON/TypeCasting.h +1419 -0
  128. package/eigen/Eigen/src/Core/arch/SSE/Complex.h +59 -179
  129. package/eigen/Eigen/src/Core/arch/SSE/MathFunctions.h +65 -428
  130. package/eigen/Eigen/src/Core/arch/SSE/PacketMath.h +893 -283
  131. package/eigen/Eigen/src/Core/arch/SSE/TypeCasting.h +65 -0
  132. package/eigen/Eigen/src/Core/arch/SVE/MathFunctions.h +44 -0
  133. package/eigen/Eigen/src/Core/arch/SVE/PacketMath.h +752 -0
  134. package/eigen/Eigen/src/Core/arch/SVE/TypeCasting.h +49 -0
  135. package/eigen/Eigen/src/Core/arch/SYCL/InteropHeaders.h +232 -0
  136. package/eigen/Eigen/src/Core/arch/SYCL/MathFunctions.h +301 -0
  137. package/eigen/Eigen/src/Core/arch/SYCL/PacketMath.h +670 -0
  138. package/eigen/Eigen/src/Core/arch/SYCL/SyclMemoryModel.h +694 -0
  139. package/eigen/Eigen/src/Core/arch/SYCL/TypeCasting.h +85 -0
  140. package/eigen/Eigen/src/Core/arch/ZVector/Complex.h +212 -183
  141. package/eigen/Eigen/src/Core/arch/ZVector/MathFunctions.h +101 -5
  142. package/eigen/Eigen/src/Core/arch/ZVector/PacketMath.h +510 -395
  143. package/eigen/Eigen/src/Core/functors/AssignmentFunctors.h +11 -2
  144. package/eigen/Eigen/src/Core/functors/BinaryFunctors.h +112 -46
  145. package/eigen/Eigen/src/Core/functors/NullaryFunctors.h +31 -30
  146. package/eigen/Eigen/src/Core/functors/StlFunctors.h +32 -2
  147. package/eigen/Eigen/src/Core/functors/UnaryFunctors.h +354 -15
  148. package/eigen/Eigen/src/Core/products/GeneralBlockPanelKernel.h +1073 -585
  149. package/eigen/Eigen/src/Core/products/GeneralMatrixMatrix.h +29 -7
  150. package/eigen/Eigen/src/Core/products/GeneralMatrixMatrixTriangular.h +4 -4
  151. package/eigen/Eigen/src/Core/products/GeneralMatrixMatrixTriangular_BLAS.h +1 -1
  152. package/eigen/Eigen/src/Core/products/GeneralMatrixVector.h +382 -483
  153. package/eigen/Eigen/src/Core/products/Parallelizer.h +23 -9
  154. package/eigen/Eigen/src/Core/products/SelfadjointMatrixMatrix.h +23 -6
  155. package/eigen/Eigen/src/Core/products/SelfadjointMatrixVector.h +8 -6
  156. package/eigen/Eigen/src/Core/products/SelfadjointProduct.h +2 -2
  157. package/eigen/Eigen/src/Core/products/SelfadjointRank2Update.h +5 -4
  158. package/eigen/Eigen/src/Core/products/TriangularMatrixMatrix.h +3 -3
  159. package/eigen/Eigen/src/Core/products/TriangularSolverMatrix.h +5 -3
  160. package/eigen/Eigen/src/Core/products/TriangularSolverVector.h +13 -10
  161. package/eigen/Eigen/src/Core/util/BlasUtil.h +208 -124
  162. package/eigen/Eigen/src/Core/util/ConfigureVectorization.h +512 -0
  163. package/eigen/Eigen/src/Core/util/Constants.h +25 -9
  164. package/eigen/Eigen/src/Core/util/DisableStupidWarnings.h +14 -2
  165. package/eigen/Eigen/src/Core/util/ForwardDeclarations.h +28 -4
  166. package/eigen/Eigen/src/Core/util/IndexedViewHelper.h +186 -0
  167. package/eigen/Eigen/src/Core/util/IntegralConstant.h +272 -0
  168. package/eigen/Eigen/src/Core/util/MKL_support.h +8 -1
  169. package/eigen/Eigen/src/Core/util/Macros.h +661 -250
  170. package/eigen/Eigen/src/Core/util/Memory.h +222 -52
  171. package/eigen/Eigen/src/Core/util/Meta.h +349 -105
  172. package/eigen/Eigen/src/Core/util/ReshapedHelper.h +51 -0
  173. package/eigen/Eigen/src/Core/util/StaticAssert.h +8 -5
  174. package/eigen/Eigen/src/Core/util/SymbolicIndex.h +293 -0
  175. package/eigen/Eigen/src/Core/util/XprHelper.h +48 -30
  176. package/eigen/Eigen/src/Eigenvalues/ComplexEigenSolver.h +1 -1
  177. package/eigen/Eigen/src/Eigenvalues/ComplexSchur.h +1 -1
  178. package/eigen/Eigen/src/Eigenvalues/EigenSolver.h +2 -2
  179. package/eigen/Eigen/src/Eigenvalues/GeneralizedSelfAdjointEigenSolver.h +1 -1
  180. package/eigen/Eigen/src/Eigenvalues/HessenbergDecomposition.h +2 -2
  181. package/eigen/Eigen/src/Eigenvalues/MatrixBaseEigenvalues.h +2 -2
  182. package/eigen/Eigen/src/Eigenvalues/RealQZ.h +9 -6
  183. package/eigen/Eigen/src/Eigenvalues/RealSchur.h +10 -5
  184. package/eigen/Eigen/src/Eigenvalues/SelfAdjointEigenSolver.h +75 -42
  185. package/eigen/Eigen/src/Eigenvalues/Tridiagonalization.h +20 -15
  186. package/eigen/Eigen/src/Geometry/AlignedBox.h +99 -5
  187. package/eigen/Eigen/src/Geometry/AngleAxis.h +4 -4
  188. package/eigen/Eigen/src/Geometry/EulerAngles.h +3 -3
  189. package/eigen/Eigen/src/Geometry/Homogeneous.h +15 -11
  190. package/eigen/Eigen/src/Geometry/Hyperplane.h +1 -1
  191. package/eigen/Eigen/src/Geometry/OrthoMethods.h +3 -2
  192. package/eigen/Eigen/src/Geometry/ParametrizedLine.h +39 -2
  193. package/eigen/Eigen/src/Geometry/Quaternion.h +52 -14
  194. package/eigen/Eigen/src/Geometry/Rotation2D.h +3 -3
  195. package/eigen/Eigen/src/Geometry/Scaling.h +22 -4
  196. package/eigen/Eigen/src/Geometry/Transform.h +86 -65
  197. package/eigen/Eigen/src/Geometry/Translation.h +6 -6
  198. package/eigen/Eigen/src/Geometry/arch/Geometry_SIMD.h +168 -0
  199. package/eigen/Eigen/src/Householder/BlockHouseholder.h +9 -2
  200. package/eigen/Eigen/src/Householder/Householder.h +8 -4
  201. package/eigen/Eigen/src/Householder/HouseholderSequence.h +123 -48
  202. package/eigen/Eigen/src/IterativeLinearSolvers/BasicPreconditioners.h +15 -15
  203. package/eigen/Eigen/src/IterativeLinearSolvers/BiCGSTAB.h +7 -23
  204. package/eigen/Eigen/src/IterativeLinearSolvers/ConjugateGradient.h +5 -22
  205. package/eigen/Eigen/src/IterativeLinearSolvers/IncompleteCholesky.h +41 -47
  206. package/eigen/Eigen/src/IterativeLinearSolvers/IncompleteLUT.h +51 -60
  207. package/eigen/Eigen/src/IterativeLinearSolvers/IterativeSolverBase.h +70 -20
  208. package/eigen/Eigen/src/IterativeLinearSolvers/LeastSquareConjugateGradient.h +2 -20
  209. package/eigen/Eigen/src/IterativeLinearSolvers/SolveWithGuess.h +11 -9
  210. package/eigen/Eigen/src/Jacobi/Jacobi.h +31 -10
  211. package/eigen/Eigen/src/KLUSupport/KLUSupport.h +358 -0
  212. package/eigen/Eigen/src/LU/Determinant.h +35 -19
  213. package/eigen/Eigen/src/LU/FullPivLU.h +29 -43
  214. package/eigen/Eigen/src/LU/InverseImpl.h +25 -8
  215. package/eigen/Eigen/src/LU/PartialPivLU.h +67 -57
  216. package/eigen/Eigen/src/LU/arch/InverseSize4.h +351 -0
  217. package/eigen/Eigen/src/OrderingMethods/Amd.h +7 -17
  218. package/eigen/Eigen/src/OrderingMethods/Eigen_Colamd.h +297 -277
  219. package/eigen/Eigen/src/OrderingMethods/Ordering.h +6 -10
  220. package/eigen/Eigen/src/PaStiXSupport/PaStiXSupport.h +1 -1
  221. package/eigen/Eigen/src/PardisoSupport/PardisoSupport.h +10 -9
  222. package/eigen/Eigen/src/QR/ColPivHouseholderQR.h +41 -20
  223. package/eigen/Eigen/src/QR/CompleteOrthogonalDecomposition.h +100 -27
  224. package/eigen/Eigen/src/QR/FullPivHouseholderQR.h +59 -22
  225. package/eigen/Eigen/src/QR/HouseholderQR.h +48 -23
  226. package/eigen/Eigen/src/SPQRSupport/SuiteSparseQRSupport.h +25 -3
  227. package/eigen/Eigen/src/SVD/BDCSVD.h +137 -48
  228. package/eigen/Eigen/src/SVD/JacobiSVD.h +22 -14
  229. package/eigen/Eigen/src/SVD/SVDBase.h +82 -21
  230. package/eigen/Eigen/src/SVD/UpperBidiagonalization.h +3 -3
  231. package/eigen/Eigen/src/SparseCholesky/SimplicialCholesky.h +16 -8
  232. package/eigen/Eigen/src/SparseCholesky/SimplicialCholesky_impl.h +11 -36
  233. package/eigen/Eigen/src/SparseCore/CompressedStorage.h +16 -0
  234. package/eigen/Eigen/src/SparseCore/ConservativeSparseSparseProduct.h +6 -6
  235. package/eigen/Eigen/src/SparseCore/SparseAssign.h +81 -27
  236. package/eigen/Eigen/src/SparseCore/SparseBlock.h +25 -57
  237. package/eigen/Eigen/src/SparseCore/SparseCompressedBase.h +40 -11
  238. package/eigen/Eigen/src/SparseCore/SparseCwiseBinaryOp.h +11 -15
  239. package/eigen/Eigen/src/SparseCore/SparseCwiseUnaryOp.h +2 -2
  240. package/eigen/Eigen/src/SparseCore/SparseDenseProduct.h +30 -8
  241. package/eigen/Eigen/src/SparseCore/SparseMatrix.h +124 -10
  242. package/eigen/Eigen/src/SparseCore/SparseMatrixBase.h +5 -12
  243. package/eigen/Eigen/src/SparseCore/SparseProduct.h +13 -1
  244. package/eigen/Eigen/src/SparseCore/SparseRef.h +7 -7
  245. package/eigen/Eigen/src/SparseCore/SparseSelfAdjointView.h +3 -0
  246. package/eigen/Eigen/src/SparseCore/SparseUtil.h +8 -0
  247. package/eigen/Eigen/src/SparseCore/SparseVector.h +1 -1
  248. package/eigen/Eigen/src/SparseLU/SparseLU.h +160 -10
  249. package/eigen/Eigen/src/SparseLU/SparseLU_Memory.h +1 -1
  250. package/eigen/Eigen/src/SparseLU/SparseLU_SupernodalMatrix.h +76 -2
  251. package/eigen/Eigen/src/SparseLU/SparseLU_column_dfs.h +2 -2
  252. package/eigen/Eigen/src/SparseLU/SparseLU_gemm_kernel.h +1 -1
  253. package/eigen/Eigen/src/SparseLU/SparseLU_panel_bmod.h +1 -1
  254. package/eigen/Eigen/src/SparseQR/SparseQR.h +19 -6
  255. package/eigen/Eigen/src/StlSupport/StdDeque.h +2 -14
  256. package/eigen/Eigen/src/StlSupport/StdList.h +2 -2
  257. package/eigen/Eigen/src/StlSupport/StdVector.h +2 -2
  258. package/eigen/Eigen/src/SuperLUSupport/SuperLUSupport.h +6 -8
  259. package/eigen/Eigen/src/UmfPackSupport/UmfPackSupport.h +175 -39
  260. package/eigen/Eigen/src/misc/lapacke.h +5 -4
  261. package/eigen/Eigen/src/plugins/ArrayCwiseBinaryOps.h +27 -1
  262. package/eigen/Eigen/src/plugins/ArrayCwiseUnaryOps.h +155 -11
  263. package/eigen/Eigen/src/plugins/BlockMethods.h +626 -242
  264. package/eigen/Eigen/src/plugins/CommonCwiseUnaryOps.h +14 -0
  265. package/eigen/Eigen/src/plugins/IndexedViewMethods.h +262 -0
  266. package/eigen/Eigen/src/plugins/MatrixCwiseBinaryOps.h +4 -4
  267. package/eigen/Eigen/src/plugins/MatrixCwiseUnaryOps.h +10 -0
  268. package/eigen/Eigen/src/plugins/ReshapedMethods.h +149 -0
  269. package/eigen/README.md +2 -0
  270. package/lib/LibEigen.d.ts +4 -0
  271. package/lib/LibEigen.js +14 -0
  272. package/lib/index.d.ts +1 -1
  273. package/lib/index.js +7 -3
  274. package/package.json +2 -10
  275. package/eigen/Eigen/CMakeLists.txt +0 -19
  276. package/eigen/Eigen/src/Core/arch/CUDA/Half.h +0 -675
  277. package/eigen/Eigen/src/Core/arch/CUDA/PacketMath.h +0 -333
  278. package/eigen/Eigen/src/Core/arch/CUDA/PacketMathHalf.h +0 -1124
  279. package/eigen/Eigen/src/Core/arch/CUDA/TypeCasting.h +0 -212
  280. package/eigen/Eigen/src/Geometry/arch/Geometry_SSE.h +0 -161
  281. package/eigen/Eigen/src/LU/arch/Inverse_SSE.h +0 -338
  282. package/lib/eigen.d.ts +0 -2
  283. package/lib/eigen.js +0 -15
@@ -47,21 +47,21 @@ struct plain_array
47
47
 
48
48
  EIGEN_DEVICE_FUNC
49
49
  plain_array()
50
- {
50
+ {
51
51
  check_static_allocation_size<T,Size>();
52
52
  }
53
53
 
54
54
  EIGEN_DEVICE_FUNC
55
55
  plain_array(constructor_without_unaligned_array_assert)
56
- {
56
+ {
57
57
  check_static_allocation_size<T,Size>();
58
58
  }
59
59
  };
60
60
 
61
61
  #if defined(EIGEN_DISABLE_UNALIGNED_ARRAY_ASSERT)
62
62
  #define EIGEN_MAKE_UNALIGNED_ARRAY_ASSERT(sizemask)
63
- #elif EIGEN_GNUC_AT_LEAST(4,7)
64
- // GCC 4.7 is too aggressive in its optimizations and remove the alignement test based on the fact the array is declared to be aligned.
63
+ #elif EIGEN_GNUC_AT_LEAST(4,7)
64
+ // GCC 4.7 is too aggressive in its optimizations and remove the alignment test based on the fact the array is declared to be aligned.
65
65
  // See this bug report: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53900
66
66
  // Hiding the origin of the array pointer behind a function argument seems to do the trick even if the function is inlined:
67
67
  template<typename PtrType>
@@ -85,15 +85,15 @@ struct plain_array<T, Size, MatrixOrArrayOptions, 8>
85
85
  EIGEN_ALIGN_TO_BOUNDARY(8) T array[Size];
86
86
 
87
87
  EIGEN_DEVICE_FUNC
88
- plain_array()
88
+ plain_array()
89
89
  {
90
90
  EIGEN_MAKE_UNALIGNED_ARRAY_ASSERT(7);
91
91
  check_static_allocation_size<T,Size>();
92
92
  }
93
93
 
94
94
  EIGEN_DEVICE_FUNC
95
- plain_array(constructor_without_unaligned_array_assert)
96
- {
95
+ plain_array(constructor_without_unaligned_array_assert)
96
+ {
97
97
  check_static_allocation_size<T,Size>();
98
98
  }
99
99
  };
@@ -104,15 +104,15 @@ struct plain_array<T, Size, MatrixOrArrayOptions, 16>
104
104
  EIGEN_ALIGN_TO_BOUNDARY(16) T array[Size];
105
105
 
106
106
  EIGEN_DEVICE_FUNC
107
- plain_array()
108
- {
107
+ plain_array()
108
+ {
109
109
  EIGEN_MAKE_UNALIGNED_ARRAY_ASSERT(15);
110
110
  check_static_allocation_size<T,Size>();
111
111
  }
112
112
 
113
113
  EIGEN_DEVICE_FUNC
114
- plain_array(constructor_without_unaligned_array_assert)
115
- {
114
+ plain_array(constructor_without_unaligned_array_assert)
115
+ {
116
116
  check_static_allocation_size<T,Size>();
117
117
  }
118
118
  };
@@ -123,15 +123,15 @@ struct plain_array<T, Size, MatrixOrArrayOptions, 32>
123
123
  EIGEN_ALIGN_TO_BOUNDARY(32) T array[Size];
124
124
 
125
125
  EIGEN_DEVICE_FUNC
126
- plain_array()
126
+ plain_array()
127
127
  {
128
128
  EIGEN_MAKE_UNALIGNED_ARRAY_ASSERT(31);
129
129
  check_static_allocation_size<T,Size>();
130
130
  }
131
131
 
132
132
  EIGEN_DEVICE_FUNC
133
- plain_array(constructor_without_unaligned_array_assert)
134
- {
133
+ plain_array(constructor_without_unaligned_array_assert)
134
+ {
135
135
  check_static_allocation_size<T,Size>();
136
136
  }
137
137
  };
@@ -142,15 +142,15 @@ struct plain_array<T, Size, MatrixOrArrayOptions, 64>
142
142
  EIGEN_ALIGN_TO_BOUNDARY(64) T array[Size];
143
143
 
144
144
  EIGEN_DEVICE_FUNC
145
- plain_array()
146
- {
145
+ plain_array()
146
+ {
147
147
  EIGEN_MAKE_UNALIGNED_ARRAY_ASSERT(63);
148
148
  check_static_allocation_size<T,Size>();
149
149
  }
150
150
 
151
151
  EIGEN_DEVICE_FUNC
152
- plain_array(constructor_without_unaligned_array_assert)
153
- {
152
+ plain_array(constructor_without_unaligned_array_assert)
153
+ {
154
154
  check_static_allocation_size<T,Size>();
155
155
  }
156
156
  };
@@ -163,6 +163,30 @@ struct plain_array<T, 0, MatrixOrArrayOptions, Alignment>
163
163
  EIGEN_DEVICE_FUNC plain_array(constructor_without_unaligned_array_assert) {}
164
164
  };
165
165
 
166
+ struct plain_array_helper {
167
+ template<typename T, int Size, int MatrixOrArrayOptions, int Alignment>
168
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
169
+ static void copy(const plain_array<T, Size, MatrixOrArrayOptions, Alignment>& src, const Eigen::Index size,
170
+ plain_array<T, Size, MatrixOrArrayOptions, Alignment>& dst) {
171
+ smart_copy(src.array, src.array + size, dst.array);
172
+ }
173
+
174
+ template<typename T, int Size, int MatrixOrArrayOptions, int Alignment>
175
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
176
+ static void swap(plain_array<T, Size, MatrixOrArrayOptions, Alignment>& a, const Eigen::Index a_size,
177
+ plain_array<T, Size, MatrixOrArrayOptions, Alignment>& b, const Eigen::Index b_size) {
178
+ if (a_size < b_size) {
179
+ std::swap_ranges(b.array, b.array + a_size, a.array);
180
+ smart_move(b.array + a_size, b.array + b_size, a.array + a_size);
181
+ } else if (a_size > b_size) {
182
+ std::swap_ranges(a.array, a.array + b_size, b.array);
183
+ smart_move(a.array + b_size, a.array + a_size, b.array + b_size);
184
+ } else {
185
+ std::swap_ranges(a.array, a.array + a_size, b.array);
186
+ }
187
+ }
188
+ };
189
+
166
190
  } // end namespace internal
167
191
 
168
192
  /** \internal
@@ -190,16 +214,41 @@ template<typename T, int Size, int _Rows, int _Cols, int _Options> class DenseSt
190
214
  EIGEN_DEVICE_FUNC
191
215
  explicit DenseStorage(internal::constructor_without_unaligned_array_assert)
192
216
  : m_data(internal::constructor_without_unaligned_array_assert()) {}
193
- EIGEN_DEVICE_FUNC
217
+ #if !EIGEN_HAS_CXX11 || defined(EIGEN_DENSE_STORAGE_CTOR_PLUGIN)
218
+ EIGEN_DEVICE_FUNC
194
219
  DenseStorage(const DenseStorage& other) : m_data(other.m_data) {
195
220
  EIGEN_INTERNAL_DENSE_STORAGE_CTOR_PLUGIN(Index size = Size)
196
221
  }
197
- EIGEN_DEVICE_FUNC
222
+ #else
223
+ EIGEN_DEVICE_FUNC DenseStorage(const DenseStorage&) = default;
224
+ #endif
225
+ #if !EIGEN_HAS_CXX11
226
+ EIGEN_DEVICE_FUNC
198
227
  DenseStorage& operator=(const DenseStorage& other)
199
- {
228
+ {
200
229
  if (this != &other) m_data = other.m_data;
201
- return *this;
230
+ return *this;
231
+ }
232
+ #else
233
+ EIGEN_DEVICE_FUNC DenseStorage& operator=(const DenseStorage&) = default;
234
+ #endif
235
+ #if EIGEN_HAS_RVALUE_REFERENCES
236
+ #if !EIGEN_HAS_CXX11
237
+ EIGEN_DEVICE_FUNC DenseStorage(DenseStorage&& other) EIGEN_NOEXCEPT
238
+ : m_data(std::move(other.m_data))
239
+ {
202
240
  }
241
+ EIGEN_DEVICE_FUNC DenseStorage& operator=(DenseStorage&& other) EIGEN_NOEXCEPT
242
+ {
243
+ if (this != &other)
244
+ m_data = std::move(other.m_data);
245
+ return *this;
246
+ }
247
+ #else
248
+ EIGEN_DEVICE_FUNC DenseStorage(DenseStorage&&) = default;
249
+ EIGEN_DEVICE_FUNC DenseStorage& operator=(DenseStorage&&) = default;
250
+ #endif
251
+ #endif
203
252
  EIGEN_DEVICE_FUNC DenseStorage(Index size, Index rows, Index cols) {
204
253
  EIGEN_INTERNAL_DENSE_STORAGE_CTOR_PLUGIN({})
205
254
  eigen_internal_assert(size==rows*cols && rows==_Rows && cols==_Cols);
@@ -207,9 +256,11 @@ template<typename T, int Size, int _Rows, int _Cols, int _Options> class DenseSt
207
256
  EIGEN_UNUSED_VARIABLE(rows);
208
257
  EIGEN_UNUSED_VARIABLE(cols);
209
258
  }
210
- EIGEN_DEVICE_FUNC void swap(DenseStorage& other) { std::swap(m_data,other.m_data); }
211
- EIGEN_DEVICE_FUNC static Index rows(void) {return _Rows;}
212
- EIGEN_DEVICE_FUNC static Index cols(void) {return _Cols;}
259
+ EIGEN_DEVICE_FUNC void swap(DenseStorage& other) {
260
+ numext::swap(m_data, other.m_data);
261
+ }
262
+ EIGEN_DEVICE_FUNC static EIGEN_CONSTEXPR Index rows(void) EIGEN_NOEXCEPT {return _Rows;}
263
+ EIGEN_DEVICE_FUNC static EIGEN_CONSTEXPR Index cols(void) EIGEN_NOEXCEPT {return _Cols;}
213
264
  EIGEN_DEVICE_FUNC void conservativeResize(Index,Index,Index) {}
214
265
  EIGEN_DEVICE_FUNC void resize(Index,Index,Index) {}
215
266
  EIGEN_DEVICE_FUNC const T *data() const { return m_data.array; }
@@ -226,8 +277,8 @@ template<typename T, int _Rows, int _Cols, int _Options> class DenseStorage<T, 0
226
277
  EIGEN_DEVICE_FUNC DenseStorage& operator=(const DenseStorage&) { return *this; }
227
278
  EIGEN_DEVICE_FUNC DenseStorage(Index,Index,Index) {}
228
279
  EIGEN_DEVICE_FUNC void swap(DenseStorage& ) {}
229
- EIGEN_DEVICE_FUNC static Index rows(void) {return _Rows;}
230
- EIGEN_DEVICE_FUNC static Index cols(void) {return _Cols;}
280
+ EIGEN_DEVICE_FUNC static EIGEN_CONSTEXPR Index rows(void) EIGEN_NOEXCEPT {return _Rows;}
281
+ EIGEN_DEVICE_FUNC static EIGEN_CONSTEXPR Index cols(void) EIGEN_NOEXCEPT {return _Cols;}
231
282
  EIGEN_DEVICE_FUNC void conservativeResize(Index,Index,Index) {}
232
283
  EIGEN_DEVICE_FUNC void resize(Index,Index,Index) {}
233
284
  EIGEN_DEVICE_FUNC const T *data() const { return 0; }
@@ -254,20 +305,28 @@ template<typename T, int Size, int _Options> class DenseStorage<T, Size, Dynamic
254
305
  EIGEN_DEVICE_FUNC DenseStorage() : m_rows(0), m_cols(0) {}
255
306
  EIGEN_DEVICE_FUNC explicit DenseStorage(internal::constructor_without_unaligned_array_assert)
256
307
  : m_data(internal::constructor_without_unaligned_array_assert()), m_rows(0), m_cols(0) {}
257
- EIGEN_DEVICE_FUNC DenseStorage(const DenseStorage& other) : m_data(other.m_data), m_rows(other.m_rows), m_cols(other.m_cols) {}
258
- EIGEN_DEVICE_FUNC DenseStorage& operator=(const DenseStorage& other)
259
- {
308
+ EIGEN_DEVICE_FUNC DenseStorage(const DenseStorage& other)
309
+ : m_data(internal::constructor_without_unaligned_array_assert()), m_rows(other.m_rows), m_cols(other.m_cols)
310
+ {
311
+ internal::plain_array_helper::copy(other.m_data, m_rows * m_cols, m_data);
312
+ }
313
+ EIGEN_DEVICE_FUNC DenseStorage& operator=(const DenseStorage& other)
314
+ {
260
315
  if (this != &other)
261
316
  {
262
- m_data = other.m_data;
263
317
  m_rows = other.m_rows;
264
318
  m_cols = other.m_cols;
319
+ internal::plain_array_helper::copy(other.m_data, m_rows * m_cols, m_data);
265
320
  }
266
- return *this;
321
+ return *this;
267
322
  }
268
323
  EIGEN_DEVICE_FUNC DenseStorage(Index, Index rows, Index cols) : m_rows(rows), m_cols(cols) {}
269
324
  EIGEN_DEVICE_FUNC void swap(DenseStorage& other)
270
- { std::swap(m_data,other.m_data); std::swap(m_rows,other.m_rows); std::swap(m_cols,other.m_cols); }
325
+ {
326
+ internal::plain_array_helper::swap(m_data, m_rows * m_cols, other.m_data, other.m_rows * other.m_cols);
327
+ numext::swap(m_rows,other.m_rows);
328
+ numext::swap(m_cols,other.m_cols);
329
+ }
271
330
  EIGEN_DEVICE_FUNC Index rows() const {return m_rows;}
272
331
  EIGEN_DEVICE_FUNC Index cols() const {return m_cols;}
273
332
  EIGEN_DEVICE_FUNC void conservativeResize(Index, Index rows, Index cols) { m_rows = rows; m_cols = cols; }
@@ -285,20 +344,29 @@ template<typename T, int Size, int _Cols, int _Options> class DenseStorage<T, Si
285
344
  EIGEN_DEVICE_FUNC DenseStorage() : m_rows(0) {}
286
345
  EIGEN_DEVICE_FUNC explicit DenseStorage(internal::constructor_without_unaligned_array_assert)
287
346
  : m_data(internal::constructor_without_unaligned_array_assert()), m_rows(0) {}
288
- EIGEN_DEVICE_FUNC DenseStorage(const DenseStorage& other) : m_data(other.m_data), m_rows(other.m_rows) {}
289
- EIGEN_DEVICE_FUNC DenseStorage& operator=(const DenseStorage& other)
347
+ EIGEN_DEVICE_FUNC DenseStorage(const DenseStorage& other)
348
+ : m_data(internal::constructor_without_unaligned_array_assert()), m_rows(other.m_rows)
349
+ {
350
+ internal::plain_array_helper::copy(other.m_data, m_rows * _Cols, m_data);
351
+ }
352
+
353
+ EIGEN_DEVICE_FUNC DenseStorage& operator=(const DenseStorage& other)
290
354
  {
291
355
  if (this != &other)
292
356
  {
293
- m_data = other.m_data;
294
357
  m_rows = other.m_rows;
358
+ internal::plain_array_helper::copy(other.m_data, m_rows * _Cols, m_data);
295
359
  }
296
- return *this;
360
+ return *this;
297
361
  }
298
362
  EIGEN_DEVICE_FUNC DenseStorage(Index, Index rows, Index) : m_rows(rows) {}
299
- EIGEN_DEVICE_FUNC void swap(DenseStorage& other) { std::swap(m_data,other.m_data); std::swap(m_rows,other.m_rows); }
300
- EIGEN_DEVICE_FUNC Index rows(void) const {return m_rows;}
301
- EIGEN_DEVICE_FUNC Index cols(void) const {return _Cols;}
363
+ EIGEN_DEVICE_FUNC void swap(DenseStorage& other)
364
+ {
365
+ internal::plain_array_helper::swap(m_data, m_rows * _Cols, other.m_data, other.m_rows * _Cols);
366
+ numext::swap(m_rows, other.m_rows);
367
+ }
368
+ EIGEN_DEVICE_FUNC Index rows(void) const EIGEN_NOEXCEPT {return m_rows;}
369
+ EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR Index cols(void) const EIGEN_NOEXCEPT {return _Cols;}
302
370
  EIGEN_DEVICE_FUNC void conservativeResize(Index, Index rows, Index) { m_rows = rows; }
303
371
  EIGEN_DEVICE_FUNC void resize(Index, Index rows, Index) { m_rows = rows; }
304
372
  EIGEN_DEVICE_FUNC const T *data() const { return m_data.array; }
@@ -314,22 +382,29 @@ template<typename T, int Size, int _Rows, int _Options> class DenseStorage<T, Si
314
382
  EIGEN_DEVICE_FUNC DenseStorage() : m_cols(0) {}
315
383
  EIGEN_DEVICE_FUNC explicit DenseStorage(internal::constructor_without_unaligned_array_assert)
316
384
  : m_data(internal::constructor_without_unaligned_array_assert()), m_cols(0) {}
317
- EIGEN_DEVICE_FUNC DenseStorage(const DenseStorage& other) : m_data(other.m_data), m_cols(other.m_cols) {}
385
+ EIGEN_DEVICE_FUNC DenseStorage(const DenseStorage& other)
386
+ : m_data(internal::constructor_without_unaligned_array_assert()), m_cols(other.m_cols)
387
+ {
388
+ internal::plain_array_helper::copy(other.m_data, _Rows * m_cols, m_data);
389
+ }
318
390
  EIGEN_DEVICE_FUNC DenseStorage& operator=(const DenseStorage& other)
319
391
  {
320
392
  if (this != &other)
321
393
  {
322
- m_data = other.m_data;
323
394
  m_cols = other.m_cols;
395
+ internal::plain_array_helper::copy(other.m_data, _Rows * m_cols, m_data);
324
396
  }
325
397
  return *this;
326
398
  }
327
399
  EIGEN_DEVICE_FUNC DenseStorage(Index, Index, Index cols) : m_cols(cols) {}
328
- EIGEN_DEVICE_FUNC void swap(DenseStorage& other) { std::swap(m_data,other.m_data); std::swap(m_cols,other.m_cols); }
329
- EIGEN_DEVICE_FUNC Index rows(void) const {return _Rows;}
330
- EIGEN_DEVICE_FUNC Index cols(void) const {return m_cols;}
331
- void conservativeResize(Index, Index, Index cols) { m_cols = cols; }
332
- void resize(Index, Index, Index cols) { m_cols = cols; }
400
+ EIGEN_DEVICE_FUNC void swap(DenseStorage& other) {
401
+ internal::plain_array_helper::swap(m_data, _Rows * m_cols, other.m_data, _Rows * other.m_cols);
402
+ numext::swap(m_cols, other.m_cols);
403
+ }
404
+ EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR Index rows(void) const EIGEN_NOEXCEPT {return _Rows;}
405
+ EIGEN_DEVICE_FUNC Index cols(void) const EIGEN_NOEXCEPT {return m_cols;}
406
+ EIGEN_DEVICE_FUNC void conservativeResize(Index, Index, Index cols) { m_cols = cols; }
407
+ EIGEN_DEVICE_FUNC void resize(Index, Index, Index cols) { m_cols = cols; }
333
408
  EIGEN_DEVICE_FUNC const T *data() const { return m_data.array; }
334
409
  EIGEN_DEVICE_FUNC T *data() { return m_data.array; }
335
410
  };
@@ -381,18 +456,21 @@ template<typename T, int _Options> class DenseStorage<T, Dynamic, Dynamic, Dynam
381
456
  EIGEN_DEVICE_FUNC
382
457
  DenseStorage& operator=(DenseStorage&& other) EIGEN_NOEXCEPT
383
458
  {
384
- using std::swap;
385
- swap(m_data, other.m_data);
386
- swap(m_rows, other.m_rows);
387
- swap(m_cols, other.m_cols);
459
+ numext::swap(m_data, other.m_data);
460
+ numext::swap(m_rows, other.m_rows);
461
+ numext::swap(m_cols, other.m_cols);
388
462
  return *this;
389
463
  }
390
464
  #endif
391
465
  EIGEN_DEVICE_FUNC ~DenseStorage() { internal::conditional_aligned_delete_auto<T,(_Options&DontAlign)==0>(m_data, m_rows*m_cols); }
392
466
  EIGEN_DEVICE_FUNC void swap(DenseStorage& other)
393
- { std::swap(m_data,other.m_data); std::swap(m_rows,other.m_rows); std::swap(m_cols,other.m_cols); }
394
- EIGEN_DEVICE_FUNC Index rows(void) const {return m_rows;}
395
- EIGEN_DEVICE_FUNC Index cols(void) const {return m_cols;}
467
+ {
468
+ numext::swap(m_data,other.m_data);
469
+ numext::swap(m_rows,other.m_rows);
470
+ numext::swap(m_cols,other.m_cols);
471
+ }
472
+ EIGEN_DEVICE_FUNC Index rows(void) const EIGEN_NOEXCEPT {return m_rows;}
473
+ EIGEN_DEVICE_FUNC Index cols(void) const EIGEN_NOEXCEPT {return m_cols;}
396
474
  void conservativeResize(Index size, Index rows, Index cols)
397
475
  {
398
476
  m_data = internal::conditional_aligned_realloc_new_auto<T,(_Options&DontAlign)==0>(m_data, size, m_rows*m_cols);
@@ -446,7 +524,7 @@ template<typename T, int _Rows, int _Options> class DenseStorage<T, Dynamic, _Ro
446
524
  this->swap(tmp);
447
525
  }
448
526
  return *this;
449
- }
527
+ }
450
528
  #if EIGEN_HAS_RVALUE_REFERENCES
451
529
  EIGEN_DEVICE_FUNC
452
530
  DenseStorage(DenseStorage&& other) EIGEN_NOEXCEPT
@@ -459,16 +537,18 @@ template<typename T, int _Rows, int _Options> class DenseStorage<T, Dynamic, _Ro
459
537
  EIGEN_DEVICE_FUNC
460
538
  DenseStorage& operator=(DenseStorage&& other) EIGEN_NOEXCEPT
461
539
  {
462
- using std::swap;
463
- swap(m_data, other.m_data);
464
- swap(m_cols, other.m_cols);
540
+ numext::swap(m_data, other.m_data);
541
+ numext::swap(m_cols, other.m_cols);
465
542
  return *this;
466
543
  }
467
544
  #endif
468
545
  EIGEN_DEVICE_FUNC ~DenseStorage() { internal::conditional_aligned_delete_auto<T,(_Options&DontAlign)==0>(m_data, _Rows*m_cols); }
469
- EIGEN_DEVICE_FUNC void swap(DenseStorage& other) { std::swap(m_data,other.m_data); std::swap(m_cols,other.m_cols); }
470
- EIGEN_DEVICE_FUNC static Index rows(void) {return _Rows;}
471
- EIGEN_DEVICE_FUNC Index cols(void) const {return m_cols;}
546
+ EIGEN_DEVICE_FUNC void swap(DenseStorage& other) {
547
+ numext::swap(m_data,other.m_data);
548
+ numext::swap(m_cols,other.m_cols);
549
+ }
550
+ EIGEN_DEVICE_FUNC static EIGEN_CONSTEXPR Index rows(void) EIGEN_NOEXCEPT {return _Rows;}
551
+ EIGEN_DEVICE_FUNC Index cols(void) const EIGEN_NOEXCEPT {return m_cols;}
472
552
  EIGEN_DEVICE_FUNC void conservativeResize(Index size, Index, Index cols)
473
553
  {
474
554
  m_data = internal::conditional_aligned_realloc_new_auto<T,(_Options&DontAlign)==0>(m_data, size, _Rows*m_cols);
@@ -520,7 +600,7 @@ template<typename T, int _Cols, int _Options> class DenseStorage<T, Dynamic, Dyn
520
600
  this->swap(tmp);
521
601
  }
522
602
  return *this;
523
- }
603
+ }
524
604
  #if EIGEN_HAS_RVALUE_REFERENCES
525
605
  EIGEN_DEVICE_FUNC
526
606
  DenseStorage(DenseStorage&& other) EIGEN_NOEXCEPT
@@ -533,16 +613,18 @@ template<typename T, int _Cols, int _Options> class DenseStorage<T, Dynamic, Dyn
533
613
  EIGEN_DEVICE_FUNC
534
614
  DenseStorage& operator=(DenseStorage&& other) EIGEN_NOEXCEPT
535
615
  {
536
- using std::swap;
537
- swap(m_data, other.m_data);
538
- swap(m_rows, other.m_rows);
616
+ numext::swap(m_data, other.m_data);
617
+ numext::swap(m_rows, other.m_rows);
539
618
  return *this;
540
619
  }
541
620
  #endif
542
621
  EIGEN_DEVICE_FUNC ~DenseStorage() { internal::conditional_aligned_delete_auto<T,(_Options&DontAlign)==0>(m_data, _Cols*m_rows); }
543
- EIGEN_DEVICE_FUNC void swap(DenseStorage& other) { std::swap(m_data,other.m_data); std::swap(m_rows,other.m_rows); }
544
- EIGEN_DEVICE_FUNC Index rows(void) const {return m_rows;}
545
- EIGEN_DEVICE_FUNC static Index cols(void) {return _Cols;}
622
+ EIGEN_DEVICE_FUNC void swap(DenseStorage& other) {
623
+ numext::swap(m_data,other.m_data);
624
+ numext::swap(m_rows,other.m_rows);
625
+ }
626
+ EIGEN_DEVICE_FUNC Index rows(void) const EIGEN_NOEXCEPT {return m_rows;}
627
+ EIGEN_DEVICE_FUNC static EIGEN_CONSTEXPR Index cols(void) {return _Cols;}
546
628
  void conservativeResize(Index size, Index rows, Index)
547
629
  {
548
630
  m_data = internal::conditional_aligned_realloc_new_auto<T,(_Options&DontAlign)==0>(m_data, size, m_rows*_Cols);
@@ -11,7 +11,7 @@
11
11
  #ifndef EIGEN_DIAGONAL_H
12
12
  #define EIGEN_DIAGONAL_H
13
13
 
14
- namespace Eigen {
14
+ namespace Eigen {
15
15
 
16
16
  /** \class Diagonal
17
17
  * \ingroup Core_Module
@@ -84,20 +84,16 @@ template<typename MatrixType, int _DiagIndex> class Diagonal
84
84
  : numext::mini<Index>(m_matrix.rows(),m_matrix.cols()-m_index.value());
85
85
  }
86
86
 
87
- EIGEN_DEVICE_FUNC
88
- inline Index cols() const { return 1; }
87
+ EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR
88
+ inline Index cols() const EIGEN_NOEXCEPT { return 1; }
89
89
 
90
- EIGEN_DEVICE_FUNC
91
- inline Index innerStride() const
92
- {
90
+ EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR
91
+ inline Index innerStride() const EIGEN_NOEXCEPT {
93
92
  return m_matrix.outerStride() + 1;
94
93
  }
95
94
 
96
- EIGEN_DEVICE_FUNC
97
- inline Index outerStride() const
98
- {
99
- return 0;
100
- }
95
+ EIGEN_DEVICE_FUNC EIGEN_CONSTEXPR
96
+ inline Index outerStride() const EIGEN_NOEXCEPT { return 0; }
101
97
 
102
98
  typedef typename internal::conditional<
103
99
  internal::is_lvalue<MatrixType>::value,
@@ -149,8 +145,8 @@ template<typename MatrixType, int _DiagIndex> class Diagonal
149
145
  }
150
146
 
151
147
  EIGEN_DEVICE_FUNC
152
- inline const typename internal::remove_all<typename MatrixType::Nested>::type&
153
- nestedExpression() const
148
+ inline const typename internal::remove_all<typename MatrixType::Nested>::type&
149
+ nestedExpression() const
154
150
  {
155
151
  return m_matrix;
156
152
  }
@@ -167,12 +163,12 @@ template<typename MatrixType, int _DiagIndex> class Diagonal
167
163
 
168
164
  private:
169
165
  // some compilers may fail to optimize std::max etc in case of compile-time constants...
170
- EIGEN_DEVICE_FUNC
171
- EIGEN_STRONG_INLINE Index absDiagIndex() const { return m_index.value()>0 ? m_index.value() : -m_index.value(); }
172
- EIGEN_DEVICE_FUNC
173
- EIGEN_STRONG_INLINE Index rowOffset() const { return m_index.value()>0 ? 0 : -m_index.value(); }
174
- EIGEN_DEVICE_FUNC
175
- EIGEN_STRONG_INLINE Index colOffset() const { return m_index.value()>0 ? m_index.value() : 0; }
166
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE EIGEN_CONSTEXPR
167
+ Index absDiagIndex() const EIGEN_NOEXCEPT { return m_index.value()>0 ? m_index.value() : -m_index.value(); }
168
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE EIGEN_CONSTEXPR
169
+ Index rowOffset() const EIGEN_NOEXCEPT { return m_index.value()>0 ? 0 : -m_index.value(); }
170
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE EIGEN_CONSTEXPR
171
+ Index colOffset() const EIGEN_NOEXCEPT { return m_index.value()>0 ? m_index.value() : 0; }
176
172
  // trigger a compile-time error if someone try to call packet
177
173
  template<int LoadMode> typename MatrixType::PacketReturnType packet(Index) const;
178
174
  template<int LoadMode> typename MatrixType::PacketReturnType packet(Index,Index) const;
@@ -187,7 +183,7 @@ template<typename MatrixType, int _DiagIndex> class Diagonal
187
183
  *
188
184
  * \sa class Diagonal */
189
185
  template<typename Derived>
190
- inline typename MatrixBase<Derived>::DiagonalReturnType
186
+ EIGEN_DEVICE_FUNC inline typename MatrixBase<Derived>::DiagonalReturnType
191
187
  MatrixBase<Derived>::diagonal()
192
188
  {
193
189
  return DiagonalReturnType(derived());
@@ -195,7 +191,7 @@ MatrixBase<Derived>::diagonal()
195
191
 
196
192
  /** This is the const version of diagonal(). */
197
193
  template<typename Derived>
198
- inline typename MatrixBase<Derived>::ConstDiagonalReturnType
194
+ EIGEN_DEVICE_FUNC inline typename MatrixBase<Derived>::ConstDiagonalReturnType
199
195
  MatrixBase<Derived>::diagonal() const
200
196
  {
201
197
  return ConstDiagonalReturnType(derived());
@@ -213,7 +209,7 @@ MatrixBase<Derived>::diagonal() const
213
209
  *
214
210
  * \sa MatrixBase::diagonal(), class Diagonal */
215
211
  template<typename Derived>
216
- inline typename MatrixBase<Derived>::DiagonalDynamicIndexReturnType
212
+ EIGEN_DEVICE_FUNC inline typename MatrixBase<Derived>::DiagonalDynamicIndexReturnType
217
213
  MatrixBase<Derived>::diagonal(Index index)
218
214
  {
219
215
  return DiagonalDynamicIndexReturnType(derived(), index);
@@ -221,7 +217,7 @@ MatrixBase<Derived>::diagonal(Index index)
221
217
 
222
218
  /** This is the const version of diagonal(Index). */
223
219
  template<typename Derived>
224
- inline typename MatrixBase<Derived>::ConstDiagonalDynamicIndexReturnType
220
+ EIGEN_DEVICE_FUNC inline typename MatrixBase<Derived>::ConstDiagonalDynamicIndexReturnType
225
221
  MatrixBase<Derived>::diagonal(Index index) const
226
222
  {
227
223
  return ConstDiagonalDynamicIndexReturnType(derived(), index);
@@ -240,6 +236,7 @@ MatrixBase<Derived>::diagonal(Index index) const
240
236
  * \sa MatrixBase::diagonal(), class Diagonal */
241
237
  template<typename Derived>
242
238
  template<int Index_>
239
+ EIGEN_DEVICE_FUNC
243
240
  inline typename MatrixBase<Derived>::template DiagonalIndexReturnType<Index_>::Type
244
241
  MatrixBase<Derived>::diagonal()
245
242
  {
@@ -249,6 +246,7 @@ MatrixBase<Derived>::diagonal()
249
246
  /** This is the const version of diagonal<int>(). */
250
247
  template<typename Derived>
251
248
  template<int Index_>
249
+ EIGEN_DEVICE_FUNC
252
250
  inline typename MatrixBase<Derived>::template ConstDiagonalIndexReturnType<Index_>::Type
253
251
  MatrixBase<Derived>::diagonal() const
254
252
  {
@@ -44,7 +44,7 @@ class DiagonalBase : public EigenBase<Derived>
44
44
 
45
45
  EIGEN_DEVICE_FUNC
46
46
  DenseMatrixType toDenseMatrix() const { return derived(); }
47
-
47
+
48
48
  EIGEN_DEVICE_FUNC
49
49
  inline const DiagonalVectorType& diagonal() const { return derived().diagonal(); }
50
50
  EIGEN_DEVICE_FUNC
@@ -83,6 +83,30 @@ class DiagonalBase : public EigenBase<Derived>
83
83
  {
84
84
  return DiagonalWrapper<const EIGEN_SCALAR_BINARYOP_EXPR_RETURN_TYPE(Scalar,DiagonalVectorType,product) >(scalar * other.diagonal());
85
85
  }
86
+
87
+ template<typename OtherDerived>
88
+ EIGEN_DEVICE_FUNC
89
+ #ifdef EIGEN_PARSED_BY_DOXYGEN
90
+ inline unspecified_expression_type
91
+ #else
92
+ inline const DiagonalWrapper<const EIGEN_CWISE_BINARY_RETURN_TYPE(DiagonalVectorType,typename OtherDerived::DiagonalVectorType,sum) >
93
+ #endif
94
+ operator+(const DiagonalBase<OtherDerived>& other) const
95
+ {
96
+ return (diagonal() + other.diagonal()).asDiagonal();
97
+ }
98
+
99
+ template<typename OtherDerived>
100
+ EIGEN_DEVICE_FUNC
101
+ #ifdef EIGEN_PARSED_BY_DOXYGEN
102
+ inline unspecified_expression_type
103
+ #else
104
+ inline const DiagonalWrapper<const EIGEN_CWISE_BINARY_RETURN_TYPE(DiagonalVectorType,typename OtherDerived::DiagonalVectorType,difference) >
105
+ #endif
106
+ operator-(const DiagonalBase<OtherDerived>& other) const
107
+ {
108
+ return (diagonal() - other.diagonal()).asDiagonal();
109
+ }
86
110
  };
87
111
 
88
112
  #endif
@@ -154,6 +178,30 @@ class DiagonalMatrix
154
178
  EIGEN_DEVICE_FUNC
155
179
  inline DiagonalMatrix(const Scalar& x, const Scalar& y, const Scalar& z) : m_diagonal(x,y,z) {}
156
180
 
181
+ #if EIGEN_HAS_CXX11
182
+ /** \brief Construct a diagonal matrix with fixed size from an arbitrary number of coefficients. \cpp11
183
+ *
184
+ * There exists C++98 anologue constructors for fixed-size diagonal matrices having 2 or 3 coefficients.
185
+ *
186
+ * \warning To construct a diagonal matrix of fixed size, the number of values passed to this
187
+ * constructor must match the fixed dimension of \c *this.
188
+ *
189
+ * \sa DiagonalMatrix(const Scalar&, const Scalar&)
190
+ * \sa DiagonalMatrix(const Scalar&, const Scalar&, const Scalar&)
191
+ */
192
+ template <typename... ArgTypes>
193
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
194
+ DiagonalMatrix(const Scalar& a0, const Scalar& a1, const Scalar& a2, const ArgTypes&... args)
195
+ : m_diagonal(a0, a1, a2, args...) {}
196
+
197
+ /** \brief Constructs a DiagonalMatrix and initializes it by elements given by an initializer list of initializer
198
+ * lists \cpp11
199
+ */
200
+ EIGEN_DEVICE_FUNC
201
+ explicit EIGEN_STRONG_INLINE DiagonalMatrix(const std::initializer_list<std::initializer_list<Scalar>>& list)
202
+ : m_diagonal(list) {}
203
+ #endif // EIGEN_HAS_CXX11
204
+
157
205
  /** Copy constructor. */
158
206
  template<typename OtherDerived>
159
207
  EIGEN_DEVICE_FUNC
@@ -273,7 +321,7 @@ class DiagonalWrapper
273
321
  * \sa class DiagonalWrapper, class DiagonalMatrix, diagonal(), isDiagonal()
274
322
  **/
275
323
  template<typename Derived>
276
- inline const DiagonalWrapper<const Derived>
324
+ EIGEN_DEVICE_FUNC inline const DiagonalWrapper<const Derived>
277
325
  MatrixBase<Derived>::asDiagonal() const
278
326
  {
279
327
  return DiagonalWrapper<const Derived>(derived());
@@ -17,7 +17,7 @@ namespace Eigen {
17
17
  */
18
18
  template<typename Derived>
19
19
  template<typename DiagonalDerived>
20
- inline const Product<Derived, DiagonalDerived, LazyProduct>
20
+ EIGEN_DEVICE_FUNC inline const Product<Derived, DiagonalDerived, LazyProduct>
21
21
  MatrixBase<Derived>::operator*(const DiagonalBase<DiagonalDerived> &a_diagonal) const
22
22
  {
23
23
  return Product<Derived, DiagonalDerived, LazyProduct>(derived(),a_diagonal.derived());