mirror of
https://gitlab.com/libeigen/eigen.git
synced 2025-01-30 17:40:05 +08:00
Fix Ref<SparseMatrix> for Transpose<SparseVector>
This commit is contained in:
parent
752a0e5339
commit
2d287a4898
@ -114,7 +114,7 @@ class SparseMapBase<Derived,ReadOnlyAccessors>
|
|||||||
|
|
||||||
// for vectors
|
// for vectors
|
||||||
inline SparseMapBase(Index size, Index nnz, IndexPointer innerIndexPtr, ScalarPointer valuePtr)
|
inline SparseMapBase(Index size, Index nnz, IndexPointer innerIndexPtr, ScalarPointer valuePtr)
|
||||||
: m_outerSize(1), m_innerSize(size), m_zero_nnz(0,nnz), m_outerIndex(m_zero_nnz.data()),
|
: m_outerSize(1), m_innerSize(size), m_zero_nnz(0,internal::convert_index<StorageIndex>(nnz)), m_outerIndex(m_zero_nnz.data()),
|
||||||
m_innerIndices(innerIndexPtr), m_values(valuePtr), m_innerNonZeros(0)
|
m_innerIndices(innerIndexPtr), m_values(valuePtr), m_innerNonZeros(0)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
@ -173,6 +173,11 @@ class SparseMapBase<Derived,WriteAccessors>
|
|||||||
: Base(rows, cols, nnz, outerIndexPtr, innerIndexPtr, valuePtr, innerNonZerosPtr)
|
: Base(rows, cols, nnz, outerIndexPtr, innerIndexPtr, valuePtr, innerNonZerosPtr)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
|
// for vectors
|
||||||
|
inline SparseMapBase(Index size, Index nnz, StorageIndex* innerIndexPtr, Scalar* valuePtr)
|
||||||
|
: Base(size, nnz, innerIndexPtr, valuePtr)
|
||||||
|
{}
|
||||||
|
|
||||||
/** Empty destructor */
|
/** Empty destructor */
|
||||||
inline ~SparseMapBase() {}
|
inline ~SparseMapBase() {}
|
||||||
|
|
||||||
|
@ -66,23 +66,13 @@ public:
|
|||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
|
|
||||||
template<typename Expression>
|
template<typename Expression>
|
||||||
void construct(Expression& expr)
|
void construct(Expression& expr)
|
||||||
{
|
{
|
||||||
::new (static_cast<Base*>(this)) Base(expr.rows(), expr.cols(), expr.nonZeros(), expr.outerIndexPtr(), expr.innerIndexPtr(), expr.valuePtr(), expr.innerNonZeroPtr());
|
if(expr.outerIndexPtr()==0)
|
||||||
}
|
::new (static_cast<Base*>(this)) Base(expr.size(), expr.nonZeros(), expr.innerIndexPtr(), expr.valuePtr());
|
||||||
|
else
|
||||||
template<int ExprOptions>
|
::new (static_cast<Base*>(this)) Base(expr.rows(), expr.cols(), expr.nonZeros(), expr.outerIndexPtr(), expr.innerIndexPtr(), expr.valuePtr(), expr.innerNonZeroPtr());
|
||||||
void construct(const SparseVector<Scalar,ExprOptions,StorageIndex>& expr)
|
|
||||||
{
|
|
||||||
::new (static_cast<Base*>(this)) Base(expr.size(), expr.nonZeros(), expr.innerIndexPtr(), expr.valuePtr());
|
|
||||||
}
|
|
||||||
|
|
||||||
template<int ExprOptions>
|
|
||||||
void construct(SparseVector<Scalar,ExprOptions,StorageIndex>& expr)
|
|
||||||
{
|
|
||||||
::new (static_cast<Base*>(this)) Base(expr.size(), expr.nonZeros(), expr.innerIndexPtr(), expr.valuePtr());
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -27,12 +27,14 @@ namespace internal {
|
|||||||
using Base::derived;
|
using Base::derived;
|
||||||
typedef typename Base::Scalar Scalar;
|
typedef typename Base::Scalar Scalar;
|
||||||
typedef typename Base::StorageIndex StorageIndex;
|
typedef typename Base::StorageIndex StorageIndex;
|
||||||
|
|
||||||
|
inline Index nonZeros() const { return derived().nestedExpression().nonZeros(); }
|
||||||
|
|
||||||
inline const Scalar* valuePtr() const { return derived().nestedExpression().valuePtr(); }
|
inline const Scalar* valuePtr() const { return derived().nestedExpression().valuePtr(); }
|
||||||
inline const StorageIndex* innerIndexPtr() const { return derived().nestedExpression().innerIndexPtr(); }
|
inline const StorageIndex* innerIndexPtr() const { return derived().nestedExpression().innerIndexPtr(); }
|
||||||
inline const StorageIndex* outerIndexPtr() const { return derived().nestedExpression().outerIndexPtr(); }
|
inline const StorageIndex* outerIndexPtr() const { return derived().nestedExpression().outerIndexPtr(); }
|
||||||
inline const StorageIndex* innerNonZeroPtr() const { return derived().nestedExpression().innerNonZeroPtr(); }
|
inline const StorageIndex* innerNonZeroPtr() const { return derived().nestedExpression().innerNonZeroPtr(); }
|
||||||
|
|
||||||
inline Scalar* valuePtr() { return derived().nestedExpression().valuePtr(); }
|
inline Scalar* valuePtr() { return derived().nestedExpression().valuePtr(); }
|
||||||
inline StorageIndex* innerIndexPtr() { return derived().nestedExpression().innerIndexPtr(); }
|
inline StorageIndex* innerIndexPtr() { return derived().nestedExpression().innerIndexPtr(); }
|
||||||
inline StorageIndex* outerIndexPtr() { return derived().nestedExpression().outerIndexPtr(); }
|
inline StorageIndex* outerIndexPtr() { return derived().nestedExpression().outerIndexPtr(); }
|
||||||
|
Loading…
Reference in New Issue
Block a user