10#ifndef EIGEN_SPARSEMATRIXBASE_H
11#define EIGEN_SPARSEMATRIXBASE_H
26template<
typename Derived>
class SparseMatrixBase
31 typedef typename internal::traits<Derived>::Scalar Scalar;
38 typedef typename internal::packet_traits<Scalar>::type PacketScalar;
39 typedef typename internal::traits<Derived>::StorageKind StorageKind;
43 typedef typename internal::traits<Derived>::StorageIndex
StorageIndex;
45 typedef typename internal::add_const_on_value_type_if_arithmetic<
46 typename internal::packet_traits<Scalar>::type
47 >::type PacketReturnType;
49 typedef SparseMatrixBase StorageBaseType;
54 template<
typename OtherDerived>
72 SizeAtCompileTime = (internal::size_at_compile_time<internal::traits<Derived>::RowsAtCompileTime,
73 internal::traits<Derived>::ColsAtCompileTime>::ret),
81 MaxSizeAtCompileTime = (internal::size_at_compile_time<MaxRowsAtCompileTime,
82 MaxColsAtCompileTime>::ret),
95 Flags = internal::traits<Derived>::Flags,
105 #ifndef EIGEN_PARSED_BY_DOXYGEN
111 typedef typename internal::conditional<NumTraits<Scalar>::IsComplex,
114 >::type AdjointReturnType;
116 typedef typename internal::add_const<Transpose<const Derived> >::type ConstTransposeReturnType;
121#ifndef EIGEN_PARSED_BY_DOXYGEN
128 typedef typename NumTraits<Scalar>::Real RealScalar;
132 typedef typename internal::conditional<_HasDirectAccess, const Scalar&, Scalar>::type CoeffReturnType;
143 inline const Derived&
derived()
const {
return *
static_cast<const Derived*
>(
this); }
144 inline Derived&
derived() {
return *
static_cast<Derived*
>(
this); }
145 inline Derived& const_cast_derived()
const
146 {
return *
static_cast<Derived*
>(
const_cast<SparseMatrixBase*
>(
this)); }
148 typedef EigenBase<Derived> Base;
152#define EIGEN_CURRENT_STORAGE_BASE_CLASS Eigen::SparseMatrixBase
153#ifdef EIGEN_PARSED_BY_DOXYGEN
154#define EIGEN_DOC_UNARY_ADDONS(METHOD,OP)
155#define EIGEN_DOC_BLOCK_ADDONS_NOT_INNER_PANEL
156#define EIGEN_DOC_BLOCK_ADDONS_INNER_PANEL_IF(COND)
158#define EIGEN_DOC_UNARY_ADDONS(X,Y)
159#define EIGEN_DOC_BLOCK_ADDONS_NOT_INNER_PANEL
160#define EIGEN_DOC_BLOCK_ADDONS_INNER_PANEL_IF(COND)
162# include "../plugins/CommonCwiseUnaryOps.h"
163# include "../plugins/CommonCwiseBinaryOps.h"
164# include "../plugins/MatrixCwiseUnaryOps.h"
165# include "../plugins/MatrixCwiseBinaryOps.h"
166# include "../plugins/BlockMethods.h"
167# ifdef EIGEN_SPARSEMATRIXBASE_PLUGIN
168# include EIGEN_SPARSEMATRIXBASE_PLUGIN
170#undef EIGEN_CURRENT_STORAGE_BASE_CLASS
171#undef EIGEN_DOC_UNARY_ADDONS
172#undef EIGEN_DOC_BLOCK_ADDONS_NOT_INNER_PANEL
173#undef EIGEN_DOC_BLOCK_ADDONS_INNER_PANEL_IF
194 bool isRValue()
const {
return m_isRValue; }
195 Derived& markAsRValue() { m_isRValue =
true;
return derived(); }
197 SparseMatrixBase() : m_isRValue(false) { }
200 template<
typename OtherDerived>
201 Derived& operator=(
const ReturnByValue<OtherDerived>& other);
203 template<
typename OtherDerived>
204 inline Derived& operator=(
const SparseMatrixBase<OtherDerived>& other);
206 inline Derived& operator=(
const Derived& other);
210 template<
typename OtherDerived>
211 inline Derived& assign(
const OtherDerived& other);
213 template<
typename OtherDerived>
214 inline void assignGeneric(
const OtherDerived& other);
218 friend std::ostream & operator << (std::ostream & s,
const SparseMatrixBase& m)
220 typedef typename Derived::Nested Nested;
221 typedef typename internal::remove_all<Nested>::type NestedCleaned;
226 internal::evaluator<NestedCleaned> thisEval(nm);
230 for (
typename internal::evaluator<NestedCleaned>::InnerIterator it(thisEval,
row); it; ++it)
232 for ( ;
col<it.index(); ++
col)
234 s << it.value() <<
" ";
245 internal::evaluator<NestedCleaned> thisEval(nm);
248 for (
typename internal::evaluator<NestedCleaned>::InnerIterator it(thisEval, 0); it; ++it)
251 s <<
"0" << std::endl;
252 s << it.value() << std::endl;
255 for ( ; row<m.
rows(); ++row)
256 s <<
"0" << std::endl;
260 SparseMatrix<Scalar, RowMajorBit, StorageIndex> trans = m;
261 s << static_cast<const SparseMatrixBase<SparseMatrix<Scalar, RowMajorBit, StorageIndex> >&>(trans);
267 template<
typename OtherDerived>
269 template<
typename OtherDerived>
272 template<
typename OtherDerived>
273 Derived& operator+=(
const DiagonalBase<OtherDerived>& other);
274 template<
typename OtherDerived>
275 Derived& operator-=(
const DiagonalBase<OtherDerived>& other);
277 template<
typename OtherDerived>
279 template<
typename OtherDerived>
282 Derived& operator*=(
const Scalar& other);
283 Derived& operator/=(
const Scalar& other);
285 template<
typename OtherDerived>
struct CwiseProductDenseReturnType {
287 typename internal::traits<Derived>::Scalar,
288 typename internal::traits<OtherDerived>::Scalar
295 template<
typename OtherDerived>
296 EIGEN_STRONG_INLINE
const typename CwiseProductDenseReturnType<OtherDerived>::Type
300 template<
typename OtherDerived>
302 operator*(
const DiagonalBase<OtherDerived> &other)
const
306 template<
typename OtherDerived>
friend
307 const Product<OtherDerived,Derived>
308 operator*(
const DiagonalBase<OtherDerived> &lhs,
const SparseMatrixBase& rhs)
309 {
return Product<OtherDerived,Derived>(lhs.derived(), rhs.derived()); }
312 template<
typename OtherDerived>
313 const Product<Derived,OtherDerived,AliasFreeProduct>
314 operator*(
const SparseMatrixBase<OtherDerived> &other)
const;
317 template<
typename OtherDerived>
323 template<
typename OtherDerived>
friend
331 return SparseSymmetricPermutationProduct<Derived,Upper|Lower>(
derived(), perm);
334 template<
typename OtherDerived>
341 template<
unsigned int UpLo>
struct ConstSelfAdjointViewReturnType {
typedef const SparseSelfAdjointView<const Derived, UpLo> Type; };
343 template<
unsigned int UpLo>
inline
344 typename ConstSelfAdjointViewReturnType<UpLo>::Type selfadjointView()
const;
345 template<
unsigned int UpLo>
inline
346 typename SelfAdjointViewReturnType<UpLo>::Type selfadjointView();
348 template<
typename OtherDerived> Scalar dot(
const MatrixBase<OtherDerived>& other)
const;
349 template<
typename OtherDerived> Scalar dot(
const SparseMatrixBase<OtherDerived>& other)
const;
350 RealScalar squaredNorm()
const;
351 RealScalar norm()
const;
352 RealScalar blueNorm()
const;
354 TransposeReturnType transpose() {
return TransposeReturnType(
derived()); }
355 const ConstTransposeReturnType transpose()
const {
return ConstTransposeReturnType(
derived()); }
356 const AdjointReturnType adjoint()
const {
return AdjointReturnType(transpose()); }
358 DenseMatrixType toDense()
const
360 return DenseMatrixType(
derived());
363 template<
typename OtherDerived>
364 bool isApprox(
const SparseMatrixBase<OtherDerived>& other,
365 const RealScalar& prec = NumTraits<Scalar>::dummy_precision())
const;
367 template<
typename OtherDerived>
368 bool isApprox(
const MatrixBase<OtherDerived>& other,
369 const RealScalar& prec = NumTraits<Scalar>::dummy_precision())
const
370 {
return toDense().isApprox(other,prec); }
377 inline const typename internal::eval<Derived>::type
eval()
const
378 {
return typename internal::eval<Derived>::type(
derived()); }
383 pruned(
const Scalar& reference = Scalar(0),
const RealScalar& epsilon = NumTraits<Scalar>::dummy_precision())
const;
390 return internal::convert_index<StorageIndex>(idx);
393 template<
typename Dest>
void evalTo(Dest &)
const;
Generic expression where a coefficient-wise binary operator is applied to two expressions.
Definition CwiseBinaryOp.h:84
Generic expression of a matrix where all coefficients are defined by a functor.
Definition CwiseNullaryOp.h:61
Generic expression where a coefficient-wise unary operator is applied to an expression.
Definition CwiseUnaryOp.h:56
Derived & derived()
Definition EigenBase.h:46
Base class for all dense matrices, vectors, and expressions.
Definition MatrixBase.h:50
The matrix class, also used for vectors and row-vectors.
Definition Matrix.h:180
Permutation matrix.
Definition PermutationMatrix.h:298
Base class of any sparse matrices or sparse expressions.
Definition SparseMatrixBase.h:28
internal::traits< BlockType >::StorageIndex StorageIndex
Definition SparseMatrixBase.h:43
Index size() const
Definition SparseMatrixBase.h:181
Index innerSize() const
Definition SparseMatrixBase.h:192
Index rows() const
Definition SparseMatrixBase.h:176
bool isVector() const
Definition SparseMatrixBase.h:186
RowXpr row(Index i)
Definition SparseMatrixBase.h:1119
const Product< Derived, OtherDerived, AliasFreeProduct > operator*(const SparseMatrixBase< OtherDerived > &other) const
Definition SparseProduct.h:29
const CwiseBinaryOp< internal::scalar_product_op< Derived ::Scalar, OtherDerived ::Scalar >, const Derived, const OtherDerived > cwiseProduct(const Eigen::SparseMatrixBase< OtherDerived > &other) const
Definition SparseMatrixBase.h:24
Scalar value_type
Definition SparseMatrixBase.h:36
Index outerSize() const
Definition SparseMatrixBase.h:189
const SparseView< Derived > pruned(const Scalar &reference=Scalar(0), const RealScalar &epsilon=NumTraits< Scalar >::dummy_precision()) const
Definition SparseView.h:246
Index cols() const
Definition SparseMatrixBase.h:178
SparseSymmetricPermutationProduct< Derived, Upper|Lower > twistedBy(const PermutationMatrix< Dynamic, Dynamic, StorageIndex > &perm) const
Definition SparseMatrixBase.h:329
ColXpr col(Index i)
Definition SparseMatrixBase.h:1098
const CwiseBinaryOp< internal::scalar_product_op< Scalar, T >, Derived, Constant< T > > operator*(const T &scalar) const
const internal::eval< Derived >::type eval() const
Definition SparseMatrixBase.h:377
@ IsVectorAtCompileTime
Definition SparseMatrixBase.h:84
@ NumDimensions
Definition SparseMatrixBase.h:90
@ ColsAtCompileTime
Definition SparseMatrixBase.h:65
@ Flags
Definition SparseMatrixBase.h:95
@ RowsAtCompileTime
Definition SparseMatrixBase.h:59
@ SizeAtCompileTime
Definition SparseMatrixBase.h:72
A versatible sparse matrix representation.
Definition SparseUtil.h:52
Pseudo expression to manipulate a triangular sparse matrix as a selfadjoint matrix.
Definition SparseUtil.h:57
Expression of a dense or sparse matrix with zero or too small values removed.
Definition SparseView.h:46
Expression of the transpose of a matrix.
Definition Transpose.h:54
Expression of a triangular part in a matrix.
Definition TriangularMatrix.h:189
const unsigned int DirectAccessBit
Definition Constants.h:155
const unsigned int RowMajorBit
Definition Constants.h:66
Namespace containing all symbols from the Eigen library.
Definition Core:141
Definition EigenBase.h:30
Eigen::Index Index
The interface type of indices.
Definition EigenBase.h:39
Derived & derived()
Definition EigenBase.h:46
Determines whether the given binary operation of two numeric types is allowed and what the scalar ret...
Definition XprHelper.h:806