@smake/eigen 1.1.0 → 1.1.1

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 (431) hide show
  1. package/README.md +1 -1
  2. package/eigen/Eigen/AccelerateSupport +52 -0
  3. package/eigen/Eigen/Cholesky +18 -20
  4. package/eigen/Eigen/CholmodSupport +28 -28
  5. package/eigen/Eigen/Core +187 -120
  6. package/eigen/Eigen/Eigenvalues +16 -13
  7. package/eigen/Eigen/Geometry +18 -18
  8. package/eigen/Eigen/Householder +9 -7
  9. package/eigen/Eigen/IterativeLinearSolvers +8 -4
  10. package/eigen/Eigen/Jacobi +14 -13
  11. package/eigen/Eigen/KLUSupport +23 -21
  12. package/eigen/Eigen/LU +15 -16
  13. package/eigen/Eigen/MetisSupport +12 -12
  14. package/eigen/Eigen/OrderingMethods +54 -51
  15. package/eigen/Eigen/PaStiXSupport +23 -21
  16. package/eigen/Eigen/PardisoSupport +17 -14
  17. package/eigen/Eigen/QR +18 -20
  18. package/eigen/Eigen/QtAlignedMalloc +5 -12
  19. package/eigen/Eigen/SPQRSupport +21 -14
  20. package/eigen/Eigen/SVD +23 -17
  21. package/eigen/Eigen/Sparse +1 -2
  22. package/eigen/Eigen/SparseCholesky +18 -15
  23. package/eigen/Eigen/SparseCore +18 -17
  24. package/eigen/Eigen/SparseLU +9 -9
  25. package/eigen/Eigen/SparseQR +16 -14
  26. package/eigen/Eigen/StdDeque +5 -2
  27. package/eigen/Eigen/StdList +5 -2
  28. package/eigen/Eigen/StdVector +5 -2
  29. package/eigen/Eigen/SuperLUSupport +30 -24
  30. package/eigen/Eigen/ThreadPool +80 -0
  31. package/eigen/Eigen/UmfPackSupport +19 -17
  32. package/eigen/Eigen/Version +14 -0
  33. package/eigen/Eigen/src/AccelerateSupport/AccelerateSupport.h +423 -0
  34. package/eigen/Eigen/src/AccelerateSupport/InternalHeaderCheck.h +3 -0
  35. package/eigen/Eigen/src/Cholesky/InternalHeaderCheck.h +3 -0
  36. package/eigen/Eigen/src/Cholesky/LDLT.h +366 -405
  37. package/eigen/Eigen/src/Cholesky/LLT.h +323 -367
  38. package/eigen/Eigen/src/Cholesky/LLT_LAPACKE.h +81 -56
  39. package/eigen/Eigen/src/CholmodSupport/CholmodSupport.h +585 -529
  40. package/eigen/Eigen/src/CholmodSupport/InternalHeaderCheck.h +3 -0
  41. package/eigen/Eigen/src/Core/ArithmeticSequence.h +143 -317
  42. package/eigen/Eigen/src/Core/Array.h +329 -370
  43. package/eigen/Eigen/src/Core/ArrayBase.h +190 -203
  44. package/eigen/Eigen/src/Core/ArrayWrapper.h +126 -170
  45. package/eigen/Eigen/src/Core/Assign.h +30 -40
  46. package/eigen/Eigen/src/Core/AssignEvaluator.h +651 -604
  47. package/eigen/Eigen/src/Core/Assign_MKL.h +125 -120
  48. package/eigen/Eigen/src/Core/BandMatrix.h +267 -282
  49. package/eigen/Eigen/src/Core/Block.h +371 -390
  50. package/eigen/Eigen/src/Core/CommaInitializer.h +85 -100
  51. package/eigen/Eigen/src/Core/ConditionEstimator.h +51 -53
  52. package/eigen/Eigen/src/Core/CoreEvaluators.h +1214 -937
  53. package/eigen/Eigen/src/Core/CoreIterators.h +72 -63
  54. package/eigen/Eigen/src/Core/CwiseBinaryOp.h +112 -129
  55. package/eigen/Eigen/src/Core/CwiseNullaryOp.h +676 -702
  56. package/eigen/Eigen/src/Core/CwiseTernaryOp.h +77 -103
  57. package/eigen/Eigen/src/Core/CwiseUnaryOp.h +55 -67
  58. package/eigen/Eigen/src/Core/CwiseUnaryView.h +127 -92
  59. package/eigen/Eigen/src/Core/DenseBase.h +630 -658
  60. package/eigen/Eigen/src/Core/DenseCoeffsBase.h +511 -628
  61. package/eigen/Eigen/src/Core/DenseStorage.h +511 -590
  62. package/eigen/Eigen/src/Core/DeviceWrapper.h +153 -0
  63. package/eigen/Eigen/src/Core/Diagonal.h +168 -207
  64. package/eigen/Eigen/src/Core/DiagonalMatrix.h +346 -317
  65. package/eigen/Eigen/src/Core/DiagonalProduct.h +12 -10
  66. package/eigen/Eigen/src/Core/Dot.h +167 -217
  67. package/eigen/Eigen/src/Core/EigenBase.h +74 -85
  68. package/eigen/Eigen/src/Core/Fill.h +138 -0
  69. package/eigen/Eigen/src/Core/FindCoeff.h +464 -0
  70. package/eigen/Eigen/src/Core/ForceAlignedAccess.h +90 -113
  71. package/eigen/Eigen/src/Core/Fuzzy.h +82 -105
  72. package/eigen/Eigen/src/Core/GeneralProduct.h +315 -261
  73. package/eigen/Eigen/src/Core/GenericPacketMath.h +1182 -520
  74. package/eigen/Eigen/src/Core/GlobalFunctions.h +193 -157
  75. package/eigen/Eigen/src/Core/IO.h +131 -156
  76. package/eigen/Eigen/src/Core/IndexedView.h +209 -125
  77. package/eigen/Eigen/src/Core/InnerProduct.h +260 -0
  78. package/eigen/Eigen/src/Core/InternalHeaderCheck.h +3 -0
  79. package/eigen/Eigen/src/Core/Inverse.h +50 -59
  80. package/eigen/Eigen/src/Core/Map.h +123 -141
  81. package/eigen/Eigen/src/Core/MapBase.h +255 -282
  82. package/eigen/Eigen/src/Core/MathFunctions.h +1247 -1201
  83. package/eigen/Eigen/src/Core/MathFunctionsImpl.h +162 -99
  84. package/eigen/Eigen/src/Core/Matrix.h +463 -494
  85. package/eigen/Eigen/src/Core/MatrixBase.h +468 -470
  86. package/eigen/Eigen/src/Core/NestByValue.h +58 -52
  87. package/eigen/Eigen/src/Core/NoAlias.h +79 -86
  88. package/eigen/Eigen/src/Core/NumTraits.h +206 -206
  89. package/eigen/Eigen/src/Core/PartialReduxEvaluator.h +163 -142
  90. package/eigen/Eigen/src/Core/PermutationMatrix.h +461 -511
  91. package/eigen/Eigen/src/Core/PlainObjectBase.h +858 -972
  92. package/eigen/Eigen/src/Core/Product.h +246 -130
  93. package/eigen/Eigen/src/Core/ProductEvaluators.h +779 -671
  94. package/eigen/Eigen/src/Core/Random.h +153 -164
  95. package/eigen/Eigen/src/Core/RandomImpl.h +262 -0
  96. package/eigen/Eigen/src/Core/RealView.h +250 -0
  97. package/eigen/Eigen/src/Core/Redux.h +334 -314
  98. package/eigen/Eigen/src/Core/Ref.h +259 -257
  99. package/eigen/Eigen/src/Core/Replicate.h +92 -104
  100. package/eigen/Eigen/src/Core/Reshaped.h +215 -271
  101. package/eigen/Eigen/src/Core/ReturnByValue.h +47 -55
  102. package/eigen/Eigen/src/Core/Reverse.h +133 -148
  103. package/eigen/Eigen/src/Core/Select.h +68 -140
  104. package/eigen/Eigen/src/Core/SelfAdjointView.h +254 -290
  105. package/eigen/Eigen/src/Core/SelfCwiseBinaryOp.h +23 -20
  106. package/eigen/Eigen/src/Core/SkewSymmetricMatrix3.h +382 -0
  107. package/eigen/Eigen/src/Core/Solve.h +88 -102
  108. package/eigen/Eigen/src/Core/SolveTriangular.h +126 -124
  109. package/eigen/Eigen/src/Core/SolverBase.h +132 -133
  110. package/eigen/Eigen/src/Core/StableNorm.h +113 -147
  111. package/eigen/Eigen/src/Core/StlIterators.h +404 -248
  112. package/eigen/Eigen/src/Core/Stride.h +90 -92
  113. package/eigen/Eigen/src/Core/Swap.h +70 -39
  114. package/eigen/Eigen/src/Core/Transpose.h +258 -295
  115. package/eigen/Eigen/src/Core/Transpositions.h +270 -333
  116. package/eigen/Eigen/src/Core/TriangularMatrix.h +642 -743
  117. package/eigen/Eigen/src/Core/VectorBlock.h +59 -72
  118. package/eigen/Eigen/src/Core/VectorwiseOp.h +653 -704
  119. package/eigen/Eigen/src/Core/Visitor.h +464 -308
  120. package/eigen/Eigen/src/Core/arch/AVX/Complex.h +380 -187
  121. package/eigen/Eigen/src/Core/arch/AVX/MathFunctions.h +65 -163
  122. package/eigen/Eigen/src/Core/arch/AVX/PacketMath.h +2145 -638
  123. package/eigen/Eigen/src/Core/arch/AVX/Reductions.h +353 -0
  124. package/eigen/Eigen/src/Core/arch/AVX/TypeCasting.h +253 -60
  125. package/eigen/Eigen/src/Core/arch/AVX512/Complex.h +278 -228
  126. package/eigen/Eigen/src/Core/arch/AVX512/GemmKernel.h +1245 -0
  127. package/eigen/Eigen/src/Core/arch/AVX512/MathFunctions.h +48 -269
  128. package/eigen/Eigen/src/Core/arch/AVX512/MathFunctionsFP16.h +75 -0
  129. package/eigen/Eigen/src/Core/arch/AVX512/PacketMath.h +1597 -754
  130. package/eigen/Eigen/src/Core/arch/AVX512/PacketMathFP16.h +1413 -0
  131. package/eigen/Eigen/src/Core/arch/AVX512/Reductions.h +297 -0
  132. package/eigen/Eigen/src/Core/arch/AVX512/TrsmKernel.h +1167 -0
  133. package/eigen/Eigen/src/Core/arch/AVX512/TrsmUnrolls.inc +1219 -0
  134. package/eigen/Eigen/src/Core/arch/AVX512/TypeCasting.h +229 -41
  135. package/eigen/Eigen/src/Core/arch/AVX512/TypeCastingFP16.h +130 -0
  136. package/eigen/Eigen/src/Core/arch/AltiVec/Complex.h +420 -184
  137. package/eigen/Eigen/src/Core/arch/AltiVec/MathFunctions.h +40 -49
  138. package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProduct.h +2962 -2213
  139. package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductCommon.h +196 -212
  140. package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductMMA.h +713 -441
  141. package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductMMAbfloat16.h +742 -0
  142. package/eigen/Eigen/src/Core/arch/AltiVec/MatrixVectorProduct.inc +2818 -0
  143. package/eigen/Eigen/src/Core/arch/AltiVec/PacketMath.h +2380 -1362
  144. package/eigen/Eigen/src/Core/arch/AltiVec/TypeCasting.h +153 -0
  145. package/eigen/Eigen/src/Core/arch/Default/BFloat16.h +390 -224
  146. package/eigen/Eigen/src/Core/arch/Default/ConjHelper.h +78 -67
  147. package/eigen/Eigen/src/Core/arch/Default/GenericPacketMathFunctions.h +1784 -799
  148. package/eigen/Eigen/src/Core/arch/Default/GenericPacketMathFunctionsFwd.h +167 -50
  149. package/eigen/Eigen/src/Core/arch/Default/Half.h +528 -379
  150. package/eigen/Eigen/src/Core/arch/Default/Settings.h +10 -12
  151. package/eigen/Eigen/src/Core/arch/GPU/Complex.h +244 -0
  152. package/eigen/Eigen/src/Core/arch/GPU/MathFunctions.h +41 -40
  153. package/eigen/Eigen/src/Core/arch/GPU/PacketMath.h +550 -523
  154. package/eigen/Eigen/src/Core/arch/GPU/Tuple.h +268 -0
  155. package/eigen/Eigen/src/Core/arch/GPU/TypeCasting.h +27 -30
  156. package/eigen/Eigen/src/Core/arch/HIP/hcc/math_constants.h +8 -8
  157. package/eigen/Eigen/src/Core/arch/HVX/PacketMath.h +1088 -0
  158. package/eigen/Eigen/src/Core/arch/LSX/Complex.h +520 -0
  159. package/eigen/Eigen/src/Core/arch/LSX/GeneralBlockPanelKernel.h +23 -0
  160. package/eigen/Eigen/src/Core/arch/LSX/MathFunctions.h +43 -0
  161. package/eigen/Eigen/src/Core/arch/LSX/PacketMath.h +2866 -0
  162. package/eigen/Eigen/src/Core/arch/LSX/TypeCasting.h +526 -0
  163. package/eigen/Eigen/src/Core/arch/MSA/Complex.h +54 -82
  164. package/eigen/Eigen/src/Core/arch/MSA/MathFunctions.h +84 -92
  165. package/eigen/Eigen/src/Core/arch/MSA/PacketMath.h +51 -47
  166. package/eigen/Eigen/src/Core/arch/NEON/Complex.h +454 -306
  167. package/eigen/Eigen/src/Core/arch/NEON/GeneralBlockPanelKernel.h +175 -115
  168. package/eigen/Eigen/src/Core/arch/NEON/MathFunctions.h +23 -30
  169. package/eigen/Eigen/src/Core/arch/NEON/PacketMath.h +4366 -2857
  170. package/eigen/Eigen/src/Core/arch/NEON/TypeCasting.h +616 -393
  171. package/eigen/Eigen/src/Core/arch/NEON/UnaryFunctors.h +57 -0
  172. package/eigen/Eigen/src/Core/arch/SSE/Complex.h +350 -198
  173. package/eigen/Eigen/src/Core/arch/SSE/MathFunctions.h +38 -149
  174. package/eigen/Eigen/src/Core/arch/SSE/PacketMath.h +1791 -912
  175. package/eigen/Eigen/src/Core/arch/SSE/Reductions.h +324 -0
  176. package/eigen/Eigen/src/Core/arch/SSE/TypeCasting.h +128 -40
  177. package/eigen/Eigen/src/Core/arch/SVE/MathFunctions.h +10 -6
  178. package/eigen/Eigen/src/Core/arch/SVE/PacketMath.h +156 -234
  179. package/eigen/Eigen/src/Core/arch/SVE/TypeCasting.h +6 -3
  180. package/eigen/Eigen/src/Core/arch/SYCL/InteropHeaders.h +27 -32
  181. package/eigen/Eigen/src/Core/arch/SYCL/MathFunctions.h +119 -117
  182. package/eigen/Eigen/src/Core/arch/SYCL/PacketMath.h +325 -419
  183. package/eigen/Eigen/src/Core/arch/SYCL/TypeCasting.h +15 -17
  184. package/eigen/Eigen/src/Core/arch/ZVector/Complex.h +325 -181
  185. package/eigen/Eigen/src/Core/arch/ZVector/MathFunctions.h +94 -83
  186. package/eigen/Eigen/src/Core/arch/ZVector/PacketMath.h +811 -458
  187. package/eigen/Eigen/src/Core/functors/AssignmentFunctors.h +121 -124
  188. package/eigen/Eigen/src/Core/functors/BinaryFunctors.h +576 -370
  189. package/eigen/Eigen/src/Core/functors/NullaryFunctors.h +194 -109
  190. package/eigen/Eigen/src/Core/functors/StlFunctors.h +95 -112
  191. package/eigen/Eigen/src/Core/functors/TernaryFunctors.h +34 -7
  192. package/eigen/Eigen/src/Core/functors/UnaryFunctors.h +1038 -749
  193. package/eigen/Eigen/src/Core/products/GeneralBlockPanelKernel.h +1883 -1375
  194. package/eigen/Eigen/src/Core/products/GeneralMatrixMatrix.h +312 -370
  195. package/eigen/Eigen/src/Core/products/GeneralMatrixMatrixTriangular.h +189 -176
  196. package/eigen/Eigen/src/Core/products/GeneralMatrixMatrixTriangular_BLAS.h +84 -81
  197. package/eigen/Eigen/src/Core/products/GeneralMatrixMatrix_BLAS.h +154 -73
  198. package/eigen/Eigen/src/Core/products/GeneralMatrixVector.h +292 -337
  199. package/eigen/Eigen/src/Core/products/GeneralMatrixVector_BLAS.h +80 -77
  200. package/eigen/Eigen/src/Core/products/Parallelizer.h +207 -105
  201. package/eigen/Eigen/src/Core/products/SelfadjointMatrixMatrix.h +327 -388
  202. package/eigen/Eigen/src/Core/products/SelfadjointMatrixMatrix_BLAS.h +206 -224
  203. package/eigen/Eigen/src/Core/products/SelfadjointMatrixVector.h +138 -147
  204. package/eigen/Eigen/src/Core/products/SelfadjointMatrixVector_BLAS.h +58 -61
  205. package/eigen/Eigen/src/Core/products/SelfadjointProduct.h +71 -71
  206. package/eigen/Eigen/src/Core/products/SelfadjointRank2Update.h +48 -47
  207. package/eigen/Eigen/src/Core/products/TriangularMatrixMatrix.h +294 -369
  208. package/eigen/Eigen/src/Core/products/TriangularMatrixMatrix_BLAS.h +246 -238
  209. package/eigen/Eigen/src/Core/products/TriangularMatrixVector.h +244 -247
  210. package/eigen/Eigen/src/Core/products/TriangularMatrixVector_BLAS.h +212 -192
  211. package/eigen/Eigen/src/Core/products/TriangularSolverMatrix.h +328 -277
  212. package/eigen/Eigen/src/Core/products/TriangularSolverMatrix_BLAS.h +108 -109
  213. package/eigen/Eigen/src/Core/products/TriangularSolverVector.h +68 -94
  214. package/eigen/Eigen/src/Core/util/Assert.h +158 -0
  215. package/eigen/Eigen/src/Core/util/BlasUtil.h +342 -303
  216. package/eigen/Eigen/src/Core/util/ConfigureVectorization.h +348 -317
  217. package/eigen/Eigen/src/Core/util/Constants.h +297 -262
  218. package/eigen/Eigen/src/Core/util/DisableStupidWarnings.h +130 -90
  219. package/eigen/Eigen/src/Core/util/EmulateArray.h +270 -0
  220. package/eigen/Eigen/src/Core/util/ForwardDeclarations.h +449 -247
  221. package/eigen/Eigen/src/Core/util/GpuHipCudaDefines.inc +101 -0
  222. package/eigen/Eigen/src/Core/util/GpuHipCudaUndefines.inc +45 -0
  223. package/eigen/Eigen/src/Core/util/IndexedViewHelper.h +417 -116
  224. package/eigen/Eigen/src/Core/util/IntegralConstant.h +211 -204
  225. package/eigen/Eigen/src/Core/util/MKL_support.h +39 -37
  226. package/eigen/Eigen/src/Core/util/Macros.h +655 -773
  227. package/eigen/Eigen/src/Core/util/MaxSizeVector.h +139 -0
  228. package/eigen/Eigen/src/Core/util/Memory.h +970 -748
  229. package/eigen/Eigen/src/Core/util/Meta.h +581 -633
  230. package/eigen/Eigen/src/Core/util/MoreMeta.h +638 -0
  231. package/eigen/Eigen/src/Core/util/ReenableStupidWarnings.h +32 -19
  232. package/eigen/Eigen/src/Core/util/ReshapedHelper.h +17 -17
  233. package/eigen/Eigen/src/Core/util/Serializer.h +209 -0
  234. package/eigen/Eigen/src/Core/util/StaticAssert.h +50 -166
  235. package/eigen/Eigen/src/Core/util/SymbolicIndex.h +377 -225
  236. package/eigen/Eigen/src/Core/util/XprHelper.h +784 -547
  237. package/eigen/Eigen/src/Eigenvalues/ComplexEigenSolver.h +246 -277
  238. package/eigen/Eigen/src/Eigenvalues/ComplexSchur.h +299 -319
  239. package/eigen/Eigen/src/Eigenvalues/ComplexSchur_LAPACKE.h +52 -48
  240. package/eigen/Eigen/src/Eigenvalues/EigenSolver.h +413 -456
  241. package/eigen/Eigen/src/Eigenvalues/GeneralizedEigenSolver.h +309 -325
  242. package/eigen/Eigen/src/Eigenvalues/GeneralizedSelfAdjointEigenSolver.h +157 -171
  243. package/eigen/Eigen/src/Eigenvalues/HessenbergDecomposition.h +292 -310
  244. package/eigen/Eigen/src/Eigenvalues/InternalHeaderCheck.h +3 -0
  245. package/eigen/Eigen/src/Eigenvalues/MatrixBaseEigenvalues.h +89 -105
  246. package/eigen/Eigen/src/Eigenvalues/RealQZ.h +537 -607
  247. package/eigen/Eigen/src/Eigenvalues/RealSchur.h +342 -381
  248. package/eigen/Eigen/src/Eigenvalues/RealSchur_LAPACKE.h +41 -35
  249. package/eigen/Eigen/src/Eigenvalues/SelfAdjointEigenSolver.h +541 -595
  250. package/eigen/Eigen/src/Eigenvalues/SelfAdjointEigenSolver_LAPACKE.h +47 -44
  251. package/eigen/Eigen/src/Eigenvalues/Tridiagonalization.h +430 -462
  252. package/eigen/Eigen/src/Geometry/AlignedBox.h +226 -227
  253. package/eigen/Eigen/src/Geometry/AngleAxis.h +131 -133
  254. package/eigen/Eigen/src/Geometry/EulerAngles.h +163 -74
  255. package/eigen/Eigen/src/Geometry/Homogeneous.h +285 -333
  256. package/eigen/Eigen/src/Geometry/Hyperplane.h +151 -160
  257. package/eigen/Eigen/src/Geometry/InternalHeaderCheck.h +3 -0
  258. package/eigen/Eigen/src/Geometry/OrthoMethods.h +168 -146
  259. package/eigen/Eigen/src/Geometry/ParametrizedLine.h +127 -127
  260. package/eigen/Eigen/src/Geometry/Quaternion.h +566 -506
  261. package/eigen/Eigen/src/Geometry/Rotation2D.h +107 -105
  262. package/eigen/Eigen/src/Geometry/RotationBase.h +148 -145
  263. package/eigen/Eigen/src/Geometry/Scaling.h +113 -106
  264. package/eigen/Eigen/src/Geometry/Transform.h +858 -936
  265. package/eigen/Eigen/src/Geometry/Translation.h +94 -92
  266. package/eigen/Eigen/src/Geometry/Umeyama.h +79 -84
  267. package/eigen/Eigen/src/Geometry/arch/Geometry_SIMD.h +90 -104
  268. package/eigen/Eigen/src/Householder/BlockHouseholder.h +51 -46
  269. package/eigen/Eigen/src/Householder/Householder.h +102 -124
  270. package/eigen/Eigen/src/Householder/HouseholderSequence.h +412 -453
  271. package/eigen/Eigen/src/Householder/InternalHeaderCheck.h +3 -0
  272. package/eigen/Eigen/src/IterativeLinearSolvers/BasicPreconditioners.h +149 -162
  273. package/eigen/Eigen/src/IterativeLinearSolvers/BiCGSTAB.h +124 -119
  274. package/eigen/Eigen/src/IterativeLinearSolvers/ConjugateGradient.h +92 -104
  275. package/eigen/Eigen/src/IterativeLinearSolvers/IncompleteCholesky.h +251 -243
  276. package/eigen/Eigen/src/IterativeLinearSolvers/IncompleteLUT.h +224 -228
  277. package/eigen/Eigen/src/IterativeLinearSolvers/InternalHeaderCheck.h +3 -0
  278. package/eigen/Eigen/src/IterativeLinearSolvers/IterativeSolverBase.h +178 -227
  279. package/eigen/Eigen/src/IterativeLinearSolvers/LeastSquareConjugateGradient.h +79 -84
  280. package/eigen/Eigen/src/IterativeLinearSolvers/SolveWithGuess.h +54 -60
  281. package/eigen/Eigen/src/Jacobi/InternalHeaderCheck.h +3 -0
  282. package/eigen/Eigen/src/Jacobi/Jacobi.h +252 -308
  283. package/eigen/Eigen/src/KLUSupport/InternalHeaderCheck.h +3 -0
  284. package/eigen/Eigen/src/KLUSupport/KLUSupport.h +208 -227
  285. package/eigen/Eigen/src/LU/Determinant.h +50 -69
  286. package/eigen/Eigen/src/LU/FullPivLU.h +545 -596
  287. package/eigen/Eigen/src/LU/InternalHeaderCheck.h +3 -0
  288. package/eigen/Eigen/src/LU/InverseImpl.h +206 -285
  289. package/eigen/Eigen/src/LU/PartialPivLU.h +390 -428
  290. package/eigen/Eigen/src/LU/PartialPivLU_LAPACKE.h +54 -40
  291. package/eigen/Eigen/src/LU/arch/InverseSize4.h +72 -70
  292. package/eigen/Eigen/src/MetisSupport/InternalHeaderCheck.h +3 -0
  293. package/eigen/Eigen/src/MetisSupport/MetisSupport.h +81 -93
  294. package/eigen/Eigen/src/OrderingMethods/Amd.h +243 -265
  295. package/eigen/Eigen/src/OrderingMethods/Eigen_Colamd.h +831 -1004
  296. package/eigen/Eigen/src/OrderingMethods/InternalHeaderCheck.h +3 -0
  297. package/eigen/Eigen/src/OrderingMethods/Ordering.h +112 -119
  298. package/eigen/Eigen/src/PaStiXSupport/InternalHeaderCheck.h +3 -0
  299. package/eigen/Eigen/src/PaStiXSupport/PaStiXSupport.h +524 -570
  300. package/eigen/Eigen/src/PardisoSupport/InternalHeaderCheck.h +3 -0
  301. package/eigen/Eigen/src/PardisoSupport/PardisoSupport.h +385 -430
  302. package/eigen/Eigen/src/QR/ColPivHouseholderQR.h +479 -479
  303. package/eigen/Eigen/src/QR/ColPivHouseholderQR_LAPACKE.h +120 -56
  304. package/eigen/Eigen/src/QR/CompleteOrthogonalDecomposition.h +166 -153
  305. package/eigen/Eigen/src/QR/FullPivHouseholderQR.h +495 -475
  306. package/eigen/Eigen/src/QR/HouseholderQR.h +394 -285
  307. package/eigen/Eigen/src/QR/HouseholderQR_LAPACKE.h +32 -23
  308. package/eigen/Eigen/src/QR/InternalHeaderCheck.h +3 -0
  309. package/eigen/Eigen/src/SPQRSupport/InternalHeaderCheck.h +3 -0
  310. package/eigen/Eigen/src/SPQRSupport/SuiteSparseQRSupport.h +244 -264
  311. package/eigen/Eigen/src/SVD/BDCSVD.h +817 -713
  312. package/eigen/Eigen/src/SVD/BDCSVD_LAPACKE.h +174 -0
  313. package/eigen/Eigen/src/SVD/InternalHeaderCheck.h +3 -0
  314. package/eigen/Eigen/src/SVD/JacobiSVD.h +577 -543
  315. package/eigen/Eigen/src/SVD/JacobiSVD_LAPACKE.h +85 -49
  316. package/eigen/Eigen/src/SVD/SVDBase.h +242 -182
  317. package/eigen/Eigen/src/SVD/UpperBidiagonalization.h +200 -235
  318. package/eigen/Eigen/src/SparseCholesky/InternalHeaderCheck.h +3 -0
  319. package/eigen/Eigen/src/SparseCholesky/SimplicialCholesky.h +765 -594
  320. package/eigen/Eigen/src/SparseCholesky/SimplicialCholesky_impl.h +308 -94
  321. package/eigen/Eigen/src/SparseCore/AmbiVector.h +202 -251
  322. package/eigen/Eigen/src/SparseCore/CompressedStorage.h +184 -252
  323. package/eigen/Eigen/src/SparseCore/ConservativeSparseSparseProduct.h +134 -178
  324. package/eigen/Eigen/src/SparseCore/InternalHeaderCheck.h +3 -0
  325. package/eigen/Eigen/src/SparseCore/SparseAssign.h +149 -140
  326. package/eigen/Eigen/src/SparseCore/SparseBlock.h +403 -440
  327. package/eigen/Eigen/src/SparseCore/SparseColEtree.h +100 -112
  328. package/eigen/Eigen/src/SparseCore/SparseCompressedBase.h +525 -303
  329. package/eigen/Eigen/src/SparseCore/SparseCwiseBinaryOp.h +555 -339
  330. package/eigen/Eigen/src/SparseCore/SparseCwiseUnaryOp.h +100 -108
  331. package/eigen/Eigen/src/SparseCore/SparseDenseProduct.h +169 -197
  332. package/eigen/Eigen/src/SparseCore/SparseDiagonalProduct.h +71 -71
  333. package/eigen/Eigen/src/SparseCore/SparseDot.h +49 -47
  334. package/eigen/Eigen/src/SparseCore/SparseFuzzy.h +13 -11
  335. package/eigen/Eigen/src/SparseCore/SparseMap.h +243 -253
  336. package/eigen/Eigen/src/SparseCore/SparseMatrix.h +1603 -1245
  337. package/eigen/Eigen/src/SparseCore/SparseMatrixBase.h +403 -350
  338. package/eigen/Eigen/src/SparseCore/SparsePermutation.h +186 -115
  339. package/eigen/Eigen/src/SparseCore/SparseProduct.h +94 -97
  340. package/eigen/Eigen/src/SparseCore/SparseRedux.h +22 -24
  341. package/eigen/Eigen/src/SparseCore/SparseRef.h +268 -295
  342. package/eigen/Eigen/src/SparseCore/SparseSelfAdjointView.h +370 -416
  343. package/eigen/Eigen/src/SparseCore/SparseSolverBase.h +78 -87
  344. package/eigen/Eigen/src/SparseCore/SparseSparseProductWithPruning.h +81 -95
  345. package/eigen/Eigen/src/SparseCore/SparseTranspose.h +62 -71
  346. package/eigen/Eigen/src/SparseCore/SparseTriangularView.h +132 -144
  347. package/eigen/Eigen/src/SparseCore/SparseUtil.h +138 -115
  348. package/eigen/Eigen/src/SparseCore/SparseVector.h +426 -372
  349. package/eigen/Eigen/src/SparseCore/SparseView.h +164 -193
  350. package/eigen/Eigen/src/SparseCore/TriangularSolver.h +129 -170
  351. package/eigen/Eigen/src/SparseLU/InternalHeaderCheck.h +3 -0
  352. package/eigen/Eigen/src/SparseLU/SparseLU.h +756 -710
  353. package/eigen/Eigen/src/SparseLU/SparseLUImpl.h +61 -48
  354. package/eigen/Eigen/src/SparseLU/SparseLU_Memory.h +102 -118
  355. package/eigen/Eigen/src/SparseLU/SparseLU_Structs.h +38 -35
  356. package/eigen/Eigen/src/SparseLU/SparseLU_SupernodalMatrix.h +245 -301
  357. package/eigen/Eigen/src/SparseLU/SparseLU_Utils.h +44 -49
  358. package/eigen/Eigen/src/SparseLU/SparseLU_column_bmod.h +104 -108
  359. package/eigen/Eigen/src/SparseLU/SparseLU_column_dfs.h +89 -100
  360. package/eigen/Eigen/src/SparseLU/SparseLU_copy_to_ucol.h +57 -58
  361. package/eigen/Eigen/src/SparseLU/SparseLU_heap_relax_snode.h +43 -55
  362. package/eigen/Eigen/src/SparseLU/SparseLU_kernel_bmod.h +74 -71
  363. package/eigen/Eigen/src/SparseLU/SparseLU_panel_bmod.h +124 -132
  364. package/eigen/Eigen/src/SparseLU/SparseLU_panel_dfs.h +136 -159
  365. package/eigen/Eigen/src/SparseLU/SparseLU_pivotL.h +51 -52
  366. package/eigen/Eigen/src/SparseLU/SparseLU_pruneL.h +67 -73
  367. package/eigen/Eigen/src/SparseLU/SparseLU_relax_snode.h +24 -26
  368. package/eigen/Eigen/src/SparseQR/InternalHeaderCheck.h +3 -0
  369. package/eigen/Eigen/src/SparseQR/SparseQR.h +450 -502
  370. package/eigen/Eigen/src/StlSupport/StdDeque.h +28 -93
  371. package/eigen/Eigen/src/StlSupport/StdList.h +28 -84
  372. package/eigen/Eigen/src/StlSupport/StdVector.h +28 -108
  373. package/eigen/Eigen/src/StlSupport/details.h +48 -50
  374. package/eigen/Eigen/src/SuperLUSupport/InternalHeaderCheck.h +3 -0
  375. package/eigen/Eigen/src/SuperLUSupport/SuperLUSupport.h +634 -730
  376. package/eigen/Eigen/src/ThreadPool/Barrier.h +70 -0
  377. package/eigen/Eigen/src/ThreadPool/CoreThreadPoolDevice.h +336 -0
  378. package/eigen/Eigen/src/ThreadPool/EventCount.h +241 -0
  379. package/eigen/Eigen/src/ThreadPool/ForkJoin.h +140 -0
  380. package/eigen/Eigen/src/ThreadPool/InternalHeaderCheck.h +4 -0
  381. package/eigen/Eigen/src/ThreadPool/NonBlockingThreadPool.h +587 -0
  382. package/eigen/Eigen/src/ThreadPool/RunQueue.h +230 -0
  383. package/eigen/Eigen/src/ThreadPool/ThreadCancel.h +21 -0
  384. package/eigen/Eigen/src/ThreadPool/ThreadEnvironment.h +43 -0
  385. package/eigen/Eigen/src/ThreadPool/ThreadLocal.h +289 -0
  386. package/eigen/Eigen/src/ThreadPool/ThreadPoolInterface.h +50 -0
  387. package/eigen/Eigen/src/ThreadPool/ThreadYield.h +16 -0
  388. package/eigen/Eigen/src/UmfPackSupport/InternalHeaderCheck.h +3 -0
  389. package/eigen/Eigen/src/UmfPackSupport/UmfPackSupport.h +428 -464
  390. package/eigen/Eigen/src/misc/Image.h +41 -43
  391. package/eigen/Eigen/src/misc/InternalHeaderCheck.h +3 -0
  392. package/eigen/Eigen/src/misc/Kernel.h +39 -41
  393. package/eigen/Eigen/src/misc/RealSvd2x2.h +19 -21
  394. package/eigen/Eigen/src/misc/blas.h +83 -426
  395. package/eigen/Eigen/src/misc/lapacke.h +9972 -16179
  396. package/eigen/Eigen/src/misc/lapacke_helpers.h +163 -0
  397. package/eigen/Eigen/src/misc/lapacke_mangling.h +4 -5
  398. package/eigen/Eigen/src/plugins/ArrayCwiseBinaryOps.inc +344 -0
  399. package/eigen/Eigen/src/plugins/ArrayCwiseUnaryOps.inc +544 -0
  400. package/eigen/Eigen/src/plugins/{BlockMethods.h → BlockMethods.inc} +434 -506
  401. package/eigen/Eigen/src/plugins/CommonCwiseBinaryOps.inc +116 -0
  402. package/eigen/Eigen/src/plugins/{CommonCwiseUnaryOps.h → CommonCwiseUnaryOps.inc} +58 -68
  403. package/eigen/Eigen/src/plugins/IndexedViewMethods.inc +192 -0
  404. package/eigen/Eigen/src/plugins/InternalHeaderCheck.inc +3 -0
  405. package/eigen/Eigen/src/plugins/MatrixCwiseBinaryOps.inc +331 -0
  406. package/eigen/Eigen/src/plugins/MatrixCwiseUnaryOps.inc +118 -0
  407. package/eigen/Eigen/src/plugins/ReshapedMethods.inc +133 -0
  408. package/package.json +1 -1
  409. package/eigen/COPYING.APACHE +0 -203
  410. package/eigen/COPYING.BSD +0 -26
  411. package/eigen/COPYING.GPL +0 -674
  412. package/eigen/COPYING.LGPL +0 -502
  413. package/eigen/COPYING.MINPACK +0 -51
  414. package/eigen/COPYING.MPL2 +0 -373
  415. package/eigen/COPYING.README +0 -18
  416. package/eigen/Eigen/src/Core/BooleanRedux.h +0 -162
  417. package/eigen/Eigen/src/Core/arch/CUDA/Complex.h +0 -258
  418. package/eigen/Eigen/src/Core/arch/Default/TypeCasting.h +0 -120
  419. package/eigen/Eigen/src/Core/arch/SYCL/SyclMemoryModel.h +0 -694
  420. package/eigen/Eigen/src/Core/util/NonMPL2.h +0 -3
  421. package/eigen/Eigen/src/SparseCore/MappedSparseMatrix.h +0 -67
  422. package/eigen/Eigen/src/SparseLU/SparseLU_gemm_kernel.h +0 -280
  423. package/eigen/Eigen/src/misc/lapack.h +0 -152
  424. package/eigen/Eigen/src/plugins/ArrayCwiseBinaryOps.h +0 -358
  425. package/eigen/Eigen/src/plugins/ArrayCwiseUnaryOps.h +0 -696
  426. package/eigen/Eigen/src/plugins/CommonCwiseBinaryOps.h +0 -115
  427. package/eigen/Eigen/src/plugins/IndexedViewMethods.h +0 -262
  428. package/eigen/Eigen/src/plugins/MatrixCwiseBinaryOps.h +0 -152
  429. package/eigen/Eigen/src/plugins/MatrixCwiseUnaryOps.h +0 -95
  430. package/eigen/Eigen/src/plugins/ReshapedMethods.h +0 -149
  431. package/eigen/README.md +0 -5
