10 #ifndef EIGEN_SPARSETRANSPOSE_H
11 #define EIGEN_SPARSETRANSPOSE_H
16 template<
typename MatrixType,
int CompressedAccess=
int(MatrixType::Flags&CompressedAccessBit)>
17 class SparseTransposeImpl
18 :
public SparseMatrixBase<Transpose<MatrixType> >
21 template<
typename MatrixType>
23 :
public SparseCompressedBase<Transpose<MatrixType> >
25 typedef SparseCompressedBase<Transpose<MatrixType> > Base;
28 typedef typename Base::Scalar Scalar;
29 typedef typename Base::StorageIndex StorageIndex;
31 inline const Scalar* valuePtr()
const {
return derived().nestedExpression().valuePtr(); }
32 inline const StorageIndex* innerIndexPtr()
const {
return derived().nestedExpression().innerIndexPtr(); }
33 inline const StorageIndex* outerIndexPtr()
const {
return derived().nestedExpression().outerIndexPtr(); }
34 inline const StorageIndex* innerNonZeroPtr()
const {
return derived().nestedExpression().innerNonZeroPtr(); }
36 inline Scalar* valuePtr() {
return derived().nestedExpression().valuePtr(); }
37 inline StorageIndex* innerIndexPtr() {
return derived().nestedExpression().innerIndexPtr(); }
38 inline StorageIndex* outerIndexPtr() {
return derived().nestedExpression().outerIndexPtr(); }
39 inline StorageIndex* innerNonZeroPtr() {
return derived().nestedExpression().innerNonZeroPtr(); }
43 template<
typename MatrixType>
class TransposeImpl<MatrixType,Sparse>
44 :
public internal::SparseTransposeImpl<MatrixType>
47 typedef internal::SparseTransposeImpl<MatrixType> Base;
52 template<
typename ArgType>
53 struct unary_evaluator<Transpose<ArgType>, IteratorBased>
54 :
public evaluator_base<Transpose<ArgType> >
56 typedef typename evaluator<ArgType>::InnerIterator EvalIterator;
57 typedef typename evaluator<ArgType>::ReverseInnerIterator EvalReverseIterator;
59 typedef Transpose<ArgType> XprType;
61 inline Index nonZerosEstimate()
const {
62 return m_argImpl.nonZerosEstimate();
65 class InnerIterator :
public EvalIterator
68 EIGEN_STRONG_INLINE InnerIterator(
const unary_evaluator& unaryOp, Index outer)
69 : EvalIterator(unaryOp.m_argImpl,outer)
72 Index row()
const {
return EvalIterator::col(); }
73 Index col()
const {
return EvalIterator::row(); }
76 class ReverseInnerIterator :
public EvalReverseIterator
79 EIGEN_STRONG_INLINE ReverseInnerIterator(
const unary_evaluator& unaryOp, Index outer)
80 : EvalReverseIterator(unaryOp.m_argImpl,outer)
83 Index row()
const {
return EvalReverseIterator::col(); }
84 Index col()
const {
return EvalReverseIterator::row(); }
88 CoeffReadCost = evaluator<ArgType>::CoeffReadCost,
89 Flags = XprType::Flags
92 explicit unary_evaluator(
const XprType& op) :m_argImpl(op.nestedExpression()) {}
95 evaluator<ArgType> m_argImpl;
102 #endif // EIGEN_SPARSETRANSPOSE_H
const unsigned int CompressedAccessBit
Definition: Constants.h:177
Derived & derived()
Definition: EigenBase.h:44
Definition: Eigen_Colamd.h:54