[eigen] Map and pointer freeing in unsupported/Eigen/src/SparseExtra/CholmodSupport.h

[ Thread Index | Date Index | More lists.tuxfamily.org/eigen Archives ]


	/** \internal */
	template<typename Rhs,typename Dest>
	void _solve(const MatrixBase<Rhs> &b, MatrixBase<Dest> &dest) const
	{
	    eigen_assert(m_factorizationIsOk && "The decomposition is not in
a valid state for solving, you must first call either compute() or
symbolic()/numeric()");
	    const Index size = m_cholmodFactor->n;
	    eigen_assert(size==b.rows());
	
	    // note: cd stands for Cholmod Dense
	    cholmod_dense b_cd = viewAsCholmod(b.const_cast_derived());
	    cholmod_dense* x_cd = cholmod_solve(m_solveType, m_cholmodFactor,
&b_cd, &m_cholmod);
	    if(!x_cd)
	    {
		this->m_info = NumericalIssue;
	    }
	    // TODO optimize this copy by swapping when possible (be carreful
with alignment, etc.)
	    dest = Matrix<Scalar,Dest::RowsAtCompileTime,Dest::ColsAtCompileTime>::Map(reinterpret_cast<Scalar*>(x_cd->x),b.rows(),b.cols());
	    cholmod_free_dense(&x_cd, &m_cholmod);
	}
	
It appears to me that the last two lines change the dest argument to
map the storage from the (x_cd->x) pointer then free that storage
(cholmod_free_dense frees all the storage pointed to by the members of
the cholmod_dense struct).



Mail converted by MHonArc 2.6.19+ http://listengine.tuxfamily.org/