10 #ifndef EIGEN_SPARSEMATRIXBASE_H
11 #define EIGEN_SPARSEMATRIXBASE_H
38 typedef typename internal::packet_traits<Scalar>::type PacketScalar;
46 typename internal::packet_traits<Scalar>::type
54 template<
typename OtherDerived>
82 MaxColsAtCompileTime>::ret),
105 #ifndef EIGEN_PARSED_BY_DOXYGEN
121 #ifndef EIGEN_PARSED_BY_DOXYGEN
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;
150 #endif // not EIGEN_PARSED_BY_DOXYGEN
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;
225 Nested nm(m.derived());
226 internal::evaluator<NestedCleaned> thisEval(nm);
227 for (
Index row=0; row<nm.outerSize(); ++row)
230 for (
typename internal::evaluator<NestedCleaned>::InnerIterator it(thisEval, row); it; ++it)
232 for ( ; col<it.index(); ++col)
234 s << it.value() <<
" ";
237 for ( ; col<m.cols(); ++col)
244 Nested nm(m.derived());
245 internal::evaluator<NestedCleaned> thisEval(nm);
248 for (
typename internal::evaluator<NestedCleaned>::InnerIterator it(thisEval, 0); it; ++it)
250 for ( ; row<it.index(); ++row)
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>
268 Derived& operator+=(
const SparseMatrixBase<OtherDerived>& other);
269 template<
typename OtherDerived>
270 Derived& operator-=(
const SparseMatrixBase<OtherDerived>& other);
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>
278 Derived& operator+=(
const EigenBase<OtherDerived> &other);
279 template<
typename OtherDerived>
280 Derived& operator-=(
const EigenBase<OtherDerived> &other);
282 Derived& operator*=(
const Scalar& other);
283 Derived& operator/=(
const Scalar& other);
295 template<
typename OtherDerived>
300 template<
typename OtherDerived>
306 template<
typename OtherDerived>
friend
312 template<
typename OtherDerived>
313 const Product<Derived,OtherDerived,AliasFreeProduct>
314 operator*(
const SparseMatrixBase<OtherDerived> &other)
const;
317 template<
typename OtherDerived>
318 const Product<Derived,OtherDerived>
319 operator*(
const MatrixBase<OtherDerived> &other)
const
320 {
return Product<Derived,OtherDerived>(derived(), other.derived()); }
323 template<
typename OtherDerived>
friend
324 const Product<OtherDerived,Derived>
325 operator*(
const MatrixBase<OtherDerived> &lhs,
const SparseMatrixBase& rhs)
326 {
return Product<OtherDerived,Derived>(lhs.derived(), rhs.derived()); }
334 template<
typename OtherDerived>
343 template<
unsigned int UpLo>
inline
345 template<
unsigned int UpLo>
inline
355 const ConstTransposeReturnType transpose()
const {
return ConstTransposeReturnType(derived()); }
356 const AdjointReturnType adjoint()
const {
return AdjointReturnType(transpose()); }
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); }
390 return internal::convert_index<StorageIndex>(idx);
393 template<
typename Dest>
void evalTo(Dest &)
const;
398 #endif // EIGEN_SPARSEMATRIXBASE_H
Index innerSize() const
Definition: SparseMatrixBase.h:192
Index cols() const
Definition: SparseMatrixBase.h:178
Definition: DenseCoeffsBase.h:17
Namespace containing all symbols from the Eigen library.
Definition: LDLT.h:16
A versatible sparse matrix representation.
Definition: SparseMatrix.h:98
Generic expression where a coefficient-wise binary operator is applied to two expressions.
Definition: CwiseBinaryOp.h:84
Scalar value_type
Definition: SparseMatrixBase.h:36
Index size() const
Definition: SparseMatrixBase.h:181
Definition: EigenBase.h:30
Definition: SparseMatrixBase.h:340
@ ColsAtCompileTime
Definition: SparseMatrixBase.h:65
const unsigned int RowMajorBit
Definition: Constants.h:65
Determines whether the given binary operation of two numeric types is allowed and what the scalar ret...
Definition: XprHelper.h:814
Index rows() const
Definition: SparseMatrixBase.h:176
internal::traits< Derived >::StorageIndex StorageIndex
Definition: SparseMatrixBase.h:43
Matrix< Scalar, RowsAtCompileTime, ColsAtCompileTime > DenseMatrixType
Definition: SparseMatrixBase.h:138
Definition: BinaryFunctors.h:71
Expression of the transpose of a matrix.
Definition: Transpose.h:54
const unsigned int DirectAccessBit
Definition: Constants.h:154
Generic expression of a matrix where all coefficients are defined by a functor.
Definition: CwiseNullaryOp.h:61
bool isVector() const
Definition: SparseMatrixBase.h:186
Definition: SparseMatrixBase.h:285
@ RowsAtCompileTime
Definition: SparseMatrixBase.h:59
Expression of a diagonal/subdiagonal/superdiagonal in a matrix.
Definition: Diagonal.h:65
Definition: SparseMatrixBase.h:341
@ SizeAtCompileTime
Definition: SparseMatrixBase.h:72
const internal::eval< Derived >::type eval() const
Definition: SparseMatrixBase.h:377
const SparseView< Derived > pruned(const Scalar &reference=Scalar(0), const RealScalar &epsilon=NumTraits< Scalar >::dummy_precision()) const
Definition: SparseView.h:246
Expression of the product of two arbitrary matrices or vectors.
Definition: Product.h:75
NumTraits< Scalar >::Real RealScalar
Definition: SparseMatrixBase.h:128
Definition: SparseSelfAdjointView.h:598
SparseSymmetricPermutationProduct< Derived, Upper|Lower > twistedBy(const PermutationMatrix< Dynamic, Dynamic, StorageIndex > &perm) const
Definition: SparseMatrixBase.h:329
@ NumDimensions
Definition: SparseMatrixBase.h:90
Index outerSize() const
Definition: SparseMatrixBase.h:189
Definition: ForwardDeclarations.h:17
Generic expression where a coefficient-wise unary operator is applied to an expression.
Definition: CwiseUnaryOp.h:56
@ IsVectorAtCompileTime
Definition: SparseMatrixBase.h:84
Expression of a dense or sparse matrix with zero or too small values removed.
Definition: SparseView.h:46
Base class of any sparse matrices or sparse expressions.
Definition: SparseMatrixBase.h:28
Pseudo expression to manipulate a triangular sparse matrix as a selfadjoint matrix.
Definition: SparseSelfAdjointView.h:45
Base class for all dense matrices, vectors, and expressions.
Definition: MatrixBase.h:50
Matrix< Scalar, EIGEN_SIZE_MAX(RowsAtCompileTime, ColsAtCompileTime), EIGEN_SIZE_MAX(RowsAtCompileTime, ColsAtCompileTime)> SquareMatrixType
Definition: SparseMatrixBase.h:141
Expression of a triangular part in a matrix.
Definition: TriangularMatrix.h:189
Definition: XprHelper.h:340
@ Flags
Definition: SparseMatrixBase.h:95
Definition: DiagonalMatrix.h:19
Holds information about the various numeric (i.e. scalar) types allowed by Eigen.
Definition: NumTraits.h:213
Definition: XprHelper.h:290
EIGEN_DEFAULT_DENSE_INDEX_TYPE Index
The Index type as used for the API.
Definition: Meta.h:42