@@ -74,27 +74,21 @@ class CSparse::Impl {
7474 cs_nfree (numericCholesky);
7575 numericCholesky = nullptr ;
7676 }
77- delete[] csWorkspace;
78- csWorkspace = nullptr ;
79- delete[] csIntWorkspace;
80- csIntWorkspace = nullptr ;
8177 }
8278
8379 void prepareWorkspace () {
8480 // re-allocate the temporary workspace for cholesky
85- if (csWorkspaceSize < ccsA.n ) {
86- csWorkspaceSize = csWorkspaceSize == 0 ? ccsA.n : 2 * ccsA.n ;
87- delete[] csWorkspace;
88- csWorkspace = new double [csWorkspaceSize];
89- delete[] csIntWorkspace;
90- csIntWorkspace = new int [2L * csWorkspaceSize];
81+ if (csWorkspace.size () < ccsA.n ) {
82+ const size_t desired_size = csWorkspace.empty () ? ccsA.n : 2 * ccsA.n ;
83+ csWorkspace.resize (desired_size);
84+ csIntWorkspace.resize (2L * desired_size);
9185 }
9286 }
9387
9488 css* symbolicDecomposition = nullptr ;
9589 int csWorkspaceSize = 0 ;
96- double * csWorkspace = nullptr ;
97- int * csIntWorkspace = nullptr ;
90+ std::vector< double > csWorkspace;
91+ std::vector< int > csIntWorkspace;
9892 csn* numericCholesky = nullptr ;
9993 CSparseExt ccsA;
10094};
@@ -150,8 +144,8 @@ bool CSparse::solve(double* x, double* b) const {
150144
151145 if (x != b) memcpy (x, b, pImpl_->ccsA .n * sizeof (double ));
152146 const int ok = csparse_extension::cs_cholsolsymb (
153- &pImpl_->ccsA , x, pImpl_->symbolicDecomposition , pImpl_-> csWorkspace ,
154- pImpl_->csIntWorkspace );
147+ &pImpl_->ccsA , x, pImpl_->symbolicDecomposition ,
148+ pImpl_->csWorkspace . data (), pImpl_-> csIntWorkspace . data () );
155149 return static_cast <bool >(ok);
156150}
157151
@@ -193,8 +187,8 @@ bool CSparse::factorize() {
193187 pImpl_->prepareWorkspace ();
194188 freeFactor ();
195189 pImpl_->numericCholesky = csparse_extension::cs_chol_workspace (
196- &pImpl_->ccsA , pImpl_->symbolicDecomposition , pImpl_-> csIntWorkspace ,
197- pImpl_->csWorkspace );
190+ &pImpl_->ccsA , pImpl_->symbolicDecomposition ,
191+ pImpl_->csIntWorkspace . data (), pImpl_-> csWorkspace . data () );
198192
199193 return pImpl_->numericCholesky != nullptr ;
200194}
0 commit comments