@@ -13,640 +13,561 @@
13
13
  #define EIGEN_MATRIXSTORAGE_H
14
14
 
15
15
  #ifdef EIGEN_DENSE_STORAGE_CTOR_PLUGIN
16
- #define EIGEN_INTERNAL_DENSE_STORAGE_CTOR_PLUGIN(X) X; EIGEN_DENSE_STORAGE_CTOR_PLUGIN;
16
+ #define EIGEN_INTERNAL_DENSE_STORAGE_CTOR_PLUGIN(X) \
17
+ X; \
18
+ EIGEN_DENSE_STORAGE_CTOR_PLUGIN;
17
19
  #else
18
- #define EIGEN_INTERNAL_DENSE_STORAGE_CTOR_PLUGIN(X)
20
+ #define EIGEN_INTERNAL_DENSE_STORAGE_CTOR_PLUGIN(X)
19
21
  #endif
20
22
 
23
+ // IWYU pragma: private
24
+ #include "./InternalHeaderCheck.h"
25
+
21
26
  namespace Eigen {
22
27
 
23
28
  namespace internal {
24
29
 
25
- struct constructor_without_unaligned_array_assert {};
30
+ #if defined(EIGEN_DISABLE_UNALIGNED_ARRAY_ASSERT)
31
+ #define EIGEN_MAKE_UNALIGNED_ARRAY_ASSERT(Alignment)
32
+ #else
33
+ #define EIGEN_MAKE_UNALIGNED_ARRAY_ASSERT(Alignment) \
34
+ eigen_assert((is_constant_evaluated() || (std::uintptr_t(array) % Alignment == 0)) && \
35
+ "this assertion is explained here: " \
36
+ "http://eigen.tuxfamily.org/dox-devel/group__TopicUnalignedArrayAssert.html" \
37
+ " **** READ THIS WEB PAGE !!! ****");
38
+ #endif
26
39
 
27
- template<typename T, int Size>
28
- EIGEN_DEVICE_FUNC
29
- void check_static_allocation_size()
30
- {
31
- // if EIGEN_STACK_ALLOCATION_LIMIT is defined to 0, then no limit
32
- #if EIGEN_STACK_ALLOCATION_LIMIT
33
- EIGEN_STATIC_ASSERT(Size * sizeof(T) <= EIGEN_STACK_ALLOCATION_LIMIT, OBJECT_ALLOCATED_ON_STACK_IS_TOO_BIG);
34
- #endif
35
- }
40
+ #if EIGEN_STACK_ALLOCATION_LIMIT
41
+ #define EIGEN_MAKE_STACK_ALLOCATION_ASSERT(X) \
42
+ EIGEN_STATIC_ASSERT(X <= EIGEN_STACK_ALLOCATION_LIMIT, OBJECT_ALLOCATED_ON_STACK_IS_TOO_BIG)
43
+ #else
44
+ #define EIGEN_MAKE_STACK_ALLOCATION_ASSERT(X)
45
+ #endif
36
46
 
37
47
  /** \internal
38
- * Static array. If the MatrixOrArrayOptions require auto-alignment, the array will be automatically aligned:
39
- * to 16 bytes boundary if the total size is a multiple of 16 bytes.
40
- */
41
- template <typename T, int Size, int MatrixOrArrayOptions,
42
- int Alignment = (MatrixOrArrayOptions&DontAlign) ? 0
43
- : compute_default_alignment<T,Size>::value >
44
- struct plain_array
45
- {
46
- T array[Size];
47
-
48
- EIGEN_DEVICE_FUNC
49
- plain_array()
50
- {
51
- check_static_allocation_size<T,Size>();
52
- }
48
+ * Static array. If the MatrixOrArrayOptions require auto-alignment, the array will be automatically aligned:
49
+ * to 16 bytes boundary if the total size is a multiple of 16 bytes.
50
+ */
53
51
 
54
- EIGEN_DEVICE_FUNC
55
- plain_array(constructor_without_unaligned_array_assert)
56
- {
57
- check_static_allocation_size<T,Size>();
52
+ template <typename T, int Size, int MatrixOrArrayOptions,
53
+ int Alignment = (MatrixOrArrayOptions & DontAlign) ? 0 : compute_default_alignment<T, Size>::value>
54
+ struct plain_array {
55
+ EIGEN_ALIGN_TO_BOUNDARY(Alignment) T array[Size];
56
+ #if defined(EIGEN_NO_DEBUG) || defined(EIGEN_TESTING_PLAINOBJECT_CTOR)
57
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr plain_array() = default;
58
+ #else
59
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr plain_array() {
60
+ EIGEN_MAKE_UNALIGNED_ARRAY_ASSERT(Alignment)
61
+ EIGEN_MAKE_STACK_ALLOCATION_ASSERT(Size * sizeof(T))
58
62
  }
63
+ #endif
59
64
  };
60
65
 
61
- #if defined(EIGEN_DISABLE_UNALIGNED_ARRAY_ASSERT)
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 alignment test based on the fact the array is declared to be aligned.
65
- // See this bug report: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=53900
66
- // Hiding the origin of the array pointer behind a function argument seems to do the trick even if the function is inlined:
67
- template<typename PtrType>
68
- EIGEN_ALWAYS_INLINE PtrType eigen_unaligned_array_assert_workaround_gcc47(PtrType array) { return array; }
69
- #define EIGEN_MAKE_UNALIGNED_ARRAY_ASSERT(sizemask) \
70
- eigen_assert((internal::UIntPtr(eigen_unaligned_array_assert_workaround_gcc47(array)) & (sizemask)) == 0 \
71
- && "this assertion is explained here: " \
72
- "http://eigen.tuxfamily.org/dox-devel/group__TopicUnalignedArrayAssert.html" \
73
- " **** READ THIS WEB PAGE !!! ****");
66
+ template <typename T, int Size, int MatrixOrArrayOptions>
67
+ struct plain_array<T, Size, MatrixOrArrayOptions, 0> {
68
+ // on some 32-bit platforms, stack-allocated arrays are aligned to 4 bytes, not the preferred alignment of T
69
+ EIGEN_ALIGN_TO_BOUNDARY(alignof(T)) T array[Size];
70
+ #if defined(EIGEN_NO_DEBUG) || defined(EIGEN_TESTING_PLAINOBJECT_CTOR)
71
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr plain_array() = default;
74
72
  #else
75
- #define EIGEN_MAKE_UNALIGNED_ARRAY_ASSERT(sizemask) \
76
- eigen_assert((internal::UIntPtr(array) & (sizemask)) == 0 \
77
- && "this assertion is explained here: " \
78
- "http://eigen.tuxfamily.org/dox-devel/group__TopicUnalignedArrayAssert.html" \
79
- " **** READ THIS WEB PAGE !!! ****");
73
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr plain_array() { EIGEN_MAKE_STACK_ALLOCATION_ASSERT(Size * sizeof(T)) }
80
74
  #endif
75
+ };
81
76
 
82
- template <typename T, int Size, int MatrixOrArrayOptions>
83
- struct plain_array<T, Size, MatrixOrArrayOptions, 8>
84
- {
85
- EIGEN_ALIGN_TO_BOUNDARY(8) T array[Size];
77
+ template <typename T, int Size, int Options, int Alignment>
78
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr void swap_plain_array(plain_array<T, Size, Options, Alignment>& a,
79
+ plain_array<T, Size, Options, Alignment>& b,
80
+ Index a_size, Index b_size) {
81
+ Index common_size = numext::mini(a_size, b_size);
82
+ std::swap_ranges(a.array, a.array + common_size, b.array);
83
+ if (a_size > b_size)
84
+ smart_copy(a.array + common_size, a.array + a_size, b.array + common_size);
85
+ else if (b_size > a_size)
86
+ smart_copy(b.array + common_size, b.array + b_size, a.array + common_size);
87
+ }
86
88
 
87
- EIGEN_DEVICE_FUNC
88
- plain_array()
89
- {
90
- EIGEN_MAKE_UNALIGNED_ARRAY_ASSERT(7);
91
- check_static_allocation_size<T,Size>();
92
- }
89
+ template <typename T, int Size, int Rows, int Cols, int Options>
90
+ class DenseStorage_impl {
91
+ plain_array<T, Size, Options> m_data;
93
92
 
94
- EIGEN_DEVICE_FUNC
95
- plain_array(constructor_without_unaligned_array_assert)
96
- {
97
- check_static_allocation_size<T,Size>();
93
+ public:
94
+ #ifndef EIGEN_DENSE_STORAGE_CTOR_PLUGIN
95
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr DenseStorage_impl() = default;
96
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr DenseStorage_impl(const DenseStorage_impl&) = default;
97
+ #else
98
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr DenseStorage_impl() {
99
+ EIGEN_INTERNAL_DENSE_STORAGE_CTOR_PLUGIN(Index size = Size)
98
100
  }
99
- };
100
-
101
- template <typename T, int Size, int MatrixOrArrayOptions>
102
- struct plain_array<T, Size, MatrixOrArrayOptions, 16>
103
- {
104
- EIGEN_ALIGN_TO_BOUNDARY(16) T array[Size];
105
-
106
- EIGEN_DEVICE_FUNC
107
- plain_array()
108
- {
109
- EIGEN_MAKE_UNALIGNED_ARRAY_ASSERT(15);
110
- check_static_allocation_size<T,Size>();
101
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr DenseStorage_impl(const DenseStorage_impl& other) {
102
+ EIGEN_INTERNAL_DENSE_STORAGE_CTOR_PLUGIN(Index size = Size)
103
+ smart_copy(other.m_data.array, other.m_data.array + Size, m_data.array);
111
104
  }
112
-
113
- EIGEN_DEVICE_FUNC
114
- plain_array(constructor_without_unaligned_array_assert)
115
- {
116
- check_static_allocation_size<T,Size>();
105
+ #endif
106
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr DenseStorage_impl(Index /*size*/, Index /*rows*/, Index /*cols*/) {}
107
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr DenseStorage_impl& operator=(const DenseStorage_impl&) = default;
108
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr void swap(DenseStorage_impl& other) {
109
+ numext::swap(m_data, other.m_data);
117
110
  }
111
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr void conservativeResize(Index /*size*/, Index /*rows*/,
112
+ Index /*cols*/) {}
113
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr void resize(Index /*size*/, Index /*rows*/, Index /*cols*/) {}
114
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr Index rows() const { return Rows; }
115
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr Index cols() const { return Cols; }
116
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr Index size() const { return Rows * Cols; }
117
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr T* data() { return m_data.array; }
118
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr const T* data() const { return m_data.array; }
118
119
  };
119
-
120
- template <typename T, int Size, int MatrixOrArrayOptions>
121
- struct plain_array<T, Size, MatrixOrArrayOptions, 32>
122
- {
123
- EIGEN_ALIGN_TO_BOUNDARY(32) T array[Size];
124
-
125
- EIGEN_DEVICE_FUNC
126
- plain_array()
127
- {
128
- EIGEN_MAKE_UNALIGNED_ARRAY_ASSERT(31);
129
- check_static_allocation_size<T,Size>();
120
+ template <typename T, int Size, int Cols, int Options>
121
+ class DenseStorage_impl<T, Size, Dynamic, Cols, Options> {
122
+ plain_array<T, Size, Options> m_data;
123
+ Index m_rows = 0;
124
+
125
+ public:
126
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr DenseStorage_impl() = default;
127
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr DenseStorage_impl(const DenseStorage_impl& other)
128
+ : m_rows(other.m_rows) {
129
+ EIGEN_INTERNAL_DENSE_STORAGE_CTOR_PLUGIN(Index size = other.size())
130
+ smart_copy(other.m_data.array, other.m_data.array + other.size(), m_data.array);
130
131
  }
131
-
132
- EIGEN_DEVICE_FUNC
133
- plain_array(constructor_without_unaligned_array_assert)
134
- {
135
- check_static_allocation_size<T,Size>();
132
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr DenseStorage_impl(Index size, Index rows, Index /*cols*/)
133
+ : m_rows(rows) {
134
+ EIGEN_INTERNAL_DENSE_STORAGE_CTOR_PLUGIN({})
135
+ EIGEN_UNUSED_VARIABLE(size)
136
136
  }
137
- };
138
-
139
- template <typename T, int Size, int MatrixOrArrayOptions>
140
- struct plain_array<T, Size, MatrixOrArrayOptions, 64>
141
- {
142
- EIGEN_ALIGN_TO_BOUNDARY(64) T array[Size];
143
-
144
- EIGEN_DEVICE_FUNC
145
- plain_array()
146
- {
147
- EIGEN_MAKE_UNALIGNED_ARRAY_ASSERT(63);
148
- check_static_allocation_size<T,Size>();
137
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr DenseStorage_impl& operator=(const DenseStorage_impl& other) {
138
+ smart_copy(other.m_data.array, other.m_data.array + other.size(), m_data.array);
139
+ m_rows = other.m_rows;
140
+ return *this;
149
141
  }
150
-
151
- EIGEN_DEVICE_FUNC
152
- plain_array(constructor_without_unaligned_array_assert)
153
- {
154
- check_static_allocation_size<T,Size>();
142
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr void swap(DenseStorage_impl& other) {
143
+ swap_plain_array(m_data, other.m_data, size(), other.size());
144
+ numext::swap(m_rows, other.m_rows);
145
+ }
146
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr void conservativeResize(Index /*size*/, Index rows, Index /*cols*/) {
147
+ m_rows = rows;
155
148
  }
149
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr void resize(Index /*size*/, Index rows, Index /*cols*/) {
150
+ m_rows = rows;
151
+ }
152
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr Index rows() const { return m_rows; }
153
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr Index cols() const { return Cols; }
154
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr Index size() const { return m_rows * Cols; }
155
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr T* data() { return m_data.array; }
156
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr const T* data() const { return m_data.array; }
156
157
  };
157
-
158
- template <typename T, int MatrixOrArrayOptions, int Alignment>
159
- struct plain_array<T, 0, MatrixOrArrayOptions, Alignment>
160
- {
161
- T array[1];
162
- EIGEN_DEVICE_FUNC plain_array() {}
163
- EIGEN_DEVICE_FUNC plain_array(constructor_without_unaligned_array_assert) {}
158
+ template <typename T, int Size, int Rows, int Options>
159
+ class DenseStorage_impl<T, Size, Rows, Dynamic, Options> {
160
+ plain_array<T, Size, Options> m_data;
161
+ Index m_cols = 0;
162
+
163
+ public:
164
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr DenseStorage_impl() = default;
165
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr DenseStorage_impl(const DenseStorage_impl& other)
166
+ : m_cols(other.m_cols) {
167
+ EIGEN_INTERNAL_DENSE_STORAGE_CTOR_PLUGIN(Index size = other.size())
168
+ smart_copy(other.m_data.array, other.m_data.array + other.size(), m_data.array);
169
+ }
170
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr DenseStorage_impl(Index size, Index /*rows*/, Index cols)
171
+ : m_cols(cols) {
172
+ EIGEN_INTERNAL_DENSE_STORAGE_CTOR_PLUGIN({})
173
+ EIGEN_UNUSED_VARIABLE(size)
174
+ }
175
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr DenseStorage_impl& operator=(const DenseStorage_impl& other) {
176
+ smart_copy(other.m_data.array, other.m_data.array + other.size(), m_data.array);
177
+ m_cols = other.m_cols;
178
+ return *this;
179
+ }
180
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr void swap(DenseStorage_impl& other) {
181
+ swap_plain_array(m_data, other.m_data, size(), other.size());
182
+ numext::swap(m_cols, other.m_cols);
183
+ }
184
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr void conservativeResize(Index /*size*/, Index /*rows*/, Index cols) {
185
+ m_cols = cols;
186
+ }
187
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr void resize(Index /*size*/, Index /*rows*/, Index cols) {
188
+ m_cols = cols;
189
+ }
190
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr Index rows() const { return Rows; }
191
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr Index cols() const { return m_cols; }
192
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr Index size() const { return Rows * m_cols; }
193
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr T* data() { return m_data.array; }
194
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr const T* data() const { return m_data.array; }
164
195
  };
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
- }
196
+ template <typename T, int Size, int Options>
197
+ class DenseStorage_impl<T, Size, Dynamic, Dynamic, Options> {
198
+ plain_array<T, Size, Options> m_data;
199
+ Index m_rows = 0;
200
+ Index m_cols = 0;
201
+
202
+ public:
203
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr DenseStorage_impl() = default;
204
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr DenseStorage_impl(const DenseStorage_impl& other)
205
+ : m_rows(other.m_rows), m_cols(other.m_cols) {
206
+ EIGEN_INTERNAL_DENSE_STORAGE_CTOR_PLUGIN(Index size = other.size())
207
+ smart_copy(other.m_data.array, other.m_data.array + other.size(), m_data.array);
208
+ }
209
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr DenseStorage_impl(Index size, Index rows, Index cols)
210
+ : m_rows(rows), m_cols(cols) {
211
+ EIGEN_INTERNAL_DENSE_STORAGE_CTOR_PLUGIN({})
212
+ EIGEN_UNUSED_VARIABLE(size)
213
+ }
214
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr DenseStorage_impl& operator=(const DenseStorage_impl& other) {
215
+ smart_copy(other.m_data.array, other.m_data.array + other.size(), m_data.array);
216
+ m_rows = other.m_rows;
217
+ m_cols = other.m_cols;
218
+ return *this;
187
219
  }
220
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr void swap(DenseStorage_impl& other) {
221
+ swap_plain_array(m_data, other.m_data, size(), other.size());
222
+ numext::swap(m_rows, other.m_rows);
223
+ numext::swap(m_cols, other.m_cols);
224
+ }
225
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr void conservativeResize(Index /*size*/, Index rows, Index cols) {
226
+ m_rows = rows;
227
+ m_cols = cols;
228
+ }
229
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr void resize(Index /*size*/, Index rows, Index cols) {
230
+ m_rows = rows;
231
+ m_cols = cols;
232
+ }
233
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr Index rows() const { return m_rows; }
234
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr Index cols() const { return m_cols; }
235
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr Index size() const { return m_rows * m_cols; }
236
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr T* data() { return m_data.array; }
237
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr const T* data() const { return m_data.array; }
188
238
  };
189
-
190
- } // end namespace internal
191
-
192
- /** \internal
193
- *
194
- * \class DenseStorage
195
- * \ingroup Core_Module
196
- *
197
- * \brief Stores the data of a matrix
198
- *
199
- * This class stores the data of fixed-size, dynamic-size or mixed matrices
200
- * in a way as compact as possible.
201
- *
202
- * \sa Matrix
203
- */
204
- template<typename T, int Size, int _Rows, int _Cols, int _Options> class DenseStorage;
205
-
206
- // purely fixed-size matrix
207
- template<typename T, int Size, int _Rows, int _Cols, int _Options> class DenseStorage
208
- {
209
- internal::plain_array<T,Size,_Options> m_data;
210
- public:
211
- EIGEN_DEVICE_FUNC DenseStorage() {
212
- EIGEN_INTERNAL_DENSE_STORAGE_CTOR_PLUGIN(Index size = Size)
213
- }
214
- EIGEN_DEVICE_FUNC
215
- explicit DenseStorage(internal::constructor_without_unaligned_array_assert)
216
- : m_data(internal::constructor_without_unaligned_array_assert()) {}
217
- #if !EIGEN_HAS_CXX11 || defined(EIGEN_DENSE_STORAGE_CTOR_PLUGIN)
218
- EIGEN_DEVICE_FUNC
219
- DenseStorage(const DenseStorage& other) : m_data(other.m_data) {
220
- EIGEN_INTERNAL_DENSE_STORAGE_CTOR_PLUGIN(Index size = Size)
221
- }
222
- #else
223
- EIGEN_DEVICE_FUNC DenseStorage(const DenseStorage&) = default;
224
- #endif
225
- #if !EIGEN_HAS_CXX11
226
- EIGEN_DEVICE_FUNC
227
- DenseStorage& operator=(const DenseStorage& other)
228
- {
229
- if (this != &other) m_data = other.m_data;
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
- {
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
252
- EIGEN_DEVICE_FUNC DenseStorage(Index size, Index rows, Index cols) {
253
- EIGEN_INTERNAL_DENSE_STORAGE_CTOR_PLUGIN({})
254
- eigen_internal_assert(size==rows*cols && rows==_Rows && cols==_Cols);
255
- EIGEN_UNUSED_VARIABLE(size);
256
- EIGEN_UNUSED_VARIABLE(rows);
257
- EIGEN_UNUSED_VARIABLE(cols);
258
- }
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;}
264
- EIGEN_DEVICE_FUNC void conservativeResize(Index,Index,Index) {}
265
- EIGEN_DEVICE_FUNC void resize(Index,Index,Index) {}
266
- EIGEN_DEVICE_FUNC const T *data() const { return m_data.array; }
267
- EIGEN_DEVICE_FUNC T *data() { return m_data.array; }
239
+ // null matrix variants
240
+ template <typename T, int Rows, int Cols, int Options>
241
+ class DenseStorage_impl<T, 0, Rows, Cols, Options> {
242
+ public:
243
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr DenseStorage_impl() = default;
244
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr DenseStorage_impl(const DenseStorage_impl&) = default;
245
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr DenseStorage_impl(Index /*size*/, Index /*rows*/, Index /*cols*/) {}
246
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr DenseStorage_impl& operator=(const DenseStorage_impl&) = default;
247
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr void swap(DenseStorage_impl&) {}
248
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr void conservativeResize(Index /*size*/, Index /*rows*/,
249
+ Index /*cols*/) {}
250
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr void resize(Index /*size*/, Index /*rows*/, Index /*cols*/) {}
251
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr Index rows() const { return Rows; }
252
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr Index cols() const { return Cols; }
253
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr Index size() const { return Rows * Cols; }
254
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr T* data() { return nullptr; }
255
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr const T* data() const { return nullptr; }
268
256
  };
269
-
270
- // null matrix
271
- template<typename T, int _Rows, int _Cols, int _Options> class DenseStorage<T, 0, _Rows, _Cols, _Options>
272
- {
273
- public:
274
- EIGEN_DEVICE_FUNC DenseStorage() {}
275
- EIGEN_DEVICE_FUNC explicit DenseStorage(internal::constructor_without_unaligned_array_assert) {}
276
- EIGEN_DEVICE_FUNC DenseStorage(const DenseStorage&) {}
277
- EIGEN_DEVICE_FUNC DenseStorage& operator=(const DenseStorage&) { return *this; }
278
- EIGEN_DEVICE_FUNC DenseStorage(Index,Index,Index) {}
279
- EIGEN_DEVICE_FUNC void swap(DenseStorage& ) {}
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;}
282
- EIGEN_DEVICE_FUNC void conservativeResize(Index,Index,Index) {}
283
- EIGEN_DEVICE_FUNC void resize(Index,Index,Index) {}
284
- EIGEN_DEVICE_FUNC const T *data() const { return 0; }
285
- EIGEN_DEVICE_FUNC T *data() { return 0; }
257
+ template <typename T, int Cols, int Options>
258
+ class DenseStorage_impl<T, 0, Dynamic, Cols, Options> {
259
+ Index m_rows = 0;
260
+
261
+ public:
262
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr DenseStorage_impl() = default;
263
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr DenseStorage_impl(const DenseStorage_impl&) = default;
264
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr DenseStorage_impl(Index /*size*/, Index rows, Index /*cols*/)
265
+ : m_rows(rows) {}
266
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr DenseStorage_impl& operator=(const DenseStorage_impl&) = default;
267
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr void swap(DenseStorage_impl& other) noexcept {
268
+ numext::swap(m_rows, other.m_rows);
269
+ }
270
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr void conservativeResize(Index /*size*/, Index rows, Index /*cols*/) {
271
+ m_rows = rows;
272
+ }
273
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr void resize(Index /*size*/, Index rows, Index /*cols*/) {
274
+ m_rows = rows;
275
+ }
276
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr Index rows() const { return m_rows; }
277
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr Index cols() const { return Cols; }
278
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr Index size() const { return m_rows * Cols; }
279
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr T* data() { return nullptr; }
280
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr const T* data() const { return nullptr; }
286
281
  };
287
-
288
- // more specializations for null matrices; these are necessary to resolve ambiguities
289
- template<typename T, int _Options> class DenseStorage<T, 0, Dynamic, Dynamic, _Options>
290
- : public DenseStorage<T, 0, 0, 0, _Options> { };
291
-
292
- template<typename T, int _Rows, int _Options> class DenseStorage<T, 0, _Rows, Dynamic, _Options>
293
- : public DenseStorage<T, 0, 0, 0, _Options> { };
294
-
295
- template<typename T, int _Cols, int _Options> class DenseStorage<T, 0, Dynamic, _Cols, _Options>
296
- : public DenseStorage<T, 0, 0, 0, _Options> { };
297
-
298
- // dynamic-size matrix with fixed-size storage
299
- template<typename T, int Size, int _Options> class DenseStorage<T, Size, Dynamic, Dynamic, _Options>
300
- {
301
- internal::plain_array<T,Size,_Options> m_data;
302
- Index m_rows;
303
- Index m_cols;
304
- public:
305
- EIGEN_DEVICE_FUNC DenseStorage() : m_rows(0), m_cols(0) {}
306
- EIGEN_DEVICE_FUNC explicit DenseStorage(internal::constructor_without_unaligned_array_assert)
307
- : m_data(internal::constructor_without_unaligned_array_assert()), m_rows(0), m_cols(0) {}
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
- {
315
- if (this != &other)
316
- {
317
- m_rows = other.m_rows;
318
- m_cols = other.m_cols;
319
- internal::plain_array_helper::copy(other.m_data, m_rows * m_cols, m_data);
320
- }
321
- return *this;
322
- }
323
- EIGEN_DEVICE_FUNC DenseStorage(Index, Index rows, Index cols) : m_rows(rows), m_cols(cols) {}
324
- EIGEN_DEVICE_FUNC void swap(DenseStorage& other)
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
- }
330
- EIGEN_DEVICE_FUNC Index rows() const {return m_rows;}
331
- EIGEN_DEVICE_FUNC Index cols() const {return m_cols;}
332
- EIGEN_DEVICE_FUNC void conservativeResize(Index, Index rows, Index cols) { m_rows = rows; m_cols = cols; }
333
- EIGEN_DEVICE_FUNC void resize(Index, Index rows, Index cols) { m_rows = rows; m_cols = cols; }
334
- EIGEN_DEVICE_FUNC const T *data() const { return m_data.array; }
335
- EIGEN_DEVICE_FUNC T *data() { return m_data.array; }
282
+ template <typename T, int Rows, int Options>
283
+ class DenseStorage_impl<T, 0, Rows, Dynamic, Options> {
284
+ Index m_cols = 0;
285
+
286
+ public:
287
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr DenseStorage_impl() = default;
288
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr DenseStorage_impl(const DenseStorage_impl&) = default;
289
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr DenseStorage_impl(Index /*size*/, Index /*rows*/, Index cols)
290
+ : m_cols(cols) {}
291
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr DenseStorage_impl& operator=(const DenseStorage_impl&) = default;
292
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr void swap(DenseStorage_impl& other) noexcept {
293
+ numext::swap(m_cols, other.m_cols);
294
+ }
295
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr void conservativeResize(Index /*size*/, Index /*rows*/, Index cols) {
296
+ m_cols = cols;
297
+ }
298
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr void resize(Index /*size*/, Index /*rows*/, Index cols) {
299
+ m_cols = cols;
300
+ }
301
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr Index rows() const { return Rows; }
302
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr Index cols() const { return m_cols; }
303
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr Index size() const { return Rows * m_cols; }
304
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr T* data() { return nullptr; }
305
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr const T* data() const { return nullptr; }
336
306
  };
337
-
338
- // dynamic-size matrix with fixed-size storage and fixed width
339
- template<typename T, int Size, int _Cols, int _Options> class DenseStorage<T, Size, Dynamic, _Cols, _Options>
340
- {
341
- internal::plain_array<T,Size,_Options> m_data;
342
- Index m_rows;
343
- public:
344
- EIGEN_DEVICE_FUNC DenseStorage() : m_rows(0) {}
345
- EIGEN_DEVICE_FUNC explicit DenseStorage(internal::constructor_without_unaligned_array_assert)
346
- : m_data(internal::constructor_without_unaligned_array_assert()), m_rows(0) {}
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)
354
- {
355
- if (this != &other)
356
- {
357
- m_rows = other.m_rows;
358
- internal::plain_array_helper::copy(other.m_data, m_rows * _Cols, m_data);
359
- }
360
- return *this;
361
- }
362
- EIGEN_DEVICE_FUNC DenseStorage(Index, Index rows, Index) : m_rows(rows) {}
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;}
370
- EIGEN_DEVICE_FUNC void conservativeResize(Index, Index rows, Index) { m_rows = rows; }
371
- EIGEN_DEVICE_FUNC void resize(Index, Index rows, Index) { m_rows = rows; }
372
- EIGEN_DEVICE_FUNC const T *data() const { return m_data.array; }
373
- EIGEN_DEVICE_FUNC T *data() { return m_data.array; }
307
+ template <typename T, int Options>
308
+ class DenseStorage_impl<T, 0, Dynamic, Dynamic, Options> {
309
+ Index m_rows = 0;
310
+ Index m_cols = 0;
311
+
312
+ public:
313
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr DenseStorage_impl() = default;
314
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr DenseStorage_impl(const DenseStorage_impl&) = default;
315
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr DenseStorage_impl(Index /*size*/, Index rows, Index cols)
316
+ : m_rows(rows), m_cols(cols) {}
317
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr DenseStorage_impl& operator=(const DenseStorage_impl&) = default;
318
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr void swap(DenseStorage_impl& other) noexcept {
319
+ numext::swap(m_rows, other.m_rows);
320
+ numext::swap(m_cols, other.m_cols);
321
+ }
322
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr void conservativeResize(Index /*size*/, Index rows, Index cols) {
323
+ m_rows = rows;
324
+ m_cols = cols;
325
+ }
326
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr void resize(Index /*size*/, Index rows, Index cols) {
327
+ m_rows = rows;
328
+ m_cols = cols;
329
+ }
330
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr Index rows() const { return m_rows; }
331
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr Index cols() const { return m_cols; }
332
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr Index size() const { return m_rows * m_cols; }
333
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr T* data() { return nullptr; }
334
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr const T* data() const { return nullptr; }
374
335
  };
375
-
376
- // dynamic-size matrix with fixed-size storage and fixed height
377
- template<typename T, int Size, int _Rows, int _Options> class DenseStorage<T, Size, _Rows, Dynamic, _Options>
378
- {
379
- internal::plain_array<T,Size,_Options> m_data;
380
- Index m_cols;
381
- public:
382
- EIGEN_DEVICE_FUNC DenseStorage() : m_cols(0) {}
383
- EIGEN_DEVICE_FUNC explicit DenseStorage(internal::constructor_without_unaligned_array_assert)
384
- : m_data(internal::constructor_without_unaligned_array_assert()), m_cols(0) {}
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
- }
390
- EIGEN_DEVICE_FUNC DenseStorage& operator=(const DenseStorage& other)
391
- {
392
- if (this != &other)
393
- {
394
- m_cols = other.m_cols;
395
- internal::plain_array_helper::copy(other.m_data, _Rows * m_cols, m_data);
396
- }
397
- return *this;
398
- }
399
- EIGEN_DEVICE_FUNC DenseStorage(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);
336
+ // fixed-size matrix with dynamic memory allocation not currently supported
337
+ template <typename T, int Rows, int Cols, int Options>
338
+ class DenseStorage_impl<T, Dynamic, Rows, Cols, Options> {};
339
+ // dynamic-sized variants
340
+ template <typename T, int Cols, int Options>
341
+ class DenseStorage_impl<T, Dynamic, Dynamic, Cols, Options> {
342
+ static constexpr bool Align = (Options & DontAlign) == 0;
343
+ T* m_data = nullptr;
344
+ Index m_rows = 0;
345
+
346
+ public:
347
+ static constexpr int Size = Dynamic;
348
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr DenseStorage_impl() = default;
349
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr DenseStorage_impl(const DenseStorage_impl& other)
350
+ : m_data(conditional_aligned_new_auto<T, Align>(other.size())), m_rows(other.m_rows) {
351
+ EIGEN_INTERNAL_DENSE_STORAGE_CTOR_PLUGIN(Index size = other.size())
352
+ smart_copy(other.m_data, other.m_data + other.size(), m_data);
353
+ }
354
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr DenseStorage_impl(Index size, Index rows, Index /*cols*/)
355
+ : m_data(conditional_aligned_new_auto<T, Align>(size)), m_rows(rows) {
356
+ EIGEN_INTERNAL_DENSE_STORAGE_CTOR_PLUGIN({})
357
+ }
358
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr DenseStorage_impl(DenseStorage_impl&& other) noexcept
359
+ : m_data(other.m_data), m_rows(other.m_rows) {
360
+ other.m_data = nullptr;
361
+ other.m_rows = 0;
362
+ }
363
+ EIGEN_DEVICE_FUNC ~DenseStorage_impl() { conditional_aligned_delete_auto<T, Align>(m_data, size()); }
364
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr DenseStorage_impl& operator=(const DenseStorage_impl& other) {
365
+ resize(other.size(), other.rows(), other.cols());
366
+ smart_copy(other.m_data, other.m_data + other.size(), m_data);
367
+ return *this;
368
+ }
369
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr DenseStorage_impl& operator=(DenseStorage_impl&& other) noexcept {
370
+ this->swap(other);
371
+ return *this;
372
+ }
373
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr void swap(DenseStorage_impl& other) noexcept {
374
+ numext::swap(m_data, other.m_data);
375
+ numext::swap(m_rows, other.m_rows);
376
+ }
377
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr void conservativeResize(Index size, Index rows, Index /*cols*/) {
378
+ m_data = conditional_aligned_realloc_new_auto<T, Align>(m_data, size, this->size());
379
+ m_rows = rows;
380
+ }
381
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr void resize(Index size, Index rows, Index /*cols*/) {
382
+ Index oldSize = this->size();
383
+ if (oldSize != size) {
384
+ conditional_aligned_delete_auto<T, Align>(m_data, oldSize);
385
+ m_data = conditional_aligned_new_auto<T, Align>(size);
386
+ EIGEN_INTERNAL_DENSE_STORAGE_CTOR_PLUGIN({})
403
387
  }
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; }
408
- EIGEN_DEVICE_FUNC const T *data() const { return m_data.array; }
409
- EIGEN_DEVICE_FUNC T *data() { return m_data.array; }
388
+ m_rows = rows;
389
+ }
390
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr Index rows() const { return m_rows; }
391
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr Index cols() const { return Cols; }
392
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr Index size() const { return m_rows * Cols; }
393
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr T* data() { return m_data; }
394
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr const T* data() const { return m_data; }
410
395
  };
411
-
412
- // purely dynamic matrix.
413
- template<typename T, int _Options> class DenseStorage<T, Dynamic, Dynamic, Dynamic, _Options>
414
- {
415
- T *m_data;
416
- Index m_rows;
417
- Index m_cols;
418
- public:
419
- EIGEN_DEVICE_FUNC DenseStorage() : m_data(0), m_rows(0), m_cols(0) {}
420
- EIGEN_DEVICE_FUNC explicit DenseStorage(internal::constructor_without_unaligned_array_assert)
421
- : m_data(0), m_rows(0), m_cols(0) {}
422
- EIGEN_DEVICE_FUNC DenseStorage(Index size, Index rows, Index cols)
423
- : m_data(internal::conditional_aligned_new_auto<T,(_Options&DontAlign)==0>(size)), m_rows(rows), m_cols(cols)
424
- {
396
+ template <typename T, int Rows, int Options>
397
+ class DenseStorage_impl<T, Dynamic, Rows, Dynamic, Options> {
398
+ static constexpr bool Align = (Options & DontAlign) == 0;
399
+ T* m_data = nullptr;
400
+ Index m_cols = 0;
401
+
402
+ public:
403
+ static constexpr int Size = Dynamic;
404
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr DenseStorage_impl() = default;
405
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr DenseStorage_impl(const DenseStorage_impl& other)
406
+ : m_data(conditional_aligned_new_auto<T, Align>(other.size())), m_cols(other.m_cols) {
407
+ EIGEN_INTERNAL_DENSE_STORAGE_CTOR_PLUGIN(Index size = other.size())
408
+ smart_copy(other.m_data, other.m_data + other.size(), m_data);
409
+ }
410
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr DenseStorage_impl(Index size, Index /*rows*/, Index cols)
411
+ : m_data(conditional_aligned_new_auto<T, Align>(size)), m_cols(cols) {
412
+ EIGEN_INTERNAL_DENSE_STORAGE_CTOR_PLUGIN({})
413
+ }
414
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr DenseStorage_impl(DenseStorage_impl&& other) noexcept
415
+ : m_data(other.m_data), m_cols(other.m_cols) {
416
+ other.m_data = nullptr;
417
+ other.m_cols = 0;
418
+ }
419
+ EIGEN_DEVICE_FUNC ~DenseStorage_impl() { conditional_aligned_delete_auto<T, Align>(m_data, size()); }
420
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr DenseStorage_impl& operator=(const DenseStorage_impl& other) {
421
+ resize(other.size(), other.rows(), other.cols());
422
+ smart_copy(other.m_data, other.m_data + other.size(), m_data);
423
+ return *this;
424
+ }
425
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr DenseStorage_impl& operator=(DenseStorage_impl&& other) noexcept {
426
+ this->swap(other);
427
+ return *this;
428
+ }
429
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr void swap(DenseStorage_impl& other) noexcept {
430
+ numext::swap(m_data, other.m_data);
431
+ numext::swap(m_cols, other.m_cols);
432
+ }
433
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr void conservativeResize(Index size, Index /*rows*/, Index cols) {
434
+ m_data = conditional_aligned_realloc_new_auto<T, Align>(m_data, size, this->size());
435
+ m_cols = cols;
436
+ }
437
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr void resize(Index size, Index /*rows*/, Index cols) {
438
+ Index oldSize = this->size();
439
+ if (oldSize != size) {
440
+ conditional_aligned_delete_auto<T, Align>(m_data, oldSize);
441
+ m_data = conditional_aligned_new_auto<T, Align>(size);
425
442
  EIGEN_INTERNAL_DENSE_STORAGE_CTOR_PLUGIN({})
426
- eigen_internal_assert(size==rows*cols && rows>=0 && cols >=0);
427
- }
428
- EIGEN_DEVICE_FUNC DenseStorage(const DenseStorage& other)
429
- : m_data(internal::conditional_aligned_new_auto<T,(_Options&DontAlign)==0>(other.m_rows*other.m_cols))
430
- , m_rows(other.m_rows)
431
- , m_cols(other.m_cols)
432
- {
433
- EIGEN_INTERNAL_DENSE_STORAGE_CTOR_PLUGIN(Index size = m_rows*m_cols)
434
- internal::smart_copy(other.m_data, other.m_data+other.m_rows*other.m_cols, m_data);
435
- }
436
- EIGEN_DEVICE_FUNC DenseStorage& operator=(const DenseStorage& other)
437
- {
438
- if (this != &other)
439
- {
440
- DenseStorage tmp(other);
441
- this->swap(tmp);
442
- }
443
- return *this;
444
- }
445
- #if EIGEN_HAS_RVALUE_REFERENCES
446
- EIGEN_DEVICE_FUNC
447
- DenseStorage(DenseStorage&& other) EIGEN_NOEXCEPT
448
- : m_data(std::move(other.m_data))
449
- , m_rows(std::move(other.m_rows))
450
- , m_cols(std::move(other.m_cols))
451
- {
452
- other.m_data = nullptr;
453
- other.m_rows = 0;
454
- other.m_cols = 0;
455
443
  }
456
- EIGEN_DEVICE_FUNC
457
- DenseStorage& operator=(DenseStorage&& other) EIGEN_NOEXCEPT
458
- {
459
- numext::swap(m_data, other.m_data);
460
- numext::swap(m_rows, other.m_rows);
461
- numext::swap(m_cols, other.m_cols);
462
- return *this;
463
- }
464
- #endif
465
- EIGEN_DEVICE_FUNC ~DenseStorage() { internal::conditional_aligned_delete_auto<T,(_Options&DontAlign)==0>(m_data, m_rows*m_cols); }
466
- EIGEN_DEVICE_FUNC void swap(DenseStorage& other)
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;}
474
- void conservativeResize(Index size, Index rows, Index cols)
475
- {
476
- m_data = internal::conditional_aligned_realloc_new_auto<T,(_Options&DontAlign)==0>(m_data, size, m_rows*m_cols);
477
- m_rows = rows;
478
- m_cols = cols;
479
- }
480
- EIGEN_DEVICE_FUNC void resize(Index size, Index rows, Index cols)
481
- {
482
- if(size != m_rows*m_cols)
483
- {
484
- internal::conditional_aligned_delete_auto<T,(_Options&DontAlign)==0>(m_data, m_rows*m_cols);
485
- if (size>0) // >0 and not simply !=0 to let the compiler knows that size cannot be negative
486
- m_data = internal::conditional_aligned_new_auto<T,(_Options&DontAlign)==0>(size);
487
- else
488
- m_data = 0;
489
- EIGEN_INTERNAL_DENSE_STORAGE_CTOR_PLUGIN({})
490
- }
491
- m_rows = rows;
492
- m_cols = cols;
493
- }
494
- EIGEN_DEVICE_FUNC const T *data() const { return m_data; }
495
- EIGEN_DEVICE_FUNC T *data() { return m_data; }
444
+ m_cols = cols;
445
+ }
446
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr Index rows() const { return Rows; }
447
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr Index cols() const { return m_cols; }
448
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr Index size() const { return Rows * m_cols; }
449
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr T* data() { return m_data; }
450
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr const T* data() const { return m_data; }
496
451
  };
497
-
498
- // matrix with dynamic width and fixed height (so that matrix has dynamic size).
499
- template<typename T, int _Rows, int _Options> class DenseStorage<T, Dynamic, _Rows, Dynamic, _Options>
500
- {
501
- T *m_data;
502
- Index m_cols;
503
- public:
504
- EIGEN_DEVICE_FUNC DenseStorage() : m_data(0), m_cols(0) {}
505
- explicit DenseStorage(internal::constructor_without_unaligned_array_assert) : m_data(0), m_cols(0) {}
506
- EIGEN_DEVICE_FUNC DenseStorage(Index size, Index rows, Index cols) : m_data(internal::conditional_aligned_new_auto<T,(_Options&DontAlign)==0>(size)), m_cols(cols)
507
- {
452
+ template <typename T, int Options>
453
+ class DenseStorage_impl<T, Dynamic, Dynamic, Dynamic, Options> {
454
+ static constexpr bool Align = (Options & DontAlign) == 0;
455
+ T* m_data = nullptr;
456
+ Index m_rows = 0;
457
+ Index m_cols = 0;
458
+
459
+ public:
460
+ static constexpr int Size = Dynamic;
461
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr DenseStorage_impl() = default;
462
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr DenseStorage_impl(const DenseStorage_impl& other)
463
+ : m_data(conditional_aligned_new_auto<T, Align>(other.size())), m_rows(other.m_rows), m_cols(other.m_cols) {
464
+ EIGEN_INTERNAL_DENSE_STORAGE_CTOR_PLUGIN(Index size = other.size())
465
+ smart_copy(other.m_data, other.m_data + other.size(), m_data);
466
+ }
467
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr DenseStorage_impl(Index size, Index rows, Index cols)
468
+ : m_data(conditional_aligned_new_auto<T, Align>(size)), m_rows(rows), m_cols(cols) {
469
+ EIGEN_INTERNAL_DENSE_STORAGE_CTOR_PLUGIN({})
470
+ }
471
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr DenseStorage_impl(DenseStorage_impl&& other) noexcept
472
+ : m_data(other.m_data), m_rows(other.m_rows), m_cols(other.m_cols) {
473
+ other.m_data = nullptr;
474
+ other.m_rows = 0;
475
+ other.m_cols = 0;
476
+ }
477
+ EIGEN_DEVICE_FUNC ~DenseStorage_impl() { conditional_aligned_delete_auto<T, Align>(m_data, size()); }
478
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr DenseStorage_impl& operator=(const DenseStorage_impl& other) {
479
+ resize(other.size(), other.rows(), other.cols());
480
+ smart_copy(other.m_data, other.m_data + other.size(), m_data);
481
+ return *this;
482
+ }
483
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr DenseStorage_impl& operator=(DenseStorage_impl&& other) noexcept {
484
+ this->swap(other);
485
+ return *this;
486
+ }
487
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr void swap(DenseStorage_impl& other) noexcept {
488
+ numext::swap(m_data, other.m_data);
489
+ numext::swap(m_rows, other.m_rows);
490
+ numext::swap(m_cols, other.m_cols);
491
+ }
492
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr void conservativeResize(Index size, Index rows, Index cols) {
493
+ m_data = conditional_aligned_realloc_new_auto<T, Align>(m_data, size, this->size());
494
+ m_rows = rows;
495
+ m_cols = cols;
496
+ }
497
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr void resize(Index size, Index rows, Index cols) {
498
+ Index oldSize = this->size();
499
+ if (oldSize != size) {
500
+ conditional_aligned_delete_auto<T, Align>(m_data, oldSize);
501
+ m_data = conditional_aligned_new_auto<T, Align>(size);
508
502
  EIGEN_INTERNAL_DENSE_STORAGE_CTOR_PLUGIN({})
509
- eigen_internal_assert(size==rows*cols && rows==_Rows && cols >=0);
510
- EIGEN_UNUSED_VARIABLE(rows);
511
- }
512
- EIGEN_DEVICE_FUNC DenseStorage(const DenseStorage& other)
513
- : m_data(internal::conditional_aligned_new_auto<T,(_Options&DontAlign)==0>(_Rows*other.m_cols))
514
- , m_cols(other.m_cols)
515
- {
516
- EIGEN_INTERNAL_DENSE_STORAGE_CTOR_PLUGIN(Index size = m_cols*_Rows)
517
- internal::smart_copy(other.m_data, other.m_data+_Rows*m_cols, m_data);
518
503
  }
519
- EIGEN_DEVICE_FUNC DenseStorage& operator=(const DenseStorage& other)
520
- {
521
- if (this != &other)
522
- {
523
- DenseStorage tmp(other);
524
- this->swap(tmp);
525
- }
526
- return *this;
527
- }
528
- #if EIGEN_HAS_RVALUE_REFERENCES
529
- EIGEN_DEVICE_FUNC
530
- DenseStorage(DenseStorage&& other) EIGEN_NOEXCEPT
531
- : m_data(std::move(other.m_data))
532
- , m_cols(std::move(other.m_cols))
533
- {
534
- other.m_data = nullptr;
535
- other.m_cols = 0;
536
- }
537
- EIGEN_DEVICE_FUNC
538
- DenseStorage& operator=(DenseStorage&& other) EIGEN_NOEXCEPT
539
- {
540
- numext::swap(m_data, other.m_data);
541
- numext::swap(m_cols, other.m_cols);
542
- return *this;
543
- }
544
- #endif
545
- EIGEN_DEVICE_FUNC ~DenseStorage() { internal::conditional_aligned_delete_auto<T,(_Options&DontAlign)==0>(m_data, _Rows*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;}
552
- EIGEN_DEVICE_FUNC void conservativeResize(Index size, Index, Index cols)
553
- {
554
- m_data = internal::conditional_aligned_realloc_new_auto<T,(_Options&DontAlign)==0>(m_data, size, _Rows*m_cols);
555
- m_cols = cols;
556
- }
557
- EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void resize(Index size, Index, Index cols)
558
- {
559
- if(size != _Rows*m_cols)
560
- {
561
- internal::conditional_aligned_delete_auto<T,(_Options&DontAlign)==0>(m_data, _Rows*m_cols);
562
- if (size>0) // >0 and not simply !=0 to let the compiler knows that size cannot be negative
563
- m_data = internal::conditional_aligned_new_auto<T,(_Options&DontAlign)==0>(size);
564
- else
565
- m_data = 0;
566
- EIGEN_INTERNAL_DENSE_STORAGE_CTOR_PLUGIN({})
567
- }
568
- m_cols = cols;
569
- }
570
- EIGEN_DEVICE_FUNC const T *data() const { return m_data; }
571
- EIGEN_DEVICE_FUNC T *data() { return m_data; }
504
+ m_rows = rows;
505
+ m_cols = cols;
506
+ }
507
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr Index rows() const { return m_rows; }
508
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr Index cols() const { return m_cols; }
509
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr Index size() const { return m_rows * m_cols; }
510
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr T* data() { return m_data; }
511
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr const T* data() const { return m_data; }
512
+ };
513
+ template <typename T, int Size, int Rows, int Cols>
514
+ struct use_default_move {
515
+ static constexpr bool DynamicObject = Size == Dynamic;
516
+ static constexpr bool TrivialObject =
517
+ (!NumTraits<T>::RequireInitialization) && (Rows >= 0) && (Cols >= 0) && (Size == Rows * Cols);
518
+ static constexpr bool value = DynamicObject || TrivialObject;
572
519
  };
520
+ } // end namespace internal
573
521
 
574
- // matrix with dynamic height and fixed width (so that matrix has dynamic size).
575
- template<typename T, int _Cols, int _Options> class DenseStorage<T, Dynamic, Dynamic, _Cols, _Options>
576
- {
577
- T *m_data;
578
- Index m_rows;
579
- public:
580
- EIGEN_DEVICE_FUNC DenseStorage() : m_data(0), m_rows(0) {}
581
- explicit DenseStorage(internal::constructor_without_unaligned_array_assert) : m_data(0), m_rows(0) {}
582
- EIGEN_DEVICE_FUNC DenseStorage(Index size, Index rows, Index cols) : m_data(internal::conditional_aligned_new_auto<T,(_Options&DontAlign)==0>(size)), m_rows(rows)
583
- {
584
- EIGEN_INTERNAL_DENSE_STORAGE_CTOR_PLUGIN({})
585
- eigen_internal_assert(size==rows*cols && rows>=0 && cols == _Cols);
586
- EIGEN_UNUSED_VARIABLE(cols);
587
- }
588
- EIGEN_DEVICE_FUNC DenseStorage(const DenseStorage& other)
589
- : m_data(internal::conditional_aligned_new_auto<T,(_Options&DontAlign)==0>(other.m_rows*_Cols))
590
- , m_rows(other.m_rows)
591
- {
592
- EIGEN_INTERNAL_DENSE_STORAGE_CTOR_PLUGIN(Index size = m_rows*_Cols)
593
- internal::smart_copy(other.m_data, other.m_data+other.m_rows*_Cols, m_data);
594
- }
595
- EIGEN_DEVICE_FUNC DenseStorage& operator=(const DenseStorage& other)
596
- {
597
- if (this != &other)
598
- {
599
- DenseStorage tmp(other);
600
- this->swap(tmp);
601
- }
602
- return *this;
603
- }
604
- #if EIGEN_HAS_RVALUE_REFERENCES
605
- EIGEN_DEVICE_FUNC
606
- DenseStorage(DenseStorage&& other) EIGEN_NOEXCEPT
607
- : m_data(std::move(other.m_data))
608
- , m_rows(std::move(other.m_rows))
609
- {
610
- other.m_data = nullptr;
611
- other.m_rows = 0;
612
- }
613
- EIGEN_DEVICE_FUNC
614
- DenseStorage& operator=(DenseStorage&& other) EIGEN_NOEXCEPT
615
- {
616
- numext::swap(m_data, other.m_data);
617
- numext::swap(m_rows, other.m_rows);
618
- return *this;
619
- }
620
- #endif
621
- EIGEN_DEVICE_FUNC ~DenseStorage() { internal::conditional_aligned_delete_auto<T,(_Options&DontAlign)==0>(m_data, _Cols*m_rows); }
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;}
628
- void conservativeResize(Index size, Index rows, Index)
629
- {
630
- m_data = internal::conditional_aligned_realloc_new_auto<T,(_Options&DontAlign)==0>(m_data, size, m_rows*_Cols);
631
- m_rows = rows;
632
- }
633
- EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE void resize(Index size, Index rows, Index)
634
- {
635
- if(size != m_rows*_Cols)
636
- {
637
- internal::conditional_aligned_delete_auto<T,(_Options&DontAlign)==0>(m_data, _Cols*m_rows);
638
- if (size>0) // >0 and not simply !=0 to let the compiler knows that size cannot be negative
639
- m_data = internal::conditional_aligned_new_auto<T,(_Options&DontAlign)==0>(size);
640
- else
641
- m_data = 0;
642
- EIGEN_INTERNAL_DENSE_STORAGE_CTOR_PLUGIN({})
643
- }
644
- m_rows = rows;
645
- }
646
- EIGEN_DEVICE_FUNC const T *data() const { return m_data; }
647
- EIGEN_DEVICE_FUNC T *data() { return m_data; }
522
+ /** \internal
523
+ *
524
+ * \class DenseStorage_impl
525
+ * \ingroup Core_Module
526
+ *
527
+ * \brief Stores the data of a matrix
528
+ *
529
+ * This class stores the data of fixed-size, dynamic-size or mixed matrices
530
+ * in a way as compact as possible.
531
+ *
532
+ * \sa Matrix
533
+ */
534
+ template <typename T, int Size, int Rows, int Cols, int Options,
535
+ bool Trivial = internal::use_default_move<T, Size, Rows, Cols>::value>
536
+ class DenseStorage : public internal::DenseStorage_impl<T, Size, Rows, Cols, Options> {
537
+ using Base = internal::DenseStorage_impl<T, Size, Rows, Cols, Options>;
538
+
539
+ public:
540
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr DenseStorage() = default;
541
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr DenseStorage(const DenseStorage&) = default;
542
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr DenseStorage(Index size, Index rows, Index cols)
543
+ : Base(size, rows, cols) {}
544
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr DenseStorage& operator=(const DenseStorage&) = default;
545
+ // if DenseStorage meets the requirements of use_default_move, then use the move construction and move assignment
546
+ // operation defined in DenseStorage_impl, or the compiler-generated version if none is defined
547
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr DenseStorage(DenseStorage&&) = default;
548
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr DenseStorage& operator=(DenseStorage&&) = default;
549
+ };
550
+ template <typename T, int Size, int Rows, int Cols, int Options>
551
+ class DenseStorage<T, Size, Rows, Cols, Options, false>
552
+ : public internal::DenseStorage_impl<T, Size, Rows, Cols, Options> {
553
+ using Base = internal::DenseStorage_impl<T, Size, Rows, Cols, Options>;
554
+
555
+ public:
556
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr DenseStorage() = default;
557
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr DenseStorage(const DenseStorage&) = default;
558
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr DenseStorage(Index size, Index rows, Index cols)
559
+ : Base(size, rows, cols) {}
560
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr DenseStorage& operator=(const DenseStorage&) = default;
561
+ // if DenseStorage does not meet the requirements of use_default_move, then defer to the copy construction and copy
562
+ // assignment behavior
563
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr DenseStorage(DenseStorage&& other)
564
+ : DenseStorage(static_cast<const DenseStorage&>(other)) {}
565
+ EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE constexpr DenseStorage& operator=(DenseStorage&& other) {
566
+ *this = other;
567
+ return *this;
568
+ }
648
569
  };
649
570
 
650
- } // end namespace Eigen
571
+ } // end namespace Eigen
651
572
 
652
- #endif // EIGEN_MATRIX_H
573
+ #endif // EIGEN_MATRIX_H