26 #ifndef EIGEN_MATRIXBASE_H
27 #define EIGEN_MATRIXBASE_H
67 #ifndef EIGEN_PARSED_BY_DOXYGEN
69 typedef typename internal::traits<Derived>::StorageKind
StorageKind;
70 typedef typename internal::traits<Derived>::Index
Index;
71 typedef typename internal::traits<Derived>::Scalar
Scalar;
72 typedef typename internal::packet_traits<Scalar>::type
PacketScalar;
87 using Base::const_cast_derived;
93 using Base::lazyAssign;
95 using Base::operator+=;
96 using Base::operator-=;
97 using Base::operator*=;
98 using Base::operator/=;
102 typedef typename Base::RowXpr RowXpr;
103 typedef typename Base::ColXpr ColXpr;
104 #endif // not EIGEN_PARSED_BY_DOXYGEN
108 #ifndef EIGEN_PARSED_BY_DOXYGEN
112 #endif // not EIGEN_PARSED_BY_DOXYGEN
125 internal::traits<Derived>::RowsAtCompileTime,
126 internal::traits<Derived>::ColsAtCompileTime,
128 internal::traits<Derived>::MaxRowsAtCompileTime,
129 internal::traits<Derived>::MaxColsAtCompileTime
132 #ifndef EIGEN_PARSED_BY_DOXYGEN
139 >::type AdjointReturnType;
146 internal::traits<Derived>::RowsAtCompileTime,
147 internal::traits<Derived>::ColsAtCompileTime> BasisReturnType;
148 #endif // not EIGEN_PARSED_BY_DOXYGEN
150 #define EIGEN_CURRENT_STORAGE_BASE_CLASS Eigen::MatrixBase
151 # include "../plugins/CommonCwiseUnaryOps.h"
152 # include "../plugins/CommonCwiseBinaryOps.h"
153 # include "../plugins/MatrixCwiseUnaryOps.h"
154 # include "../plugins/MatrixCwiseBinaryOps.h"
155 # ifdef EIGEN_MATRIXBASE_PLUGIN
156 # include EIGEN_MATRIXBASE_PLUGIN
158 #undef EIGEN_CURRENT_STORAGE_BASE_CLASS
168 template <
typename OtherDerived>
171 template <
typename OtherDerived>
174 template<
typename OtherDerived>
177 #ifndef EIGEN_PARSED_BY_DOXYGEN
178 template<
typename ProductDerived,
typename Lhs,
typename Rhs>
180 #endif // not EIGEN_PARSED_BY_DOXYGEN
182 template<
typename OtherDerived>
184 template<
typename OtherDerived>
187 template<
typename OtherDerived>
191 template<
typename OtherDerived>
195 template<
typename OtherDerived>
198 template<
typename OtherDerived>
201 template<
typename OtherDerived>
204 template<
typename DiagonalDerived>
208 template<
typename OtherDerived>
209 typename internal::scalar_product_traits<typename internal::traits<Derived>::Scalar,
typename internal::traits<OtherDerived>::Scalar>::ReturnType
212 #ifdef EIGEN2_SUPPORT
213 template<
typename OtherDerived>
225 const AdjointReturnType
adjoint()
const;
241 #if (defined _MSC_VER) && (_MSC_VER >= 1500) // 2008 or later
249 #ifdef EIGEN2_SUPPORT
250 template<
unsigned int Mode>
typename internal::eigen2_part_return_type<Derived, Mode>::type part();
251 template<
unsigned int Mode>
const typename internal::eigen2_part_return_type<Derived, Mode>::type part()
const;
255 template<
template<
typename T,
int n>
class U>
258 #endif // EIGEN2_SUPPORT
274 static const IdentityReturnType
Identity();
277 static const BasisReturnType
Unit(
Index i);
278 static const BasisReturnType
UnitX();
279 static const BasisReturnType
UnitY();
280 static const BasisReturnType
UnitZ();
281 static const BasisReturnType
UnitW();
295 template<
typename OtherDerived>
304 template<
typename OtherDerived>
312 template<
typename OtherDerived>
320 template<
bool Enable>
inline typename internal::add_const_on_value_type<typename internal::conditional<Enable,ForceAlignedAccess<Derived>,Derived&>::type>::type
forceAlignedAccessIf()
const;
321 template<
bool Enable>
inline typename internal::conditional<Enable,ForceAlignedAccess<Derived>,Derived&>::type
forceAlignedAccessIf();
342 #if EIGEN2_SUPPORT_STAGE < STAGE20_RESOLVE_API_CONFLICTS
343 const LU<PlainObject>
lu()
const;
346 #ifdef EIGEN2_SUPPORT
347 const LU<PlainObject> eigen2_lu()
const;
350 #if EIGEN2_SUPPORT_STAGE > STAGE20_RESOLVE_API_CONFLICTS
354 #ifdef EIGEN2_SUPPORT
355 template<
typename ResultType>
361 const internal::inverse_impl<Derived>
inverse()
const;
362 template<
typename ResultType>
367 const RealScalar& absDeterminantThreshold = NumTraits<Scalar>::dummy_precision()
369 template<
typename ResultType>
373 const RealScalar& absDeterminantThreshold = NumTraits<Scalar>::dummy_precision()
379 const LLT<PlainObject>
llt()
const;
380 const LDLT<PlainObject>
ldlt()
const;
388 #ifdef EIGEN2_SUPPORT
389 const QR<PlainObject> qr()
const;
397 JacobiSVD<PlainObject>
jacobiSvd(
unsigned int computationOptions = 0)
const;
399 #ifdef EIGEN2_SUPPORT
400 SVD<PlainObject> svd()
const;
405 #ifndef EIGEN_PARSED_BY_DOXYGEN
407 template<
typename OtherDerived>
struct cross_product_return_type {
408 typedef typename internal::scalar_product_traits<typename internal::traits<Derived>::Scalar,
typename internal::traits<OtherDerived>::Scalar>::ReturnType
Scalar;
409 typedef Matrix<Scalar,MatrixBase::RowsAtCompileTime,MatrixBase::ColsAtCompileTime> type;
411 #endif // EIGEN_PARSED_BY_DOXYGEN
412 template<
typename OtherDerived>
413 typename cross_product_return_type<OtherDerived>::type
414 cross(
const MatrixBase<OtherDerived>& other)
const;
415 template<
typename OtherDerived>
420 #if EIGEN2_SUPPORT_STAGE > STAGE20_RESOLVE_API_CONFLICTS
421 ScalarMultipleReturnType
operator*(
const UniformScaling<Scalar>& s)
const;
431 typedef Block<
const Derived,
432 internal::traits<Derived>::ColsAtCompileTime==1 ?
SizeMinusOne : 1,
442 template<
typename EssentialPart>
445 template<
typename EssentialPart>
449 template<
typename EssentialPart>
456 template<
typename OtherScalar>
458 template<
typename OtherScalar>
473 #ifdef EIGEN2_SUPPORT
474 template<
typename ProductDerived,
typename Lhs,
typename Rhs>
478 template<
typename ProductDerived,
typename Lhs,
typename Rhs>
484 template<
typename OtherDerived>
485 Derived& lazyAssign(
const Flagged<OtherDerived, 0, EvalBeforeAssigningBit>& other)
486 {
return lazyAssign(other._expression()); }
488 template<
unsigned int Added>
489 const Flagged<Derived, Added, 0> marked()
const;
490 const Flagged<Derived, 0, EvalBeforeAssigningBit> lazy()
const;
492 inline const Cwise<Derived> cwise()
const;
493 inline Cwise<Derived> cwise();
518 {
EIGEN_STATIC_ASSERT(std::ptrdiff_t(
sizeof(
typename OtherDerived::Scalar))==-1,YOU_CANNOT_MIX_ARRAYS_AND_MATRICES);
return *
this;}
521 {
EIGEN_STATIC_ASSERT(std::ptrdiff_t(
sizeof(
typename OtherDerived::Scalar))==-1,YOU_CANNOT_MIX_ARRAYS_AND_MATRICES);
return *
this;}
526 #endif // EIGEN_MATRIXBASE_H