@@ -52,12 +52,12 @@ namespace cubool {
5252 mCachedJ .push_back (j);
5353 }
5454
55- void Matrix::build (const index *rows, const index *cols, size_t nvals, bool isSorted, bool hasDuplicates ) {
55+ void Matrix::build (const index *rows, const index *cols, size_t nvals, bool isSorted, bool noDuplicates ) {
5656 CHECK_RAISE_ERROR (rows != nullptr || nvals == 0 , InvalidArgument, " Null ptr rows array" );
5757 CHECK_RAISE_ERROR (cols != nullptr || nvals == 0 , InvalidArgument, " Null ptr cols array" );
5858
5959 this ->releaseCache ();
60- mHnd ->build (rows, cols, nvals, isSorted, hasDuplicates );
60+ mHnd ->build (rows, cols, nvals, isSorted, noDuplicates );
6161 }
6262
6363 void Matrix::extract (index *rows, index *cols, size_t &nvals) {
@@ -205,6 +205,15 @@ namespace cubool {
205205 return mHnd ->getNvals ();
206206 }
207207
208+ void Matrix::setDebugMarker (const char *marker) {
209+ CHECK_RAISE_ERROR (marker, InvalidArgument, " Null pointer marker string" );
210+ mMarker = marker;
211+ }
212+
213+ const char * Matrix::getDebugMarker () const {
214+ return mMarker .c_str ();
215+ }
216+
208217 void Matrix::releaseCache () const {
209218 mCachedI .clear ();
210219 mCachedJ .clear ();
@@ -219,17 +228,22 @@ namespace cubool {
219228 if (cachedNvals == 0 )
220229 return ;
221230
222- size_t currentNvals = mHnd ->getNvals ();
231+ bool isSorted = false ;
232+ bool noDuplicates = false ;
223233
224- // Read values from backend matrix and join
225- if (currentNvals > 0 ) {
226- mCachedI .resize (cachedNvals + currentNvals);
227- mCachedJ .resize (cachedNvals + currentNvals);
228- mHnd ->extract (mCachedI .data () + cachedNvals, mCachedJ .data () + cachedNvals, currentNvals);
229- }
234+ // We will have to join old and new values
235+ if (mHnd ->getNvals () > 0 ) {
236+ // Build tmp matrix with new values
237+ MatrixBase* tmp = mProvider ->createMatrix (getNrows (), getNcols ());
238+ tmp->build (mCachedI .data (), mCachedJ .data (), cachedNvals, isSorted, noDuplicates);
230239
231- // Build matrix
232- mHnd ->build (mCachedI .data (), mCachedJ .data (), cachedNvals + currentNvals, false , true );
240+ // Add new values to current matrix content
241+ mHnd ->eWiseAdd (*mHnd , *tmp);
242+ }
243+ // Otherwise, new values are used to build matrix content
244+ else {
245+ mHnd ->build (mCachedI .data (), mCachedJ .data (), cachedNvals, isSorted, noDuplicates);
246+ }
233247
234248 // Clear arrays
235249 releaseCache ();
0 commit comments