various minor fixes in Sparse module

This commit is contained in:
Gael Guennebaud 2009-02-10 10:00:00 +00:00
parent 169696a078
commit e75bef9523
3 changed files with 15 additions and 9 deletions

View File

@ -127,6 +127,8 @@ class DynamicSparseMatrix
/** Set the matrix to zero and reserve the memory for \a reserveSize nonzero coefficients. */ /** Set the matrix to zero and reserve the memory for \a reserveSize nonzero coefficients. */
inline void startFill(int reserveSize = 1000) inline void startFill(int reserveSize = 1000)
{
if (outerSize()>0)
{ {
int reserveSizePerVector = std::max(reserveSize/outerSize(),4); int reserveSizePerVector = std::max(reserveSize/outerSize(),4);
for (int j=0; j<outerSize(); ++j) for (int j=0; j<outerSize(); ++j)
@ -135,6 +137,7 @@ class DynamicSparseMatrix
m_data[j].reserve(reserveSizePerVector); m_data[j].reserve(reserveSizePerVector);
} }
} }
}
/** inserts a nonzero coefficient at given coordinates \a row, \a col and returns its reference assuming that: /** inserts a nonzero coefficient at given coordinates \a row, \a col and returns its reference assuming that:
* 1 - the coefficient does not exist yet * 1 - the coefficient does not exist yet
@ -218,7 +221,7 @@ class DynamicSparseMatrix
} }
inline DynamicSparseMatrix() inline DynamicSparseMatrix()
: m_innerSize(0) : m_innerSize(0), m_data(0)
{ {
ei_assert(innerSize()==0 && outerSize()==0); ei_assert(innerSize()==0 && outerSize()==0);
} }

View File

@ -42,7 +42,7 @@ struct ei_traits<SparseDiagonalProduct<Lhs, Rhs> > : ei_traits<SparseProduct<Lhs
typedef typename ei_cleantype<Lhs>::type _Lhs; typedef typename ei_cleantype<Lhs>::type _Lhs;
typedef typename ei_cleantype<Rhs>::type _Rhs; typedef typename ei_cleantype<Rhs>::type _Rhs;
enum { enum {
SparseFlags = ((int(_Lhs::Flags)&Diagonal)==Diagonal) ? _Rhs::Flags : _Lhs::Flags, SparseFlags = ((int(_Lhs::Flags)&Diagonal)==Diagonal) ? int(_Rhs::Flags) : int(_Lhs::Flags),
Flags = SparseBit | (SparseFlags&RowMajorBit) Flags = SparseBit | (SparseFlags&RowMajorBit)
}; };
}; };

View File

@ -138,7 +138,6 @@ class SparseMatrix
*/ */
inline void startFill(int reserveSize = 1000) inline void startFill(int reserveSize = 1000)
{ {
// std::cerr << this << " startFill\n";
setZero(); setZero();
m_data.reserve(reserveSize); m_data.reserve(reserveSize);
} }
@ -161,6 +160,10 @@ class SparseMatrix
} }
m_outerIndex[outer+1] = m_outerIndex[outer]; m_outerIndex[outer+1] = m_outerIndex[outer];
} }
else
{
ei_assert(m_data.index(m_data.size()-1)<inner && "wrong sorted insertion");
}
assert(size_t(m_outerIndex[outer+1]) == m_data.size()); assert(size_t(m_outerIndex[outer+1]) == m_data.size());
int id = m_outerIndex[outer+1]; int id = m_outerIndex[outer+1];
++m_outerIndex[outer+1]; ++m_outerIndex[outer+1];
@ -390,11 +393,11 @@ class SparseMatrix
s << std::endl; s << std::endl;
s << std::endl; s << std::endl;
s << "Column pointers:\n"; s << "Column pointers:\n";
for (int i=0; i<m.cols(); ++i) for (int i=0; i<m.outerSize(); ++i)
{ {
s << m.m_outerIndex[i] << " "; s << m.m_outerIndex[i] << " ";
} }
s << std::endl; s << " $" << std::endl;
s << std::endl; s << std::endl;
); );
s << static_cast<const SparseMatrixBase<SparseMatrix>&>(m); s << static_cast<const SparseMatrixBase<SparseMatrix>&>(m);