11 #ifndef EIGEN_DENSEBASE_H 12 #define EIGEN_DENSEBASE_H 15 #include "./InternalHeaderCheck.h" 20 EIGEN_STATIC_ASSERT(NumTraits<DenseIndex>::IsSigned, THE_INDEX_TYPE_MUST_BE_A_SIGNED_TYPE)
37 template <
typename Derived>
39 #ifndef EIGEN_PARSED_BY_DOXYGEN
40 :
public DenseCoeffsBase<Derived, internal::accessors_level<Derived>::value>
42 :
public DenseCoeffsBase<Derived, DirectWriteAccessors>
43 #endif // not EIGEN_PARSED_BY_DOXYGEN 51 typedef typename internal::traits<Derived>::StorageKind StorageKind;
59 typedef typename internal::traits<Derived>::StorageIndex
StorageIndex;
62 typedef typename internal::traits<Derived>::Scalar
Scalar;
70 typedef DenseCoeffsBase<Derived, internal::accessors_level<Derived>::value> Base;
73 using Base::coeffByOuterInner;
74 using Base::colIndexByOuterInner;
76 using Base::const_cast_derived;
78 using Base::rowIndexByOuterInner;
81 using Base::operator();
82 using Base::operator[];
83 using Base::colStride;
84 using Base::innerStride;
85 using Base::outerStride;
86 using Base::rowStride;
92 typedef typename Base::CoeffReturnType CoeffReturnType;
136 internal::traits<Derived>::MaxColsAtCompileTime),
148 internal::traits<Derived>::RowsAtCompileTime == 1 || internal::traits<Derived>::ColsAtCompileTime == 1,
161 Flags = internal::traits<Derived>::Flags,
172 InnerStrideAtCompileTime = internal::inner_stride_at_compile_time<Derived>::ret,
173 OuterStrideAtCompileTime = internal::outer_stride_at_compile_time<Derived>::ret
176 typedef typename internal::find_best_packet<Scalar, SizeAtCompileTime>::type PacketScalar;
178 enum { IsPlainObjectBase = 0 };
183 internal::traits<Derived>::ColsAtCompileTime,
185 internal::traits<Derived>::MaxRowsAtCompileTime, internal::traits<Derived>::MaxColsAtCompileTime>
191 internal::traits<Derived>::ColsAtCompileTime,
193 internal::traits<Derived>::MaxRowsAtCompileTime, internal::traits<Derived>::MaxColsAtCompileTime>
202 typedef std::conditional_t<internal::is_same<typename internal::traits<Derived>::XprKind,
MatrixXpr>
::value,
229 EIGEN_ONLY_USED_FOR_DEBUG(newSize);
230 eigen_assert(newSize == this->
size() &&
"DenseBase::resize() does not actually allow to resize.");
237 EIGEN_ONLY_USED_FOR_DEBUG(
rows);
238 EIGEN_ONLY_USED_FOR_DEBUG(
cols);
239 eigen_assert(
rows == this->
rows() && cols == this->
cols() &&
240 "DenseBase::resize() does not actually allow to resize.");
243 #ifndef EIGEN_PARSED_BY_DOXYGEN 256 internal::traits<Derived>::ColsAtCompileTime, 1>
257 EigenvaluesReturnType;
259 #endif // not EIGEN_PARSED_BY_DOXYGEN 262 template <
typename OtherDerived>
270 template <
typename OtherDerived>
273 template <
typename OtherDerived>
276 template <
typename OtherDerived>
279 template <
typename OtherDerived>
280 EIGEN_DEVICE_FUNC Derived&
operator=(
const ReturnByValue<OtherDerived>& func);
284 template <
typename OtherDerived>
290 template <
unsigned int Added,
unsigned int Removed>
292 EIGEN_DEPRECATED
const Derived&
flagged()
const {
296 template <
typename OtherDerived>
300 EIGEN_DEVICE_FUNC TransposeReturnType
transpose();
310 EIGEN_DEVICE_FUNC static const RandomAccessLinSpacedReturnType
LinSpaced(Sequential_t,
Index size, const
Scalar& low,
313 EIGEN_DEVICE_FUNC static const RandomAccessLinSpacedReturnType
LinSpaced(Sequential_t, const
Scalar& low,
318 EIGEN_DEVICE_FUNC static const RandomAccessLinSpacedReturnType
LinSpaced(const
Scalar& low, const
Scalar& high);
320 EIGEN_DEVICE_FUNC static const RandomAccessEqualSpacedReturnType EqualSpaced(
Index size, const
Scalar& low,
322 EIGEN_DEVICE_FUNC static const RandomAccessEqualSpacedReturnType EqualSpaced(const
Scalar& low, const
Scalar& step);
324 template <typename CustomNullaryOp>
326 const CustomNullaryOp& func);
327 template <typename CustomNullaryOp>
329 const CustomNullaryOp& func);
330 template <typename CustomNullaryOp>
334 EIGEN_DEVICE_FUNC static const ZeroReturnType
Zero(
Index size);
335 EIGEN_DEVICE_FUNC static const ZeroReturnType
Zero();
337 EIGEN_DEVICE_FUNC static const ConstantReturnType
Ones(
Index size);
338 EIGEN_DEVICE_FUNC static const ConstantReturnType
Ones();
345 EIGEN_DEVICE_FUNC Derived& setEqualSpaced(const
Scalar& low, const
Scalar& step);
346 EIGEN_DEVICE_FUNC Derived&
setZero();
347 EIGEN_DEVICE_FUNC Derived&
setOnes();
350 template <typename OtherDerived>
353 EIGEN_DEVICE_FUNC
bool isMuchSmallerThan(const RealScalar& other,
355 template <typename OtherDerived>
356 EIGEN_DEVICE_FUNC
bool isMuchSmallerThan(const
DenseBase<OtherDerived>& other,
366 EIGEN_DEVICE_FUNC inline
bool hasNaN() const;
367 EIGEN_DEVICE_FUNC inline
bool allFinite() const;
369 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Derived& operator*=(const
Scalar& other);
370 template <
bool Enable = !internal::is_same<
Scalar, RealScalar>::
value, typename =
std::enable_if_t<Enable>>
371 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Derived& operator*=(const RealScalar& other);
373 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Derived& operator/=(const
Scalar& other);
374 template <
bool Enable = !internal::is_same<
Scalar, RealScalar>::
value, typename =
std::enable_if_t<Enable>>
375 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE Derived& operator/=(const RealScalar& other);
377 typedef internal::add_const_on_value_type_t<typename internal::
eval<Derived>::type> EvalReturnType;
386 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE EvalReturnType
eval()
const {
390 return typename internal::eval<Derived>::type(
derived());
396 template <
typename OtherDerived>
398 EIGEN_STATIC_ASSERT(!OtherDerived::IsPlainObjectBase, THIS_EXPRESSION_IS_NOT_A_LVALUE__IT_IS_READ_ONLY);
400 call_assignment(
derived(), other.const_cast_derived(), internal::swap_assign_op<Scalar>());
406 template <
typename OtherDerived>
408 eigen_assert(
rows() == other.rows() &&
cols() == other.cols());
409 call_assignment(
derived(), other.derived(), internal::swap_assign_op<Scalar>());
415 template <
bool Enable>
416 EIGEN_DEVICE_FUNC
inline const std::conditional_t<Enable, ForceAlignedAccess<Derived>, Derived&>
417 forceAlignedAccessIf()
const;
418 template <
bool Enable>
419 EIGEN_DEVICE_FUNC
inline std::conditional_t<Enable, ForceAlignedAccess<Derived>, Derived&> forceAlignedAccessIf();
423 EIGEN_DEVICE_FUNC
Scalar trace()
const;
427 template <
int NaNPropagation>
428 EIGEN_DEVICE_FUNC
typename internal::traits<Derived>::Scalar
minCoeff()
const;
429 template <
int NaNPropagation>
430 EIGEN_DEVICE_FUNC
typename internal::traits<Derived>::Scalar
maxCoeff()
const;
436 EIGEN_DEVICE_FUNC
inline typename internal::traits<Derived>::Scalar
minCoeff()
const {
437 return minCoeff<PropagateFast>();
439 EIGEN_DEVICE_FUNC
inline typename internal::traits<Derived>::Scalar
maxCoeff()
const {
440 return maxCoeff<PropagateFast>();
443 template <
int NaNPropagation,
typename IndexType>
444 EIGEN_DEVICE_FUNC
typename internal::traits<Derived>::Scalar
minCoeff(IndexType*
row, IndexType*
col)
const;
445 template <
int NaNPropagation,
typename IndexType>
446 EIGEN_DEVICE_FUNC
typename internal::traits<Derived>::Scalar
maxCoeff(IndexType*
row, IndexType*
col)
const;
447 template <
int NaNPropagation,
typename IndexType>
448 EIGEN_DEVICE_FUNC
typename internal::traits<Derived>::Scalar
minCoeff(IndexType* index)
const;
449 template <
int NaNPropagation,
typename IndexType>
450 EIGEN_DEVICE_FUNC
typename internal::traits<Derived>::Scalar
maxCoeff(IndexType* index)
const;
453 template <
typename IndexType>
454 EIGEN_DEVICE_FUNC
inline typename internal::traits<Derived>::Scalar
minCoeff(IndexType*
row, IndexType*
col)
const {
455 return minCoeff<PropagateFast>(
row,
col);
457 template <
typename IndexType>
458 EIGEN_DEVICE_FUNC
inline typename internal::traits<Derived>::Scalar
maxCoeff(IndexType*
row, IndexType*
col)
const {
459 return maxCoeff<PropagateFast>(
row,
col);
461 template <
typename IndexType>
462 EIGEN_DEVICE_FUNC
inline typename internal::traits<Derived>::Scalar
minCoeff(IndexType* index)
const {
463 return minCoeff<PropagateFast>(index);
465 template <
typename IndexType>
466 EIGEN_DEVICE_FUNC
inline typename internal::traits<Derived>::Scalar
maxCoeff(IndexType* index)
const {
467 return maxCoeff<PropagateFast>(index);
470 template <
typename BinaryOp>
471 EIGEN_DEVICE_FUNC
Scalar redux(
const BinaryOp& func)
const;
473 template <
typename Visitor>
474 EIGEN_DEVICE_FUNC
void visit(Visitor& func)
const;
486 EIGEN_DEVICE_FUNC CoeffReturnType
value()
const {
487 EIGEN_STATIC_ASSERT_SIZE_1x1(Derived) eigen_assert(this->
rows() == 1 && this->
cols() == 1);
491 EIGEN_DEVICE_FUNC
bool all()
const;
492 EIGEN_DEVICE_FUNC
bool any()
const;
509 EIGEN_DEVICE_FUNC RowwiseReturnType
rowwise();
519 EIGEN_DEVICE_FUNC ColwiseReturnType
colwise();
524 static const RandomReturnType
Random();
526 template <
typename ThenDerived,
typename ElseDerived>
527 inline EIGEN_DEVICE_FUNC
530 ThenDerived, ElseDerived, Derived>
533 template <
typename ThenDerived>
534 inline EIGEN_DEVICE_FUNC
540 template <
typename ElseDerived>
541 inline EIGEN_DEVICE_FUNC
548 RealScalar lpNorm()
const;
550 template <
int RowFactor,
int ColFactor>
573 #ifdef EIGEN_PARSED_BY_DOXYGEN 582 internal::pointer_based_stl_iterator<Derived>,
583 internal::generic_randaccess_stl_iterator<Derived> >
587 internal::pointer_based_stl_iterator<const Derived>,
588 internal::generic_randaccess_stl_iterator<const Derived> >
593 typedef std::conditional_t<IsVectorAtCompileTime, iterator_type, void>
iterator;
595 typedef std::conditional_t<IsVectorAtCompileTime, const_iterator_type, void>
const_iterator;
605 using RealViewReturnType = std::conditional_t<NumTraits<Scalar>::IsComplex, RealView<Derived>, Derived&>;
606 using ConstRealViewReturnType =
607 std::conditional_t<NumTraits<Scalar>::IsComplex, RealView<const Derived>,
const Derived&>;
609 EIGEN_DEVICE_FUNC RealViewReturnType realView();
610 EIGEN_DEVICE_FUNC ConstRealViewReturnType realView()
const;
612 #define EIGEN_CURRENT_STORAGE_BASE_CLASS Eigen::DenseBase 613 #define EIGEN_DOC_BLOCK_ADDONS_NOT_INNER_PANEL 614 #define EIGEN_DOC_BLOCK_ADDONS_INNER_PANEL_IF(COND) 615 #define EIGEN_DOC_UNARY_ADDONS(X, Y) 616 #include "../plugins/CommonCwiseUnaryOps.inc" 617 #include "../plugins/BlockMethods.inc" 618 #include "../plugins/IndexedViewMethods.inc" 619 #include "../plugins/ReshapedMethods.inc" 620 #ifdef EIGEN_DENSEBASE_PLUGIN 621 #include EIGEN_DENSEBASE_PLUGIN 623 #undef EIGEN_CURRENT_STORAGE_BASE_CLASS 624 #undef EIGEN_DOC_BLOCK_ADDONS_NOT_INNER_PANEL 625 #undef EIGEN_DOC_BLOCK_ADDONS_INNER_PANEL_IF 626 #undef EIGEN_DOC_UNARY_ADDONS 629 template <
typename Dest>
630 EIGEN_DEVICE_FUNC
inline void evalTo(Dest&)
const {
631 EIGEN_STATIC_ASSERT((internal::is_same<Dest, void>::value),
632 THE_EVAL_EVALTO_FUNCTION_SHOULD_NEVER_BE_CALLED_FOR_DENSE_OBJECTS);
636 EIGEN_DEFAULT_COPY_CONSTRUCTOR(
DenseBase)
638 #ifdef EIGEN_INTERNAL_DEBUGGING 639 EIGEN_DEVICE_FUNC constexpr
DenseBase() {
646 INVALID_STORAGE_ORDER_FOR_THIS_VECTOR_EXPRESSION)
649 EIGEN_DEVICE_FUNC constexpr
DenseBase() =
default;
653 EIGEN_DEVICE_FUNC
explicit DenseBase(
int);
655 template <
typename OtherDerived>
661 template <
typename DerivedA,
typename DerivedB>
662 EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE
664 std::enable_if_t<std::is_base_of<DenseBase<std::decay_t<DerivedA>>, std::decay_t<DerivedA>>
::value &&
665 std::is_base_of<DenseBase<std::decay_t<DerivedB>>, std::decay_t<DerivedB>>
::value,
667 swap(DerivedA&& a, DerivedB&& b) {
673 #endif // EIGEN_DENSEBASE_H Definition: DenseBase.h:124
Generic expression of a matrix where all coefficients are defined by a functor.
Definition: CwiseNullaryOp.h:63
Scalar sum() const
Definition: Redux.h:488
const Replicate< Derived, Dynamic, Dynamic > replicate(Index rowFactor, Index colFactor) const
Definition: DenseBase.h:561
constexpr DenseBase()=default
bool isZero(const RealScalar &prec=NumTraits< Scalar >::dummy_precision()) const
Definition: CwiseNullaryOp.h:536
ConstReverseReturnType reverse() const
Definition: DenseBase.h:570
ColXpr col(Index i)
Definition: DenseBase.h:1072
constexpr Index size() const noexcept
Definition: EigenBase.h:64
Enforce aligned packet loads and stores regardless of what is requested.
Definition: ForceAlignedAccess.h:37
internal::traits< Derived >::Scalar Scalar
Definition: DenseBase.h:62
Definition: Constants.h:318
bool allFinite() const
Definition: Visitor.h:531
std::conditional_t< internal::is_same< typename internal::traits< Derived >::XprKind, MatrixXpr >::value, PlainMatrix, PlainArray > PlainObject
The plain matrix or array type corresponding to this expression.
Definition: DenseBase.h:204
static const ZeroReturnType Zero()
Definition: CwiseNullaryOp.h:523
Expression of the transpose of a matrix.
Definition: Transpose.h:56
const unsigned int DirectAccessBit
Definition: Constants.h:159
static const RandomAccessLinSpacedReturnType LinSpaced(Sequential_t, Index size, const Scalar &low, const Scalar &high)
Definition: CwiseNullaryOp.h:239
Derived & setRandom()
Definition: Random.h:129
Definition: DenseBase.h:147
Namespace containing all symbols from the Eigen library.
Definition: B01_Experimental.dox:1
Scalar value_type
Definition: DenseBase.h:67
Derived & operator=(const DenseBase< OtherDerived > &other)
Definition: Assign.h:39
random_access_iterator_type const_iterator
Definition: DenseBase.h:579
Index count() const
Definition: Visitor.h:513
Definition: BFloat16.h:231
Definition: DenseBase.h:154
Holds information about the various numeric (i.e. scalar) types allowed by Eigen. ...
Definition: NumTraits.h:232
RowXpr row(Index i)
Definition: DenseBase.h:1085
Definition: DenseBase.h:102
Pseudo expression providing broadcasting and partial reduction operations.
Definition: ForwardDeclarations.h:405
const WithFormat< Derived > format(const IOFormat &fmt) const
Definition: DenseBase.h:483
constexpr Index outerSize() const
Definition: DenseBase.h:211
Eigen::Index Index
The interface type of indices.
Definition: EigenBase.h:43
const unsigned int RowMajorBit
Definition: Constants.h:70
Base class for all dense matrices, vectors, and arrays.
Definition: DenseBase.h:38
iterator begin()
Definition: StlIterators.h:570
CommaInitializer< Derived > operator<<(const Scalar &s)
Definition: CommaInitializer.h:135
const NestByValue< Derived > nestByValue() const
Definition: NestByValue.h:74
static const RandomReturnType Random()
Definition: Random.h:112
constexpr Index rows() const noexcept
Definition: EigenBase.h:59
static const ConstantReturnType Constant(Index rows, Index cols, const Scalar &value)
Definition: CwiseNullaryOp.h:186
void resize(Index newSize)
Definition: DenseBase.h:228
Helper class used by the comma initializer operator.
Definition: CommaInitializer.h:31
internal::traits< Derived >::StorageIndex StorageIndex
The type used to store indices.
Definition: DenseBase.h:59
Definition: EigenBase.h:33
Definition: Constants.h:534
const Replicate< Derived, RowFactor, ColFactor > replicate() const
Definition: Replicate.h:109
constexpr Index cols() const noexcept
Definition: EigenBase.h:61
Definition: Constants.h:322
static const CwiseNullaryOp< CustomNullaryOp, PlainObject > NullaryExpr(Index rows, Index cols, const CustomNullaryOp &func)
Definition: CwiseNullaryOp.h:112
void visit(Visitor &func) const
Definition: Visitor.h:380
constexpr Index innerSize() const
Definition: DenseBase.h:220
Definition: DenseBase.h:135
void fill(const Scalar &value)
Definition: CwiseNullaryOp.h:337
bool all() const
Definition: Visitor.h:487
EIGEN_DEFAULT_DENSE_INDEX_TYPE Index
The Index type as used for the API.
Definition: Meta.h:82
Definition: DenseBase.h:108
Dense storage base class for matrices and arrays.
Definition: PlainObjectBase.h:95
Generic expression where a coefficient-wise ternary operator is applied to two expressions.
Definition: CwiseTernaryOp.h:84
Expression of the multiple replication of a matrix or vector.
Definition: Replicate.h:64
bool isConstant(const Scalar &value, const RealScalar &prec=NumTraits< Scalar >::dummy_precision()) const
Definition: CwiseNullaryOp.h:328
iterator end()
Definition: StlIterators.h:596
EIGEN_DEPRECATED const Derived & flagged() const
Definition: DenseBase.h:292
Scalar prod() const
Definition: Redux.h:517
Definition: DenseBase.h:96
Matrix< typename internal::traits< Derived >::Scalar, internal::traits< Derived >::RowsAtCompileTime, internal::traits< Derived >::ColsAtCompileTime, AutoAlign|(internal::traits< Derived >::Flags &RowMajorBit ? RowMajor :ColMajor), internal::traits< Derived >::MaxRowsAtCompileTime, internal::traits< Derived >::MaxColsAtCompileTime > PlainMatrix
Definition: DenseBase.h:186
bool any() const
Definition: Visitor.h:500
Expression which must be nested by value.
Definition: NestByValue.h:39
void swap(const DenseBase< OtherDerived > &other)
Definition: DenseBase.h:397
ConstColwiseReturnType colwise() const
Definition: DenseBase.h:518
ReverseReturnType reverse()
Definition: Reverse.h:110
static const ConstantReturnType Ones()
Definition: CwiseNullaryOp.h:667
Derived & setLinSpaced(Index size, const Scalar &low, const Scalar &high)
Sets a linearly spaced vector.
Definition: CwiseNullaryOp.h:430
constexpr Derived & derived()
Definition: EigenBase.h:49
EIGEN_DEPRECATED_WITH_REASON("Initialization is no longer needed.") inline void initParallel()
Definition: Parallelizer.h:50
Definition: DenseBase.h:166
random_access_iterator_type iterator
Definition: DenseBase.h:577
Definition: DenseBase.h:161
ConstRowwiseReturnType rowwise() const
Definition: DenseBase.h:508
Derived & setZero()
Definition: CwiseNullaryOp.h:552
General-purpose arrays with easy API for coefficient-wise operations.
Definition: Array.h:48
Definition: Constants.h:320
bool isApproxToConstant(const Scalar &value, const RealScalar &prec=NumTraits< Scalar >::dummy_precision()) const
Definition: CwiseNullaryOp.h:316
Derived & setOnes()
Definition: CwiseNullaryOp.h:692
const_iterator cbegin() const
Definition: StlIterators.h:586
void reverseInPlace()
Definition: Reverse.h:129
Derived & setConstant(const Scalar &value)
Definition: CwiseNullaryOp.h:347
CoeffReturnType value() const
Definition: DenseBase.h:486
TransposeReturnType transpose()
Definition: Transpose.h:162
EvalReturnType eval() const
Definition: DenseBase.h:386
internal::traits< Derived >::Scalar minCoeff() const
Definition: Redux.h:464
void transposeInPlace()
Definition: Transpose.h:320
The matrix class, also used for vectors and row-vectors.
Definition: Matrix.h:186
constexpr Index rows() const noexcept
Definition: EigenBase.h:59
constexpr Index cols() const noexcept
Definition: EigenBase.h:61
Expression of the reverse of a vector or matrix.
Definition: Reverse.h:65
Definition: DenseBase.h:113
bool isOnes(const RealScalar &prec=NumTraits< Scalar >::dummy_precision()) const
Definition: CwiseNullaryOp.h:680
EIGEN_DEPRECATED Derived & lazyAssign(const DenseBase< OtherDerived > &other)
internal::traits< Derived >::Scalar maxCoeff() const
Definition: Redux.h:477
Scalar mean() const
Definition: Redux.h:498
void resize(Index rows, Index cols)
Definition: DenseBase.h:236
void swap(PlainObjectBase< OtherDerived > &other)
Definition: DenseBase.h:407
Eigen::InnerIterator< Derived > InnerIterator
Definition: DenseBase.h:49
const_iterator cend() const
Definition: StlIterators.h:612
An InnerIterator allows to loop over the element of any matrix expression.
Definition: CoreIterators.h:37
bool isApprox(const DenseBase< OtherDerived > &other, const RealScalar &prec=NumTraits< Scalar >::dummy_precision()) const
Definition: Fuzzy.h:89