aboutsummaryrefslogtreecommitdiffhomepage
path: root/Eigen/src/SparseCore/SparseTranspose.h
diff options
context:
space:
mode:
authorGravatar Gael Guennebaud <g.gael@free.fr>2015-02-07 22:02:14 +0100
committerGravatar Gael Guennebaud <g.gael@free.fr>2015-02-07 22:02:14 +0100
commit08081f829397de11651d8d779b9eed916ccc88d7 (patch)
tree83ac72a65d1f94a3c2930e8020074eca9bc2c6eb /Eigen/src/SparseCore/SparseTranspose.h
parent7838fda82cfc49b40e8d3a615bb05711815b50e1 (diff)
Make SparseTranspose inherit SparseCompressBase when possible
Diffstat (limited to 'Eigen/src/SparseCore/SparseTranspose.h')
-rw-r--r--Eigen/src/SparseCore/SparseTranspose.h34
1 files changed, 31 insertions, 3 deletions
diff --git a/Eigen/src/SparseCore/SparseTranspose.h b/Eigen/src/SparseCore/SparseTranspose.h
index c3d2d1a16..37ce7b0d5 100644
--- a/Eigen/src/SparseCore/SparseTranspose.h
+++ b/Eigen/src/SparseCore/SparseTranspose.h
@@ -1,7 +1,7 @@
// This file is part of Eigen, a lightweight C++ template library
// for linear algebra.
//
-// Copyright (C) 2008-2014 Gael Guennebaud <gael.guennebaud@inria.fr>
+// Copyright (C) 2008-2015 Gael Guennebaud <gael.guennebaud@inria.fr>
//
// This Source Code Form is subject to the terms of the Mozilla
// Public License v. 2.0. If a copy of the MPL was not distributed
@@ -12,13 +12,41 @@
namespace Eigen {
+namespace internal {
+ template<typename MatrixType,int CompressedAccess=int(MatrixType::Flags&CompressedAccessBit)>
+ class SparseTransposeImpl
+ : public SparseMatrixBase<Transpose<MatrixType> >
+ {};
+
+ template<typename MatrixType>
+ class SparseTransposeImpl<MatrixType,CompressedAccessBit>
+ : public SparseCompressedBase<Transpose<MatrixType> >
+ {
+ typedef SparseCompressedBase<Transpose<MatrixType> > Base;
+ public:
+ using Base::derived;
+ typedef typename Base::Scalar Scalar;
+ typedef typename Base::Index Index;
+
+ inline const Scalar* valuePtr() const { return derived().nestedExpression().valuePtr(); }
+ inline const Index* innerIndexPtr() const { return derived().nestedExpression().innerIndexPtr(); }
+ inline const Index* outerIndexPtr() const { return derived().nestedExpression().outerIndexPtr(); }
+ inline const Index* innerNonZeroPtr() const { return derived().nestedExpression().innerNonZeroPtr(); }
+
+ inline Scalar* valuePtr() { return derived().nestedExpression().valuePtr(); }
+ inline Index* innerIndexPtr() { return derived().nestedExpression().innerIndexPtr(); }
+ inline Index* outerIndexPtr() { return derived().nestedExpression().outerIndexPtr(); }
+ inline Index* innerNonZeroPtr() { return derived().nestedExpression().innerNonZeroPtr(); }
+ };
+}
+
// Implement nonZeros() for transpose. I'm not sure that's the best approach for that.
// Perhaps it should be implemented in Transpose<> itself.
template<typename MatrixType> class TransposeImpl<MatrixType,Sparse>
- : public SparseMatrixBase<Transpose<MatrixType> >
+ : public internal::SparseTransposeImpl<MatrixType>
{
protected:
- typedef SparseMatrixBase<Transpose<MatrixType> > Base;
+ typedef internal::SparseTransposeImpl<MatrixType> Base;
public:
inline typename MatrixType::Index nonZeros() const { return Base::derived().nestedExpression().nonZeros(); }
};