ext/eigen/eigen3/Eigen/src/SparseCore/SparseMatrix.h in ruby-eigen-0.0.11.pre1 vs ext/eigen/eigen3/Eigen/src/SparseCore/SparseMatrix.h in ruby-eigen-0.0.11.pre2
- old
+ new
@@ -285,10 +285,11 @@
#endif // EIGEN_PARSED_BY_DOXYGEN
protected:
template<class SizesType>
inline void reserveInnerVectors(const SizesType& reserveSizes)
{
+ rubyeigen_gc_add_count(m_outerSize * sizeof(Index));
if(isCompressed())
{
std::size_t totalReserveSize = 0;
// turn the matrix into non-compressed mode
m_innerNonZeros = static_cast<Index*>(std::malloc(m_outerSize * sizeof(Index)));
@@ -477,10 +478,11 @@
/** Turns the matrix into the uncompressed mode */
void uncompress()
{
if(m_innerNonZeros != 0)
return;
+ rubyeigen_gc_add_count(m_outerSize * sizeof(Index));
m_innerNonZeros = static_cast<Index*>(std::malloc(m_outerSize * sizeof(Index)));
for (Index i = 0; i < m_outerSize; i++)
{
m_innerNonZeros[i] = m_outerIndex[i+1] - m_outerIndex[i];
}
@@ -553,10 +555,11 @@
m_innerNonZeros[i] = 0;
}
else if (innerChange < 0)
{
// Inner size decreased: allocate a new m_innerNonZeros
+ rubyeigen_gc_add_count(m_outerSize * sizeof(Index));
m_innerNonZeros = static_cast<Index*>(std::malloc((m_outerSize+outerChange+1) * sizeof(Index)));
if (!m_innerNonZeros) internal::throw_std_bad_alloc();
for(Index i = 0; i < m_outerSize; i++)
m_innerNonZeros[i] = m_outerIndex[i+1] - m_outerIndex[i];
}
@@ -599,9 +602,10 @@
m_innerSize = IsRowMajor ? cols : rows;
m_data.clear();
if (m_outerSize != outerSize || m_outerSize==0)
{
std::free(m_outerIndex);
+ rubyeigen_gc_add_count(outerSize * sizeof(Index));
m_outerIndex = static_cast<Index*>(std::malloc((outerSize + 1) * sizeof(Index)));
if (!m_outerIndex) internal::throw_std_bad_alloc();
m_outerSize = outerSize;
}