WPILibC++ 2023.4.3-108-ge5452e3
SparseTranspose.h
Go to the documentation of this file.
1// This file is part of Eigen, a lightweight C++ template library
2// for linear algebra.
3//
4// Copyright (C) 2008-2015 Gael Guennebaud <gael.guennebaud@inria.fr>
5//
6// This Source Code Form is subject to the terms of the Mozilla
7// Public License v. 2.0. If a copy of the MPL was not distributed
8// with this file, You can obtain one at http://mozilla.org/MPL/2.0/.
9
10#ifndef EIGEN_SPARSETRANSPOSE_H
11#define EIGEN_SPARSETRANSPOSE_H
12
13namespace Eigen {
14
15namespace internal {
16 template<typename MatrixType,int CompressedAccess=int(MatrixType::Flags&CompressedAccessBit)>
18 : public SparseMatrixBase<Transpose<MatrixType> >
19 {};
20
21 template<typename MatrixType>
23 : public SparseCompressedBase<Transpose<MatrixType> >
24 {
26 public:
27 using Base::derived;
28 typedef typename Base::Scalar Scalar;
30
31 inline Index nonZeros() const { return derived().nestedExpression().nonZeros(); }
32
33 inline const Scalar* valuePtr() const { return derived().nestedExpression().valuePtr(); }
34 inline const StorageIndex* innerIndexPtr() const { return derived().nestedExpression().innerIndexPtr(); }
35 inline const StorageIndex* outerIndexPtr() const { return derived().nestedExpression().outerIndexPtr(); }
36 inline const StorageIndex* innerNonZeroPtr() const { return derived().nestedExpression().innerNonZeroPtr(); }
37
38 inline Scalar* valuePtr() { return derived().nestedExpression().valuePtr(); }
39 inline StorageIndex* innerIndexPtr() { return derived().nestedExpression().innerIndexPtr(); }
40 inline StorageIndex* outerIndexPtr() { return derived().nestedExpression().outerIndexPtr(); }
41 inline StorageIndex* innerNonZeroPtr() { return derived().nestedExpression().innerNonZeroPtr(); }
42 };
43}
44
45template<typename MatrixType> class TransposeImpl<MatrixType,Sparse>
46 : public internal::SparseTransposeImpl<MatrixType>
47{
48 protected:
50};
51
52namespace internal {
53
54template<typename ArgType>
56 : public evaluator_base<Transpose<ArgType> >
57{
59 public:
61
62 inline Index nonZerosEstimate() const {
63 return m_argImpl.nonZerosEstimate();
64 }
65
67 {
68 public:
70 : EvalIterator(unaryOp.m_argImpl,outer)
71 {}
72
73 Index row() const { return EvalIterator::col(); }
74 Index col() const { return EvalIterator::row(); }
75 };
76
77 enum {
79 Flags = XprType::Flags
80 };
81
82 explicit unary_evaluator(const XprType& op) :m_argImpl(op.nestedExpression()) {}
83
84 protected:
86};
87
88} // end namespace internal
89
90} // end namespace Eigen
91
92#endif // EIGEN_SPARSETRANSPOSE_H
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE ColXpr col(Index i)
This is the const version of col().
Definition: BlockMethods.h:1097
EIGEN_DEVICE_FUNC EIGEN_STRONG_INLINE RowXpr row(Index i)
This is the const version of row(). *‍/.
Definition: BlockMethods.h:1118
#define EIGEN_STRONG_INLINE
Definition: Macros.h:927
An InnerIterator allows to loop over the element of any matrix expression.
Definition: CoreIterators.h:34
Common base class for sparse [compressed]-{row|column}-storage format.
Definition: SparseCompressedBase.h:38
Base class of any sparse matrices or sparse expressions.
Definition: SparseMatrixBase.h:28
internal::traits< Transpose< MatrixType > >::StorageIndex StorageIndex
The integer type used to store indices within a SparseMatrix.
Definition: SparseMatrixBase.h:43
const Transpose< MatrixType > & derived() const
Definition: SparseMatrixBase.h:143
internal::traits< Transpose< MatrixType > >::Scalar Scalar
Definition: SparseMatrixBase.h:31
EigenBase< Transpose< MatrixType > > Base
Definition: SparseMatrixBase.h:148
Expression of the transpose of a matrix.
Definition: Transpose.h:54
internal::SparseTransposeImpl< MatrixType > Base
Definition: SparseTranspose.h:49
Definition: Transpose.h:113
const Scalar * valuePtr() const
Definition: SparseTranspose.h:33
Base::StorageIndex StorageIndex
Definition: SparseTranspose.h:29
StorageIndex * outerIndexPtr()
Definition: SparseTranspose.h:40
const StorageIndex * innerNonZeroPtr() const
Definition: SparseTranspose.h:36
const StorageIndex * outerIndexPtr() const
Definition: SparseTranspose.h:35
Index nonZeros() const
Definition: SparseTranspose.h:31
const StorageIndex * innerIndexPtr() const
Definition: SparseTranspose.h:34
StorageIndex * innerIndexPtr()
Definition: SparseTranspose.h:39
StorageIndex * innerNonZeroPtr()
Definition: SparseTranspose.h:41
Definition: SparseTranspose.h:19
EIGEN_STRONG_INLINE InnerIterator(const unary_evaluator &unaryOp, Index outer)
Definition: SparseTranspose.h:69
const unsigned int CompressedAccessBit
Means that the underlying coefficients can be accessed through pointers to the sparse (un)compressed ...
Definition: Constants.h:191
Namespace containing all symbols from the Eigen library.
Definition: Core:141
EIGEN_DEFAULT_DENSE_INDEX_TYPE Index
The Index type as used for the API.
Definition: Meta.h:74
Definition: Eigen_Colamd.h:50
Eigen::Index Index
The interface type of indices.
Definition: EigenBase.h:39
EIGEN_DEVICE_FUNC Transpose< MatrixType > & derived()
Definition: EigenBase.h:46
The type used to identify a general sparse storage.
Definition: Constants.h:510
Definition: Constants.h:545
Definition: CoreEvaluators.h:111
Definition: CoreEvaluators.h:91
evaluator< ArgType > m_argImpl
Definition: SparseTranspose.h:85
unary_evaluator(const XprType &op)
Definition: SparseTranspose.h:82
Index nonZerosEstimate() const
Definition: SparseTranspose.h:62
evaluator< ArgType >::InnerIterator EvalIterator
Definition: SparseTranspose.h:58
Transpose< ArgType > XprType
Definition: SparseTranspose.h:60
Definition: CoreEvaluators.h:65