@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.
- package/README.md +1 -1
- package/eigen/COPYING.APACHE +203 -0
- package/eigen/COPYING.BSD +1 -1
- package/eigen/COPYING.MINPACK +51 -52
- package/eigen/Eigen/Cholesky +0 -1
- package/eigen/Eigen/Core +108 -266
- package/eigen/Eigen/Eigenvalues +0 -1
- package/eigen/Eigen/Geometry +3 -6
- package/eigen/Eigen/Householder +0 -1
- package/eigen/Eigen/Jacobi +0 -1
- package/eigen/Eigen/KLUSupport +41 -0
- package/eigen/Eigen/LU +2 -5
- package/eigen/Eigen/OrderingMethods +0 -3
- package/eigen/Eigen/PaStiXSupport +1 -0
- package/eigen/Eigen/PardisoSupport +0 -0
- package/eigen/Eigen/QR +0 -1
- package/eigen/Eigen/QtAlignedMalloc +0 -1
- package/eigen/Eigen/SVD +0 -1
- package/eigen/Eigen/Sparse +0 -2
- package/eigen/Eigen/SparseCholesky +0 -8
- package/eigen/Eigen/SparseLU +4 -0
- package/eigen/Eigen/src/Cholesky/LDLT.h +42 -27
- package/eigen/Eigen/src/Cholesky/LLT.h +39 -23
- package/eigen/Eigen/src/CholmodSupport/CholmodSupport.h +90 -47
- package/eigen/Eigen/src/Core/ArithmeticSequence.h +413 -0
- package/eigen/Eigen/src/Core/Array.h +99 -11
- package/eigen/Eigen/src/Core/ArrayBase.h +1 -1
- package/eigen/Eigen/src/Core/ArrayWrapper.h +21 -21
- package/eigen/Eigen/src/Core/Assign.h +1 -1
- package/eigen/Eigen/src/Core/AssignEvaluator.h +125 -50
- package/eigen/Eigen/src/Core/Assign_MKL.h +10 -10
- package/eigen/Eigen/src/Core/BandMatrix.h +16 -16
- package/eigen/Eigen/src/Core/Block.h +56 -60
- package/eigen/Eigen/src/Core/BooleanRedux.h +29 -31
- package/eigen/Eigen/src/Core/CommaInitializer.h +7 -3
- package/eigen/Eigen/src/Core/CoreEvaluators.h +325 -272
- package/eigen/Eigen/src/Core/CoreIterators.h +5 -0
- package/eigen/Eigen/src/Core/CwiseBinaryOp.h +21 -22
- package/eigen/Eigen/src/Core/CwiseNullaryOp.h +153 -18
- package/eigen/Eigen/src/Core/CwiseUnaryOp.h +6 -6
- package/eigen/Eigen/src/Core/CwiseUnaryView.h +12 -10
- package/eigen/Eigen/src/Core/DenseBase.h +128 -39
- package/eigen/Eigen/src/Core/DenseCoeffsBase.h +25 -21
- package/eigen/Eigen/src/Core/DenseStorage.h +150 -68
- package/eigen/Eigen/src/Core/Diagonal.h +21 -23
- package/eigen/Eigen/src/Core/DiagonalMatrix.h +50 -2
- package/eigen/Eigen/src/Core/DiagonalProduct.h +1 -1
- package/eigen/Eigen/src/Core/Dot.h +10 -10
- package/eigen/Eigen/src/Core/EigenBase.h +10 -9
- package/eigen/Eigen/src/Core/ForceAlignedAccess.h +8 -4
- package/eigen/Eigen/src/Core/Fuzzy.h +3 -3
- package/eigen/Eigen/src/Core/GeneralProduct.h +20 -10
- package/eigen/Eigen/src/Core/GenericPacketMath.h +597 -147
- package/eigen/Eigen/src/Core/GlobalFunctions.h +40 -33
- package/eigen/Eigen/src/Core/IO.h +40 -7
- package/eigen/Eigen/src/Core/IndexedView.h +237 -0
- package/eigen/Eigen/src/Core/Inverse.h +9 -10
- package/eigen/Eigen/src/Core/Map.h +7 -7
- package/eigen/Eigen/src/Core/MapBase.h +5 -3
- package/eigen/Eigen/src/Core/MathFunctions.h +756 -120
- package/eigen/Eigen/src/Core/MathFunctionsImpl.h +118 -19
- package/eigen/Eigen/src/Core/Matrix.h +131 -25
- package/eigen/Eigen/src/Core/MatrixBase.h +19 -2
- package/eigen/Eigen/src/Core/NestByValue.h +25 -50
- package/eigen/Eigen/src/Core/NoAlias.h +4 -3
- package/eigen/Eigen/src/Core/NumTraits.h +107 -20
- package/eigen/Eigen/src/Core/PartialReduxEvaluator.h +232 -0
- package/eigen/Eigen/src/Core/PermutationMatrix.h +3 -3
- package/eigen/Eigen/src/Core/PlainObjectBase.h +145 -54
- package/eigen/Eigen/src/Core/Product.h +30 -25
- package/eigen/Eigen/src/Core/ProductEvaluators.h +183 -142
- package/eigen/Eigen/src/Core/Random.h +37 -1
- package/eigen/Eigen/src/Core/Redux.h +180 -170
- package/eigen/Eigen/src/Core/Ref.h +118 -21
- package/eigen/Eigen/src/Core/Replicate.h +8 -8
- package/eigen/Eigen/src/Core/Reshaped.h +454 -0
- package/eigen/Eigen/src/Core/ReturnByValue.h +7 -5
- package/eigen/Eigen/src/Core/Reverse.h +18 -12
- package/eigen/Eigen/src/Core/Select.h +8 -6
- package/eigen/Eigen/src/Core/SelfAdjointView.h +33 -20
- package/eigen/Eigen/src/Core/Solve.h +14 -14
- package/eigen/Eigen/src/Core/SolveTriangular.h +13 -13
- package/eigen/Eigen/src/Core/SolverBase.h +41 -3
- package/eigen/Eigen/src/Core/StableNorm.h +100 -70
- package/eigen/Eigen/src/Core/StlIterators.h +463 -0
- package/eigen/Eigen/src/Core/Stride.h +9 -4
- package/eigen/Eigen/src/Core/Swap.h +5 -4
- package/eigen/Eigen/src/Core/Transpose.h +86 -27
- package/eigen/Eigen/src/Core/Transpositions.h +26 -8
- package/eigen/Eigen/src/Core/TriangularMatrix.h +88 -72
- package/eigen/Eigen/src/Core/VectorBlock.h +5 -5
- package/eigen/Eigen/src/Core/VectorwiseOp.h +159 -70
- package/eigen/Eigen/src/Core/Visitor.h +137 -29
- package/eigen/Eigen/src/Core/arch/AVX/Complex.h +50 -129
- package/eigen/Eigen/src/Core/arch/AVX/MathFunctions.h +126 -337
- package/eigen/Eigen/src/Core/arch/AVX/PacketMath.h +1092 -155
- package/eigen/Eigen/src/Core/arch/AVX/TypeCasting.h +65 -1
- package/eigen/Eigen/src/Core/arch/AVX512/Complex.h +422 -0
- package/eigen/Eigen/src/Core/arch/AVX512/MathFunctions.h +186 -213
- package/eigen/Eigen/src/Core/arch/AVX512/PacketMath.h +1250 -252
- package/eigen/Eigen/src/Core/arch/AVX512/TypeCasting.h +89 -0
- package/eigen/Eigen/src/Core/arch/AltiVec/Complex.h +152 -165
- package/eigen/Eigen/src/Core/arch/AltiVec/MathFunctions.h +19 -251
- package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProduct.h +2937 -0
- package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductCommon.h +221 -0
- package/eigen/Eigen/src/Core/arch/AltiVec/MatrixProductMMA.h +629 -0
- package/eigen/Eigen/src/Core/arch/AltiVec/PacketMath.h +2042 -392
- package/eigen/Eigen/src/Core/arch/CUDA/Complex.h +235 -80
- package/eigen/Eigen/src/Core/arch/Default/BFloat16.h +700 -0
- package/eigen/Eigen/src/Core/arch/Default/ConjHelper.h +102 -14
- package/eigen/Eigen/src/Core/arch/Default/GenericPacketMathFunctions.h +1649 -0
- package/eigen/Eigen/src/Core/arch/Default/GenericPacketMathFunctionsFwd.h +110 -0
- package/eigen/Eigen/src/Core/arch/Default/Half.h +942 -0
- package/eigen/Eigen/src/Core/arch/Default/Settings.h +1 -1
- package/eigen/Eigen/src/Core/arch/Default/TypeCasting.h +120 -0
- package/eigen/Eigen/src/Core/arch/{CUDA → GPU}/MathFunctions.h +16 -4
- package/eigen/Eigen/src/Core/arch/GPU/PacketMath.h +1685 -0
- package/eigen/Eigen/src/Core/arch/GPU/TypeCasting.h +80 -0
- package/eigen/Eigen/src/Core/arch/HIP/hcc/math_constants.h +23 -0
- package/eigen/Eigen/src/Core/arch/MSA/Complex.h +648 -0
- package/eigen/Eigen/src/Core/arch/MSA/MathFunctions.h +387 -0
- package/eigen/Eigen/src/Core/arch/MSA/PacketMath.h +1233 -0
- package/eigen/Eigen/src/Core/arch/NEON/Complex.h +313 -219
- package/eigen/Eigen/src/Core/arch/NEON/GeneralBlockPanelKernel.h +183 -0
- package/eigen/Eigen/src/Core/arch/NEON/MathFunctions.h +54 -70
- package/eigen/Eigen/src/Core/arch/NEON/PacketMath.h +4376 -549
- package/eigen/Eigen/src/Core/arch/NEON/TypeCasting.h +1419 -0
- package/eigen/Eigen/src/Core/arch/SSE/Complex.h +59 -179
- package/eigen/Eigen/src/Core/arch/SSE/MathFunctions.h +65 -428
- package/eigen/Eigen/src/Core/arch/SSE/PacketMath.h +893 -283
- package/eigen/Eigen/src/Core/arch/SSE/TypeCasting.h +65 -0
- package/eigen/Eigen/src/Core/arch/SVE/MathFunctions.h +44 -0
- package/eigen/Eigen/src/Core/arch/SVE/PacketMath.h +752 -0
- package/eigen/Eigen/src/Core/arch/SVE/TypeCasting.h +49 -0
- package/eigen/Eigen/src/Core/arch/SYCL/InteropHeaders.h +232 -0
- package/eigen/Eigen/src/Core/arch/SYCL/MathFunctions.h +301 -0
- package/eigen/Eigen/src/Core/arch/SYCL/PacketMath.h +670 -0
- package/eigen/Eigen/src/Core/arch/SYCL/SyclMemoryModel.h +694 -0
- package/eigen/Eigen/src/Core/arch/SYCL/TypeCasting.h +85 -0
- package/eigen/Eigen/src/Core/arch/ZVector/Complex.h +212 -183
- package/eigen/Eigen/src/Core/arch/ZVector/MathFunctions.h +101 -5
- package/eigen/Eigen/src/Core/arch/ZVector/PacketMath.h +510 -395
- package/eigen/Eigen/src/Core/functors/AssignmentFunctors.h +11 -2
- package/eigen/Eigen/src/Core/functors/BinaryFunctors.h +112 -46
- package/eigen/Eigen/src/Core/functors/NullaryFunctors.h +31 -30
- package/eigen/Eigen/src/Core/functors/StlFunctors.h +32 -2
- package/eigen/Eigen/src/Core/functors/UnaryFunctors.h +354 -15
- package/eigen/Eigen/src/Core/products/GeneralBlockPanelKernel.h +1073 -585
- package/eigen/Eigen/src/Core/products/GeneralMatrixMatrix.h +29 -7
- package/eigen/Eigen/src/Core/products/GeneralMatrixMatrixTriangular.h +4 -4
- package/eigen/Eigen/src/Core/products/GeneralMatrixMatrixTriangular_BLAS.h +1 -1
- package/eigen/Eigen/src/Core/products/GeneralMatrixVector.h +382 -483
- package/eigen/Eigen/src/Core/products/Parallelizer.h +23 -9
- package/eigen/Eigen/src/Core/products/SelfadjointMatrixMatrix.h +23 -6
- package/eigen/Eigen/src/Core/products/SelfadjointMatrixVector.h +8 -6
- package/eigen/Eigen/src/Core/products/SelfadjointProduct.h +2 -2
- package/eigen/Eigen/src/Core/products/SelfadjointRank2Update.h +5 -4
- package/eigen/Eigen/src/Core/products/TriangularMatrixMatrix.h +3 -3
- package/eigen/Eigen/src/Core/products/TriangularSolverMatrix.h +5 -3
- package/eigen/Eigen/src/Core/products/TriangularSolverVector.h +13 -10
- package/eigen/Eigen/src/Core/util/BlasUtil.h +208 -124
- package/eigen/Eigen/src/Core/util/ConfigureVectorization.h +512 -0
- package/eigen/Eigen/src/Core/util/Constants.h +25 -9
- package/eigen/Eigen/src/Core/util/DisableStupidWarnings.h +14 -2
- package/eigen/Eigen/src/Core/util/ForwardDeclarations.h +28 -4
- package/eigen/Eigen/src/Core/util/IndexedViewHelper.h +186 -0
- package/eigen/Eigen/src/Core/util/IntegralConstant.h +272 -0
- package/eigen/Eigen/src/Core/util/MKL_support.h +8 -1
- package/eigen/Eigen/src/Core/util/Macros.h +661 -250
- package/eigen/Eigen/src/Core/util/Memory.h +222 -52
- package/eigen/Eigen/src/Core/util/Meta.h +349 -105
- package/eigen/Eigen/src/Core/util/ReshapedHelper.h +51 -0
- package/eigen/Eigen/src/Core/util/StaticAssert.h +8 -5
- package/eigen/Eigen/src/Core/util/SymbolicIndex.h +293 -0
- package/eigen/Eigen/src/Core/util/XprHelper.h +48 -30
- package/eigen/Eigen/src/Eigenvalues/ComplexEigenSolver.h +1 -1
- package/eigen/Eigen/src/Eigenvalues/ComplexSchur.h +1 -1
- package/eigen/Eigen/src/Eigenvalues/EigenSolver.h +2 -2
- package/eigen/Eigen/src/Eigenvalues/GeneralizedSelfAdjointEigenSolver.h +1 -1
- package/eigen/Eigen/src/Eigenvalues/HessenbergDecomposition.h +2 -2
- package/eigen/Eigen/src/Eigenvalues/MatrixBaseEigenvalues.h +2 -2
- package/eigen/Eigen/src/Eigenvalues/RealQZ.h +9 -6
- package/eigen/Eigen/src/Eigenvalues/RealSchur.h +10 -5
- package/eigen/Eigen/src/Eigenvalues/SelfAdjointEigenSolver.h +75 -42
- package/eigen/Eigen/src/Eigenvalues/Tridiagonalization.h +20 -15
- package/eigen/Eigen/src/Geometry/AlignedBox.h +99 -5
- package/eigen/Eigen/src/Geometry/AngleAxis.h +4 -4
- package/eigen/Eigen/src/Geometry/EulerAngles.h +3 -3
- package/eigen/Eigen/src/Geometry/Homogeneous.h +15 -11
- package/eigen/Eigen/src/Geometry/Hyperplane.h +1 -1
- package/eigen/Eigen/src/Geometry/OrthoMethods.h +3 -2
- package/eigen/Eigen/src/Geometry/ParametrizedLine.h +39 -2
- package/eigen/Eigen/src/Geometry/Quaternion.h +52 -14
- package/eigen/Eigen/src/Geometry/Rotation2D.h +3 -3
- package/eigen/Eigen/src/Geometry/Scaling.h +22 -4
- package/eigen/Eigen/src/Geometry/Transform.h +86 -65
- package/eigen/Eigen/src/Geometry/Translation.h +6 -6
- package/eigen/Eigen/src/Geometry/arch/Geometry_SIMD.h +168 -0
- package/eigen/Eigen/src/Householder/BlockHouseholder.h +9 -2
- package/eigen/Eigen/src/Householder/Householder.h +8 -4
- package/eigen/Eigen/src/Householder/HouseholderSequence.h +123 -48
- package/eigen/Eigen/src/IterativeLinearSolvers/BasicPreconditioners.h +15 -15
- package/eigen/Eigen/src/IterativeLinearSolvers/BiCGSTAB.h +7 -23
- package/eigen/Eigen/src/IterativeLinearSolvers/ConjugateGradient.h +5 -22
- package/eigen/Eigen/src/IterativeLinearSolvers/IncompleteCholesky.h +41 -47
- package/eigen/Eigen/src/IterativeLinearSolvers/IncompleteLUT.h +51 -60
- package/eigen/Eigen/src/IterativeLinearSolvers/IterativeSolverBase.h +70 -20
- package/eigen/Eigen/src/IterativeLinearSolvers/LeastSquareConjugateGradient.h +2 -20
- package/eigen/Eigen/src/IterativeLinearSolvers/SolveWithGuess.h +11 -9
- package/eigen/Eigen/src/Jacobi/Jacobi.h +31 -10
- package/eigen/Eigen/src/KLUSupport/KLUSupport.h +358 -0
- package/eigen/Eigen/src/LU/Determinant.h +35 -19
- package/eigen/Eigen/src/LU/FullPivLU.h +29 -43
- package/eigen/Eigen/src/LU/InverseImpl.h +25 -8
- package/eigen/Eigen/src/LU/PartialPivLU.h +67 -57
- package/eigen/Eigen/src/LU/arch/InverseSize4.h +351 -0
- package/eigen/Eigen/src/OrderingMethods/Amd.h +7 -17
- package/eigen/Eigen/src/OrderingMethods/Eigen_Colamd.h +297 -277
- package/eigen/Eigen/src/OrderingMethods/Ordering.h +6 -10
- package/eigen/Eigen/src/PaStiXSupport/PaStiXSupport.h +1 -1
- package/eigen/Eigen/src/PardisoSupport/PardisoSupport.h +10 -9
- package/eigen/Eigen/src/QR/ColPivHouseholderQR.h +41 -20
- package/eigen/Eigen/src/QR/CompleteOrthogonalDecomposition.h +100 -27
- package/eigen/Eigen/src/QR/FullPivHouseholderQR.h +59 -22
- package/eigen/Eigen/src/QR/HouseholderQR.h +48 -23
- package/eigen/Eigen/src/SPQRSupport/SuiteSparseQRSupport.h +25 -3
- package/eigen/Eigen/src/SVD/BDCSVD.h +137 -48
- package/eigen/Eigen/src/SVD/JacobiSVD.h +22 -14
- package/eigen/Eigen/src/SVD/SVDBase.h +82 -21
- package/eigen/Eigen/src/SVD/UpperBidiagonalization.h +3 -3
- package/eigen/Eigen/src/SparseCholesky/SimplicialCholesky.h +16 -8
- package/eigen/Eigen/src/SparseCholesky/SimplicialCholesky_impl.h +11 -36
- package/eigen/Eigen/src/SparseCore/CompressedStorage.h +16 -0
- package/eigen/Eigen/src/SparseCore/ConservativeSparseSparseProduct.h +6 -6
- package/eigen/Eigen/src/SparseCore/SparseAssign.h +81 -27
- package/eigen/Eigen/src/SparseCore/SparseBlock.h +25 -57
- package/eigen/Eigen/src/SparseCore/SparseCompressedBase.h +40 -11
- package/eigen/Eigen/src/SparseCore/SparseCwiseBinaryOp.h +11 -15
- package/eigen/Eigen/src/SparseCore/SparseCwiseUnaryOp.h +2 -2
- package/eigen/Eigen/src/SparseCore/SparseDenseProduct.h +30 -8
- package/eigen/Eigen/src/SparseCore/SparseMatrix.h +124 -10
- package/eigen/Eigen/src/SparseCore/SparseMatrixBase.h +5 -12
- package/eigen/Eigen/src/SparseCore/SparseProduct.h +13 -1
- package/eigen/Eigen/src/SparseCore/SparseRef.h +7 -7
- package/eigen/Eigen/src/SparseCore/SparseSelfAdjointView.h +3 -0
- package/eigen/Eigen/src/SparseCore/SparseUtil.h +8 -0
- package/eigen/Eigen/src/SparseCore/SparseVector.h +1 -1
- package/eigen/Eigen/src/SparseLU/SparseLU.h +160 -10
- package/eigen/Eigen/src/SparseLU/SparseLU_Memory.h +1 -1
- package/eigen/Eigen/src/SparseLU/SparseLU_SupernodalMatrix.h +76 -2
- package/eigen/Eigen/src/SparseLU/SparseLU_column_dfs.h +2 -2
- package/eigen/Eigen/src/SparseLU/SparseLU_gemm_kernel.h +1 -1
- package/eigen/Eigen/src/SparseLU/SparseLU_panel_bmod.h +1 -1
- package/eigen/Eigen/src/SparseQR/SparseQR.h +19 -6
- package/eigen/Eigen/src/StlSupport/StdDeque.h +2 -14
- package/eigen/Eigen/src/StlSupport/StdList.h +2 -2
- package/eigen/Eigen/src/StlSupport/StdVector.h +2 -2
- package/eigen/Eigen/src/SuperLUSupport/SuperLUSupport.h +6 -8
- package/eigen/Eigen/src/UmfPackSupport/UmfPackSupport.h +175 -39
- package/eigen/Eigen/src/misc/lapacke.h +5 -4
- package/eigen/Eigen/src/plugins/ArrayCwiseBinaryOps.h +27 -1
- package/eigen/Eigen/src/plugins/ArrayCwiseUnaryOps.h +155 -11
- package/eigen/Eigen/src/plugins/BlockMethods.h +626 -242
- package/eigen/Eigen/src/plugins/CommonCwiseUnaryOps.h +14 -0
- package/eigen/Eigen/src/plugins/IndexedViewMethods.h +262 -0
- package/eigen/Eigen/src/plugins/MatrixCwiseBinaryOps.h +4 -4
- package/eigen/Eigen/src/plugins/MatrixCwiseUnaryOps.h +10 -0
- package/eigen/Eigen/src/plugins/ReshapedMethods.h +149 -0
- package/eigen/README.md +2 -0
- package/lib/LibEigen.d.ts +4 -0
- package/lib/LibEigen.js +14 -0
- package/lib/index.d.ts +1 -1
- package/lib/index.js +7 -3
- package/package.json +2 -10
- package/eigen/Eigen/CMakeLists.txt +0 -19
- package/eigen/Eigen/src/Core/arch/CUDA/Half.h +0 -675
- package/eigen/Eigen/src/Core/arch/CUDA/PacketMath.h +0 -333
- package/eigen/Eigen/src/Core/arch/CUDA/PacketMathHalf.h +0 -1124
- package/eigen/Eigen/src/Core/arch/CUDA/TypeCasting.h +0 -212
- package/eigen/Eigen/src/Geometry/arch/Geometry_SSE.h +0 -161
- package/eigen/Eigen/src/LU/arch/Inverse_SSE.h +0 -338
- package/lib/eigen.d.ts +0 -2
- package/lib/eigen.js +0 -15
|
@@ -13,10 +13,10 @@
|
|
|
13
13
|
|
|
14
14
|
#if defined(EIGEN_INITIALIZE_MATRICES_BY_ZERO)
|
|
15
15
|
# define EIGEN_INITIALIZE_COEFFS
|
|
16
|
-
# define EIGEN_INITIALIZE_COEFFS_IF_THAT_OPTION_IS_ENABLED for(
|
|
16
|
+
# define EIGEN_INITIALIZE_COEFFS_IF_THAT_OPTION_IS_ENABLED for(Index i=0;i<base().size();++i) coeffRef(i)=Scalar(0);
|
|
17
17
|
#elif defined(EIGEN_INITIALIZE_MATRICES_BY_NAN)
|
|
18
18
|
# define EIGEN_INITIALIZE_COEFFS
|
|
19
|
-
# define EIGEN_INITIALIZE_COEFFS_IF_THAT_OPTION_IS_ENABLED for(
|
|
19
|
+
# define EIGEN_INITIALIZE_COEFFS_IF_THAT_OPTION_IS_ENABLED for(Index i=0;i<base().size();++i) coeffRef(i)=std::numeric_limits<Scalar>::quiet_NaN();
|
|
20
20
|
#else
|
|
21
21
|
# undef EIGEN_INITIALIZE_COEFFS
|
|
22
22
|
# define EIGEN_INITIALIZE_COEFFS_IF_THAT_OPTION_IS_ENABLED
|
|
@@ -104,7 +104,7 @@ class PlainObjectBase : public internal::dense_xpr_base<Derived>::type
|
|
|
104
104
|
|
|
105
105
|
typedef typename internal::traits<Derived>::StorageKind StorageKind;
|
|
106
106
|
typedef typename internal::traits<Derived>::Scalar Scalar;
|
|
107
|
-
|
|
107
|
+
|
|
108
108
|
typedef typename internal::packet_traits<Scalar>::type PacketScalar;
|
|
109
109
|
typedef typename NumTraits<Scalar>::Real RealScalar;
|
|
110
110
|
typedef Derived DenseType;
|
|
@@ -118,16 +118,8 @@ class PlainObjectBase : public internal::dense_xpr_base<Derived>::type
|
|
|
118
118
|
using Base::IsVectorAtCompileTime;
|
|
119
119
|
using Base::Flags;
|
|
120
120
|
|
|
121
|
-
template<typename PlainObjectType, int MapOptions, typename StrideType> friend class Eigen::Map;
|
|
122
|
-
friend class Eigen::Map<Derived, Unaligned>;
|
|
123
121
|
typedef Eigen::Map<Derived, Unaligned> MapType;
|
|
124
|
-
friend class Eigen::Map<const Derived, Unaligned>;
|
|
125
122
|
typedef const Eigen::Map<const Derived, Unaligned> ConstMapType;
|
|
126
|
-
#if EIGEN_MAX_ALIGN_BYTES>0
|
|
127
|
-
// for EIGEN_MAX_ALIGN_BYTES==0, AlignedMax==Unaligned, and many compilers generate warnings for friend-ing a class twice.
|
|
128
|
-
friend class Eigen::Map<Derived, AlignedMax>;
|
|
129
|
-
friend class Eigen::Map<const Derived, AlignedMax>;
|
|
130
|
-
#endif
|
|
131
123
|
typedef Eigen::Map<Derived, AlignedMax> AlignedMapType;
|
|
132
124
|
typedef const Eigen::Map<const Derived, AlignedMax> ConstAlignedMapType;
|
|
133
125
|
template<typename StrideType> struct StridedMapType { typedef Eigen::Map<Derived, Unaligned, StrideType> type; };
|
|
@@ -147,10 +139,10 @@ class PlainObjectBase : public internal::dense_xpr_base<Derived>::type
|
|
|
147
139
|
EIGEN_DEVICE_FUNC
|
|
148
140
|
const Base& base() const { return *static_cast<const Base*>(this); }
|
|
149
141
|
|
|
150
|
-
EIGEN_DEVICE_FUNC
|
|
151
|
-
|
|
152
|
-
EIGEN_DEVICE_FUNC
|
|
153
|
-
|
|
142
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE EIGEN_CONSTEXPR
|
|
143
|
+
Index rows() const EIGEN_NOEXCEPT { return m_storage.rows(); }
|
|
144
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE EIGEN_CONSTEXPR
|
|
145
|
+
Index cols() const EIGEN_NOEXCEPT { return m_storage.cols(); }
|
|
154
146
|
|
|
155
147
|
/** This is an overloaded version of DenseCoeffsBase<Derived,ReadOnlyAccessors>::coeff(Index,Index) const
|
|
156
148
|
* provided to by-pass the creation of an evaluator of the expression, thus saving compilation efforts.
|
|
@@ -358,7 +350,7 @@ class PlainObjectBase : public internal::dense_xpr_base<Derived>::type
|
|
|
358
350
|
* remain row-vectors and vectors remain vectors.
|
|
359
351
|
*/
|
|
360
352
|
template<typename OtherDerived>
|
|
361
|
-
EIGEN_DEVICE_FUNC
|
|
353
|
+
EIGEN_DEVICE_FUNC
|
|
362
354
|
EIGEN_STRONG_INLINE void resizeLike(const EigenBase<OtherDerived>& _other)
|
|
363
355
|
{
|
|
364
356
|
const OtherDerived& other = _other.derived();
|
|
@@ -383,7 +375,7 @@ class PlainObjectBase : public internal::dense_xpr_base<Derived>::type
|
|
|
383
375
|
* of rows and/or of columns, you can use conservativeResize(NoChange_t, Index) or
|
|
384
376
|
* conservativeResize(Index, NoChange_t).
|
|
385
377
|
*
|
|
386
|
-
* Matrices are resized relative to the top-left element. In case values need to be
|
|
378
|
+
* Matrices are resized relative to the top-left element. In case values need to be
|
|
387
379
|
* appended to the matrix they will be uninitialized.
|
|
388
380
|
*/
|
|
389
381
|
EIGEN_DEVICE_FUNC
|
|
@@ -440,7 +432,7 @@ class PlainObjectBase : public internal::dense_xpr_base<Derived>::type
|
|
|
440
432
|
* of rows and/or of columns, you can use conservativeResize(NoChange_t, Index) or
|
|
441
433
|
* conservativeResize(Index, NoChange_t).
|
|
442
434
|
*
|
|
443
|
-
* Matrices are resized relative to the top-left element. In case values need to be
|
|
435
|
+
* Matrices are resized relative to the top-left element. In case values need to be
|
|
444
436
|
* appended to the matrix they will copied from \c other.
|
|
445
437
|
*/
|
|
446
438
|
template<typename OtherDerived>
|
|
@@ -508,8 +500,8 @@ class PlainObjectBase : public internal::dense_xpr_base<Derived>::type
|
|
|
508
500
|
EIGEN_DEVICE_FUNC
|
|
509
501
|
PlainObjectBase& operator=(PlainObjectBase&& other) EIGEN_NOEXCEPT
|
|
510
502
|
{
|
|
511
|
-
|
|
512
|
-
|
|
503
|
+
_check_template_params();
|
|
504
|
+
m_storage = std::move(other.m_storage);
|
|
513
505
|
return *this;
|
|
514
506
|
}
|
|
515
507
|
#endif
|
|
@@ -526,6 +518,71 @@ class PlainObjectBase : public internal::dense_xpr_base<Derived>::type
|
|
|
526
518
|
// EIGEN_INITIALIZE_COEFFS_IF_THAT_OPTION_IS_ENABLED
|
|
527
519
|
}
|
|
528
520
|
|
|
521
|
+
#if EIGEN_HAS_CXX11
|
|
522
|
+
/** \brief Construct a row of column vector with fixed size from an arbitrary number of coefficients. \cpp11
|
|
523
|
+
*
|
|
524
|
+
* \only_for_vectors
|
|
525
|
+
*
|
|
526
|
+
* This constructor is for 1D array or vectors with more than 4 coefficients.
|
|
527
|
+
* There exists C++98 analogue constructors for fixed-size array/vector having 1, 2, 3, or 4 coefficients.
|
|
528
|
+
*
|
|
529
|
+
* \warning To construct a column (resp. row) vector of fixed length, the number of values passed to this
|
|
530
|
+
* constructor must match the the fixed number of rows (resp. columns) of \c *this.
|
|
531
|
+
*/
|
|
532
|
+
template <typename... ArgTypes>
|
|
533
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
|
534
|
+
PlainObjectBase(const Scalar& a0, const Scalar& a1, const Scalar& a2, const Scalar& a3, const ArgTypes&... args)
|
|
535
|
+
: m_storage()
|
|
536
|
+
{
|
|
537
|
+
_check_template_params();
|
|
538
|
+
EIGEN_STATIC_ASSERT_VECTOR_SPECIFIC_SIZE(PlainObjectBase, sizeof...(args) + 4);
|
|
539
|
+
m_storage.data()[0] = a0;
|
|
540
|
+
m_storage.data()[1] = a1;
|
|
541
|
+
m_storage.data()[2] = a2;
|
|
542
|
+
m_storage.data()[3] = a3;
|
|
543
|
+
Index i = 4;
|
|
544
|
+
auto x = {(m_storage.data()[i++] = args, 0)...};
|
|
545
|
+
static_cast<void>(x);
|
|
546
|
+
}
|
|
547
|
+
|
|
548
|
+
/** \brief Constructs a Matrix or Array and initializes it by elements given by an initializer list of initializer
|
|
549
|
+
* lists \cpp11
|
|
550
|
+
*/
|
|
551
|
+
EIGEN_DEVICE_FUNC
|
|
552
|
+
explicit EIGEN_STRONG_INLINE PlainObjectBase(const std::initializer_list<std::initializer_list<Scalar>>& list)
|
|
553
|
+
: m_storage()
|
|
554
|
+
{
|
|
555
|
+
_check_template_params();
|
|
556
|
+
|
|
557
|
+
size_t list_size = 0;
|
|
558
|
+
if (list.begin() != list.end()) {
|
|
559
|
+
list_size = list.begin()->size();
|
|
560
|
+
}
|
|
561
|
+
|
|
562
|
+
// This is to allow syntax like VectorXi {{1, 2, 3, 4}}
|
|
563
|
+
if (ColsAtCompileTime == 1 && list.size() == 1) {
|
|
564
|
+
eigen_assert(list_size == static_cast<size_t>(RowsAtCompileTime) || RowsAtCompileTime == Dynamic);
|
|
565
|
+
resize(list_size, ColsAtCompileTime);
|
|
566
|
+
std::copy(list.begin()->begin(), list.begin()->end(), m_storage.data());
|
|
567
|
+
} else {
|
|
568
|
+
eigen_assert(list.size() == static_cast<size_t>(RowsAtCompileTime) || RowsAtCompileTime == Dynamic);
|
|
569
|
+
eigen_assert(list_size == static_cast<size_t>(ColsAtCompileTime) || ColsAtCompileTime == Dynamic);
|
|
570
|
+
resize(list.size(), list_size);
|
|
571
|
+
|
|
572
|
+
Index row_index = 0;
|
|
573
|
+
for (const std::initializer_list<Scalar>& row : list) {
|
|
574
|
+
eigen_assert(list_size == row.size());
|
|
575
|
+
Index col_index = 0;
|
|
576
|
+
for (const Scalar& e : row) {
|
|
577
|
+
coeffRef(row_index, col_index) = e;
|
|
578
|
+
++col_index;
|
|
579
|
+
}
|
|
580
|
+
++row_index;
|
|
581
|
+
}
|
|
582
|
+
}
|
|
583
|
+
}
|
|
584
|
+
#endif // end EIGEN_HAS_CXX11
|
|
585
|
+
|
|
529
586
|
/** \sa PlainObjectBase::operator=(const EigenBase<OtherDerived>&) */
|
|
530
587
|
template<typename OtherDerived>
|
|
531
588
|
EIGEN_DEVICE_FUNC
|
|
@@ -564,7 +621,7 @@ class PlainObjectBase : public internal::dense_xpr_base<Derived>::type
|
|
|
564
621
|
* \copydetails DenseBase::operator=(const EigenBase<OtherDerived> &other)
|
|
565
622
|
*/
|
|
566
623
|
template<typename OtherDerived>
|
|
567
|
-
EIGEN_DEVICE_FUNC
|
|
624
|
+
EIGEN_DEVICE_FUNC
|
|
568
625
|
EIGEN_STRONG_INLINE Derived& operator=(const EigenBase<OtherDerived> &other)
|
|
569
626
|
{
|
|
570
627
|
_resize_to_match(other);
|
|
@@ -652,18 +709,26 @@ class PlainObjectBase : public internal::dense_xpr_base<Derived>::type
|
|
|
652
709
|
using Base::setConstant;
|
|
653
710
|
EIGEN_DEVICE_FUNC Derived& setConstant(Index size, const Scalar& val);
|
|
654
711
|
EIGEN_DEVICE_FUNC Derived& setConstant(Index rows, Index cols, const Scalar& val);
|
|
712
|
+
EIGEN_DEVICE_FUNC Derived& setConstant(NoChange_t, Index cols, const Scalar& val);
|
|
713
|
+
EIGEN_DEVICE_FUNC Derived& setConstant(Index rows, NoChange_t, const Scalar& val);
|
|
655
714
|
|
|
656
715
|
using Base::setZero;
|
|
657
716
|
EIGEN_DEVICE_FUNC Derived& setZero(Index size);
|
|
658
717
|
EIGEN_DEVICE_FUNC Derived& setZero(Index rows, Index cols);
|
|
718
|
+
EIGEN_DEVICE_FUNC Derived& setZero(NoChange_t, Index cols);
|
|
719
|
+
EIGEN_DEVICE_FUNC Derived& setZero(Index rows, NoChange_t);
|
|
659
720
|
|
|
660
721
|
using Base::setOnes;
|
|
661
722
|
EIGEN_DEVICE_FUNC Derived& setOnes(Index size);
|
|
662
723
|
EIGEN_DEVICE_FUNC Derived& setOnes(Index rows, Index cols);
|
|
724
|
+
EIGEN_DEVICE_FUNC Derived& setOnes(NoChange_t, Index cols);
|
|
725
|
+
EIGEN_DEVICE_FUNC Derived& setOnes(Index rows, NoChange_t);
|
|
663
726
|
|
|
664
727
|
using Base::setRandom;
|
|
665
728
|
Derived& setRandom(Index size);
|
|
666
729
|
Derived& setRandom(Index rows, Index cols);
|
|
730
|
+
Derived& setRandom(NoChange_t, Index cols);
|
|
731
|
+
Derived& setRandom(Index rows, NoChange_t);
|
|
667
732
|
|
|
668
733
|
#ifdef EIGEN_PLAINOBJECTBASE_PLUGIN
|
|
669
734
|
#include EIGEN_PLAINOBJECTBASE_PLUGIN
|
|
@@ -678,7 +743,7 @@ class PlainObjectBase : public internal::dense_xpr_base<Derived>::type
|
|
|
678
743
|
* remain row-vectors and vectors remain vectors.
|
|
679
744
|
*/
|
|
680
745
|
template<typename OtherDerived>
|
|
681
|
-
EIGEN_DEVICE_FUNC
|
|
746
|
+
EIGEN_DEVICE_FUNC
|
|
682
747
|
EIGEN_STRONG_INLINE void _resize_to_match(const EigenBase<OtherDerived>& other)
|
|
683
748
|
{
|
|
684
749
|
#ifdef EIGEN_NO_AUTOMATIC_RESIZING
|
|
@@ -705,10 +770,10 @@ class PlainObjectBase : public internal::dense_xpr_base<Derived>::type
|
|
|
705
770
|
*
|
|
706
771
|
* \internal
|
|
707
772
|
*/
|
|
708
|
-
// aliasing is dealt once in
|
|
773
|
+
// aliasing is dealt once in internal::call_assignment
|
|
709
774
|
// so at this stage we have to assume aliasing... and resising has to be done later.
|
|
710
775
|
template<typename OtherDerived>
|
|
711
|
-
EIGEN_DEVICE_FUNC
|
|
776
|
+
EIGEN_DEVICE_FUNC
|
|
712
777
|
EIGEN_STRONG_INLINE Derived& _set(const DenseBase<OtherDerived>& other)
|
|
713
778
|
{
|
|
714
779
|
internal::call_assignment(this->derived(), other.derived());
|
|
@@ -721,7 +786,7 @@ class PlainObjectBase : public internal::dense_xpr_base<Derived>::type
|
|
|
721
786
|
* \sa operator=(const MatrixBase<OtherDerived>&), _set()
|
|
722
787
|
*/
|
|
723
788
|
template<typename OtherDerived>
|
|
724
|
-
EIGEN_DEVICE_FUNC
|
|
789
|
+
EIGEN_DEVICE_FUNC
|
|
725
790
|
EIGEN_STRONG_INLINE Derived& _set_noalias(const DenseBase<OtherDerived>& other)
|
|
726
791
|
{
|
|
727
792
|
// I don't think we need this resize call since the lazyAssign will anyways resize
|
|
@@ -744,18 +809,18 @@ class PlainObjectBase : public internal::dense_xpr_base<Derived>::type
|
|
|
744
809
|
FLOATING_POINT_ARGUMENT_PASSED__INTEGER_WAS_EXPECTED)
|
|
745
810
|
resize(rows,cols);
|
|
746
811
|
}
|
|
747
|
-
|
|
812
|
+
|
|
748
813
|
template<typename T0, typename T1>
|
|
749
|
-
EIGEN_DEVICE_FUNC
|
|
814
|
+
EIGEN_DEVICE_FUNC
|
|
750
815
|
EIGEN_STRONG_INLINE void _init2(const T0& val0, const T1& val1, typename internal::enable_if<Base::SizeAtCompileTime==2,T0>::type* = 0)
|
|
751
816
|
{
|
|
752
817
|
EIGEN_STATIC_ASSERT_VECTOR_SPECIFIC_SIZE(PlainObjectBase, 2)
|
|
753
818
|
m_storage.data()[0] = Scalar(val0);
|
|
754
819
|
m_storage.data()[1] = Scalar(val1);
|
|
755
820
|
}
|
|
756
|
-
|
|
821
|
+
|
|
757
822
|
template<typename T0, typename T1>
|
|
758
|
-
EIGEN_DEVICE_FUNC
|
|
823
|
+
EIGEN_DEVICE_FUNC
|
|
759
824
|
EIGEN_STRONG_INLINE void _init2(const Index& val0, const Index& val1,
|
|
760
825
|
typename internal::enable_if< (!internal::is_same<Index,Scalar>::value)
|
|
761
826
|
&& (internal::is_same<T0,Index>::value)
|
|
@@ -781,8 +846,8 @@ class PlainObjectBase : public internal::dense_xpr_base<Derived>::type
|
|
|
781
846
|
FLOATING_POINT_ARGUMENT_PASSED__INTEGER_WAS_EXPECTED)
|
|
782
847
|
resize(size);
|
|
783
848
|
}
|
|
784
|
-
|
|
785
|
-
// We have a 1x1 matrix/array => the argument is interpreted as the value of the unique coefficient (case where scalar type can be
|
|
849
|
+
|
|
850
|
+
// We have a 1x1 matrix/array => the argument is interpreted as the value of the unique coefficient (case where scalar type can be implicitly converted)
|
|
786
851
|
template<typename T>
|
|
787
852
|
EIGEN_DEVICE_FUNC
|
|
788
853
|
EIGEN_STRONG_INLINE void _init1(const Scalar& val0, typename internal::enable_if<Base::SizeAtCompileTime==1 && internal::is_convertible<T, Scalar>::value,T>::type* = 0)
|
|
@@ -790,7 +855,7 @@ class PlainObjectBase : public internal::dense_xpr_base<Derived>::type
|
|
|
790
855
|
EIGEN_STATIC_ASSERT_VECTOR_SPECIFIC_SIZE(PlainObjectBase, 1)
|
|
791
856
|
m_storage.data()[0] = val0;
|
|
792
857
|
}
|
|
793
|
-
|
|
858
|
+
|
|
794
859
|
// We have a 1x1 matrix/array => the argument is interpreted as the value of the unique coefficient (case where scalar type match the index type)
|
|
795
860
|
template<typename T>
|
|
796
861
|
EIGEN_DEVICE_FUNC
|
|
@@ -846,7 +911,7 @@ class PlainObjectBase : public internal::dense_xpr_base<Derived>::type
|
|
|
846
911
|
{
|
|
847
912
|
this->derived() = r;
|
|
848
913
|
}
|
|
849
|
-
|
|
914
|
+
|
|
850
915
|
// For fixed-size Array<Scalar,...>
|
|
851
916
|
template<typename T>
|
|
852
917
|
EIGEN_DEVICE_FUNC
|
|
@@ -858,7 +923,7 @@ class PlainObjectBase : public internal::dense_xpr_base<Derived>::type
|
|
|
858
923
|
{
|
|
859
924
|
Base::setConstant(val0);
|
|
860
925
|
}
|
|
861
|
-
|
|
926
|
+
|
|
862
927
|
// For fixed-size Array<Index,...>
|
|
863
928
|
template<typename T>
|
|
864
929
|
EIGEN_DEVICE_FUNC
|
|
@@ -872,38 +937,38 @@ class PlainObjectBase : public internal::dense_xpr_base<Derived>::type
|
|
|
872
937
|
{
|
|
873
938
|
Base::setConstant(val0);
|
|
874
939
|
}
|
|
875
|
-
|
|
940
|
+
|
|
876
941
|
template<typename MatrixTypeA, typename MatrixTypeB, bool SwapPointers>
|
|
877
942
|
friend struct internal::matrix_swap_impl;
|
|
878
943
|
|
|
879
944
|
public:
|
|
880
|
-
|
|
945
|
+
|
|
881
946
|
#ifndef EIGEN_PARSED_BY_DOXYGEN
|
|
882
947
|
/** \internal
|
|
883
948
|
* \brief Override DenseBase::swap() since for dynamic-sized matrices
|
|
884
949
|
* of same type it is enough to swap the data pointers.
|
|
885
950
|
*/
|
|
886
951
|
template<typename OtherDerived>
|
|
887
|
-
EIGEN_DEVICE_FUNC
|
|
952
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
|
888
953
|
void swap(DenseBase<OtherDerived> & other)
|
|
889
954
|
{
|
|
890
955
|
enum { SwapPointers = internal::is_same<Derived, OtherDerived>::value && Base::SizeAtCompileTime==Dynamic };
|
|
891
956
|
internal::matrix_swap_impl<Derived, OtherDerived, bool(SwapPointers)>::run(this->derived(), other.derived());
|
|
892
957
|
}
|
|
893
|
-
|
|
958
|
+
|
|
894
959
|
/** \internal
|
|
895
960
|
* \brief const version forwarded to DenseBase::swap
|
|
896
961
|
*/
|
|
897
962
|
template<typename OtherDerived>
|
|
898
|
-
EIGEN_DEVICE_FUNC
|
|
963
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
|
899
964
|
void swap(DenseBase<OtherDerived> const & other)
|
|
900
965
|
{ Base::swap(other.derived()); }
|
|
901
|
-
|
|
902
|
-
EIGEN_DEVICE_FUNC
|
|
966
|
+
|
|
967
|
+
EIGEN_DEVICE_FUNC
|
|
903
968
|
static EIGEN_STRONG_INLINE void _check_template_params()
|
|
904
969
|
{
|
|
905
|
-
EIGEN_STATIC_ASSERT((EIGEN_IMPLIES(MaxRowsAtCompileTime==1 && MaxColsAtCompileTime!=1, (Options&RowMajor)==RowMajor)
|
|
906
|
-
&& EIGEN_IMPLIES(MaxColsAtCompileTime==1 && MaxRowsAtCompileTime!=1, (Options&RowMajor)==0)
|
|
970
|
+
EIGEN_STATIC_ASSERT((EIGEN_IMPLIES(MaxRowsAtCompileTime==1 && MaxColsAtCompileTime!=1, (int(Options)&RowMajor)==RowMajor)
|
|
971
|
+
&& EIGEN_IMPLIES(MaxColsAtCompileTime==1 && MaxRowsAtCompileTime!=1, (int(Options)&RowMajor)==0)
|
|
907
972
|
&& ((RowsAtCompileTime == Dynamic) || (RowsAtCompileTime >= 0))
|
|
908
973
|
&& ((ColsAtCompileTime == Dynamic) || (ColsAtCompileTime >= 0))
|
|
909
974
|
&& ((MaxRowsAtCompileTime == Dynamic) || (MaxRowsAtCompileTime >= 0))
|
|
@@ -915,6 +980,17 @@ class PlainObjectBase : public internal::dense_xpr_base<Derived>::type
|
|
|
915
980
|
}
|
|
916
981
|
|
|
917
982
|
enum { IsPlainObjectBase = 1 };
|
|
983
|
+
#endif
|
|
984
|
+
public:
|
|
985
|
+
// These apparently need to be down here for nvcc+icc to prevent duplicate
|
|
986
|
+
// Map symbol.
|
|
987
|
+
template<typename PlainObjectType, int MapOptions, typename StrideType> friend class Eigen::Map;
|
|
988
|
+
friend class Eigen::Map<Derived, Unaligned>;
|
|
989
|
+
friend class Eigen::Map<const Derived, Unaligned>;
|
|
990
|
+
#if EIGEN_MAX_ALIGN_BYTES>0
|
|
991
|
+
// for EIGEN_MAX_ALIGN_BYTES==0, AlignedMax==Unaligned, and many compilers generate warnings for friend-ing a class twice.
|
|
992
|
+
friend class Eigen::Map<Derived, AlignedMax>;
|
|
993
|
+
friend class Eigen::Map<const Derived, AlignedMax>;
|
|
918
994
|
#endif
|
|
919
995
|
};
|
|
920
996
|
|
|
@@ -923,13 +999,19 @@ namespace internal {
|
|
|
923
999
|
template <typename Derived, typename OtherDerived, bool IsVector>
|
|
924
1000
|
struct conservative_resize_like_impl
|
|
925
1001
|
{
|
|
1002
|
+
#if EIGEN_HAS_TYPE_TRAITS
|
|
1003
|
+
static const bool IsRelocatable = std::is_trivially_copyable<typename Derived::Scalar>::value;
|
|
1004
|
+
#else
|
|
1005
|
+
static const bool IsRelocatable = !NumTraits<typename Derived::Scalar>::RequireInitialization;
|
|
1006
|
+
#endif
|
|
926
1007
|
static void run(DenseBase<Derived>& _this, Index rows, Index cols)
|
|
927
1008
|
{
|
|
928
1009
|
if (_this.rows() == rows && _this.cols() == cols) return;
|
|
929
1010
|
EIGEN_STATIC_ASSERT_DYNAMIC_SIZE(Derived)
|
|
930
1011
|
|
|
931
|
-
if (
|
|
932
|
-
|
|
1012
|
+
if ( IsRelocatable
|
|
1013
|
+
&& (( Derived::IsRowMajor && _this.cols() == cols) || // row-major and we change only the number of rows
|
|
1014
|
+
(!Derived::IsRowMajor && _this.rows() == rows) )) // column-major and we change only the number of columns
|
|
933
1015
|
{
|
|
934
1016
|
internal::check_rows_cols_for_overflow<Derived::MaxSizeAtCompileTime>::run(rows, cols);
|
|
935
1017
|
_this.derived().m_storage.conservativeResize(rows*cols,rows,cols);
|
|
@@ -937,7 +1019,7 @@ struct conservative_resize_like_impl
|
|
|
937
1019
|
else
|
|
938
1020
|
{
|
|
939
1021
|
// The storage order does not allow us to use reallocation.
|
|
940
|
-
|
|
1022
|
+
Derived tmp(rows,cols);
|
|
941
1023
|
const Index common_rows = numext::mini(rows, _this.rows());
|
|
942
1024
|
const Index common_cols = numext::mini(cols, _this.cols());
|
|
943
1025
|
tmp.block(0,0,common_rows,common_cols) = _this.block(0,0,common_rows,common_cols);
|
|
@@ -957,8 +1039,9 @@ struct conservative_resize_like_impl
|
|
|
957
1039
|
EIGEN_STATIC_ASSERT_DYNAMIC_SIZE(Derived)
|
|
958
1040
|
EIGEN_STATIC_ASSERT_DYNAMIC_SIZE(OtherDerived)
|
|
959
1041
|
|
|
960
|
-
if (
|
|
961
|
-
|
|
1042
|
+
if ( IsRelocatable &&
|
|
1043
|
+
(( Derived::IsRowMajor && _this.cols() == other.cols()) || // row-major and we change only the number of rows
|
|
1044
|
+
(!Derived::IsRowMajor && _this.rows() == other.rows()) )) // column-major and we change only the number of columns
|
|
962
1045
|
{
|
|
963
1046
|
const Index new_rows = other.rows() - _this.rows();
|
|
964
1047
|
const Index new_cols = other.cols() - _this.cols();
|
|
@@ -971,7 +1054,7 @@ struct conservative_resize_like_impl
|
|
|
971
1054
|
else
|
|
972
1055
|
{
|
|
973
1056
|
// The storage order does not allow us to use reallocation.
|
|
974
|
-
|
|
1057
|
+
Derived tmp(other);
|
|
975
1058
|
const Index common_rows = numext::mini(tmp.rows(), _this.rows());
|
|
976
1059
|
const Index common_cols = numext::mini(tmp.cols(), _this.cols());
|
|
977
1060
|
tmp.block(0,0,common_rows,common_cols) = _this.block(0,0,common_rows,common_cols);
|
|
@@ -986,13 +1069,18 @@ template <typename Derived, typename OtherDerived>
|
|
|
986
1069
|
struct conservative_resize_like_impl<Derived,OtherDerived,true>
|
|
987
1070
|
: conservative_resize_like_impl<Derived,OtherDerived,false>
|
|
988
1071
|
{
|
|
989
|
-
|
|
990
|
-
|
|
1072
|
+
typedef conservative_resize_like_impl<Derived,OtherDerived,false> Base;
|
|
1073
|
+
using Base::run;
|
|
1074
|
+
using Base::IsRelocatable;
|
|
1075
|
+
|
|
991
1076
|
static void run(DenseBase<Derived>& _this, Index size)
|
|
992
1077
|
{
|
|
993
1078
|
const Index new_rows = Derived::RowsAtCompileTime==1 ? 1 : size;
|
|
994
1079
|
const Index new_cols = Derived::RowsAtCompileTime==1 ? size : 1;
|
|
995
|
-
|
|
1080
|
+
if(IsRelocatable)
|
|
1081
|
+
_this.derived().m_storage.conservativeResize(size,new_rows,new_cols);
|
|
1082
|
+
else
|
|
1083
|
+
Base::run(_this.derived(), new_rows, new_cols);
|
|
996
1084
|
}
|
|
997
1085
|
|
|
998
1086
|
static void run(DenseBase<Derived>& _this, const DenseBase<OtherDerived>& other)
|
|
@@ -1003,7 +1091,10 @@ struct conservative_resize_like_impl<Derived,OtherDerived,true>
|
|
|
1003
1091
|
|
|
1004
1092
|
const Index new_rows = Derived::RowsAtCompileTime==1 ? 1 : other.rows();
|
|
1005
1093
|
const Index new_cols = Derived::RowsAtCompileTime==1 ? other.cols() : 1;
|
|
1006
|
-
|
|
1094
|
+
if(IsRelocatable)
|
|
1095
|
+
_this.derived().m_storage.conservativeResize(other.size(),new_rows,new_cols);
|
|
1096
|
+
else
|
|
1097
|
+
Base::run(_this.derived(), new_rows, new_cols);
|
|
1007
1098
|
|
|
1008
1099
|
if (num_new_elements > 0)
|
|
1009
1100
|
_this.tail(num_new_elements) = other.tail(num_new_elements);
|
|
@@ -1014,7 +1105,7 @@ template<typename MatrixTypeA, typename MatrixTypeB, bool SwapPointers>
|
|
|
1014
1105
|
struct matrix_swap_impl
|
|
1015
1106
|
{
|
|
1016
1107
|
EIGEN_DEVICE_FUNC
|
|
1017
|
-
static
|
|
1108
|
+
static EIGEN_STRONG_INLINE void run(MatrixTypeA& a, MatrixTypeB& b)
|
|
1018
1109
|
{
|
|
1019
1110
|
a.base().swap(b);
|
|
1020
1111
|
}
|
|
@@ -23,25 +23,25 @@ struct traits<Product<Lhs, Rhs, Option> >
|
|
|
23
23
|
typedef typename remove_all<Rhs>::type RhsCleaned;
|
|
24
24
|
typedef traits<LhsCleaned> LhsTraits;
|
|
25
25
|
typedef traits<RhsCleaned> RhsTraits;
|
|
26
|
-
|
|
26
|
+
|
|
27
27
|
typedef MatrixXpr XprKind;
|
|
28
|
-
|
|
28
|
+
|
|
29
29
|
typedef typename ScalarBinaryOpTraits<typename traits<LhsCleaned>::Scalar, typename traits<RhsCleaned>::Scalar>::ReturnType Scalar;
|
|
30
30
|
typedef typename product_promote_storage_type<typename LhsTraits::StorageKind,
|
|
31
31
|
typename RhsTraits::StorageKind,
|
|
32
32
|
internal::product_type<Lhs,Rhs>::ret>::ret StorageKind;
|
|
33
33
|
typedef typename promote_index_type<typename LhsTraits::StorageIndex,
|
|
34
34
|
typename RhsTraits::StorageIndex>::type StorageIndex;
|
|
35
|
-
|
|
35
|
+
|
|
36
36
|
enum {
|
|
37
37
|
RowsAtCompileTime = LhsTraits::RowsAtCompileTime,
|
|
38
38
|
ColsAtCompileTime = RhsTraits::ColsAtCompileTime,
|
|
39
39
|
MaxRowsAtCompileTime = LhsTraits::MaxRowsAtCompileTime,
|
|
40
40
|
MaxColsAtCompileTime = RhsTraits::MaxColsAtCompileTime,
|
|
41
|
-
|
|
41
|
+
|
|
42
42
|
// FIXME: only needed by GeneralMatrixMatrixTriangular
|
|
43
43
|
InnerSize = EIGEN_SIZE_MIN_PREFER_FIXED(LhsTraits::ColsAtCompileTime, RhsTraits::RowsAtCompileTime),
|
|
44
|
-
|
|
44
|
+
|
|
45
45
|
// The storage order is somewhat arbitrary here. The correct one will be determined through the evaluator.
|
|
46
46
|
Flags = (MaxRowsAtCompileTime==1 && MaxColsAtCompileTime!=1) ? RowMajorBit
|
|
47
47
|
: (MaxColsAtCompileTime==1 && MaxRowsAtCompileTime!=1) ? 0
|
|
@@ -74,10 +74,10 @@ class Product : public ProductImpl<_Lhs,_Rhs,Option,
|
|
|
74
74
|
internal::product_type<_Lhs,_Rhs>::ret>::ret>
|
|
75
75
|
{
|
|
76
76
|
public:
|
|
77
|
-
|
|
77
|
+
|
|
78
78
|
typedef _Lhs Lhs;
|
|
79
79
|
typedef _Rhs Rhs;
|
|
80
|
-
|
|
80
|
+
|
|
81
81
|
typedef typename ProductImpl<
|
|
82
82
|
Lhs, Rhs, Option,
|
|
83
83
|
typename internal::product_promote_storage_type<typename internal::traits<Lhs>::StorageKind,
|
|
@@ -90,18 +90,23 @@ class Product : public ProductImpl<_Lhs,_Rhs,Option,
|
|
|
90
90
|
typedef typename internal::remove_all<LhsNested>::type LhsNestedCleaned;
|
|
91
91
|
typedef typename internal::remove_all<RhsNested>::type RhsNestedCleaned;
|
|
92
92
|
|
|
93
|
-
EIGEN_DEVICE_FUNC
|
|
93
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
|
94
|
+
Product(const Lhs& lhs, const Rhs& rhs) : m_lhs(lhs), m_rhs(rhs)
|
|
94
95
|
{
|
|
95
96
|
eigen_assert(lhs.cols() == rhs.rows()
|
|
96
97
|
&& "invalid matrix product"
|
|
97
98
|
&& "if you wanted a coeff-wise or a dot product use the respective explicit functions");
|
|
98
99
|
}
|
|
99
100
|
|
|
100
|
-
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
|
101
|
-
|
|
101
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE EIGEN_CONSTEXPR
|
|
102
|
+
Index rows() const EIGEN_NOEXCEPT { return m_lhs.rows(); }
|
|
103
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE EIGEN_CONSTEXPR
|
|
104
|
+
Index cols() const EIGEN_NOEXCEPT { return m_rhs.cols(); }
|
|
102
105
|
|
|
103
|
-
EIGEN_DEVICE_FUNC
|
|
104
|
-
|
|
106
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
|
107
|
+
const LhsNestedCleaned& lhs() const { return m_lhs; }
|
|
108
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
|
|
109
|
+
const RhsNestedCleaned& rhs() const { return m_rhs; }
|
|
105
110
|
|
|
106
111
|
protected:
|
|
107
112
|
|
|
@@ -110,13 +115,13 @@ class Product : public ProductImpl<_Lhs,_Rhs,Option,
|
|
|
110
115
|
};
|
|
111
116
|
|
|
112
117
|
namespace internal {
|
|
113
|
-
|
|
118
|
+
|
|
114
119
|
template<typename Lhs, typename Rhs, int Option, int ProductTag = internal::product_type<Lhs,Rhs>::ret>
|
|
115
120
|
class dense_product_base
|
|
116
121
|
: public internal::dense_xpr_base<Product<Lhs,Rhs,Option> >::type
|
|
117
122
|
{};
|
|
118
123
|
|
|
119
|
-
/**
|
|
124
|
+
/** Conversion to scalar for inner-products */
|
|
120
125
|
template<typename Lhs, typename Rhs, int Option>
|
|
121
126
|
class dense_product_base<Lhs, Rhs, Option, InnerProduct>
|
|
122
127
|
: public internal::dense_xpr_base<Product<Lhs,Rhs,Option> >::type
|
|
@@ -126,8 +131,8 @@ class dense_product_base<Lhs, Rhs, Option, InnerProduct>
|
|
|
126
131
|
public:
|
|
127
132
|
using Base::derived;
|
|
128
133
|
typedef typename Base::Scalar Scalar;
|
|
129
|
-
|
|
130
|
-
EIGEN_STRONG_INLINE operator const Scalar() const
|
|
134
|
+
|
|
135
|
+
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE operator const Scalar() const
|
|
131
136
|
{
|
|
132
137
|
return internal::evaluator<ProductXpr>(derived()).coeff(0,0);
|
|
133
138
|
}
|
|
@@ -148,25 +153,25 @@ class ProductImpl<Lhs,Rhs,Option,Dense>
|
|
|
148
153
|
: public internal::dense_product_base<Lhs,Rhs,Option>
|
|
149
154
|
{
|
|
150
155
|
typedef Product<Lhs, Rhs, Option> Derived;
|
|
151
|
-
|
|
156
|
+
|
|
152
157
|
public:
|
|
153
|
-
|
|
158
|
+
|
|
154
159
|
typedef typename internal::dense_product_base<Lhs, Rhs, Option> Base;
|
|
155
160
|
EIGEN_DENSE_PUBLIC_INTERFACE(Derived)
|
|
156
161
|
protected:
|
|
157
162
|
enum {
|
|
158
|
-
IsOneByOne = (RowsAtCompileTime == 1 || RowsAtCompileTime == Dynamic) &&
|
|
163
|
+
IsOneByOne = (RowsAtCompileTime == 1 || RowsAtCompileTime == Dynamic) &&
|
|
159
164
|
(ColsAtCompileTime == 1 || ColsAtCompileTime == Dynamic),
|
|
160
165
|
EnableCoeff = IsOneByOne || Option==LazyProduct
|
|
161
166
|
};
|
|
162
|
-
|
|
167
|
+
|
|
163
168
|
public:
|
|
164
|
-
|
|
169
|
+
|
|
165
170
|
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Scalar coeff(Index row, Index col) const
|
|
166
171
|
{
|
|
167
172
|
EIGEN_STATIC_ASSERT(EnableCoeff, THIS_METHOD_IS_ONLY_FOR_INNER_OR_LAZY_PRODUCTS);
|
|
168
173
|
eigen_assert( (Option==LazyProduct) || (this->rows() == 1 && this->cols() == 1) );
|
|
169
|
-
|
|
174
|
+
|
|
170
175
|
return internal::evaluator<Derived>(derived()).coeff(row,col);
|
|
171
176
|
}
|
|
172
177
|
|
|
@@ -174,11 +179,11 @@ class ProductImpl<Lhs,Rhs,Option,Dense>
|
|
|
174
179
|
{
|
|
175
180
|
EIGEN_STATIC_ASSERT(EnableCoeff, THIS_METHOD_IS_ONLY_FOR_INNER_OR_LAZY_PRODUCTS);
|
|
176
181
|
eigen_assert( (Option==LazyProduct) || (this->rows() == 1 && this->cols() == 1) );
|
|
177
|
-
|
|
182
|
+
|
|
178
183
|
return internal::evaluator<Derived>(derived()).coeff(i);
|
|
179
184
|
}
|
|
180
|
-
|
|
181
|
-
|
|
185
|
+
|
|
186
|
+
|
|
182
187
|
};
|
|
183
188
|
|
|
184
189
|
} // end namespace Eigen
|