235#if defined(PASTIX_BLEND_PROPMAP_2STEPS)
236 Cand *oldcand = *candtab;
246 if( extracblk->
addcblk == 0 ) {
260#if defined(PASTIX_BLEND_PROPMAP_2STEPS)
265 newcand[-1] = oldcand[-1];
285 for(i=0; i<oldsymb->
cblknbr; i++)
296 addblok += (((sptcbnbw+1) * sptcbnbw) / 2) - 1;
297 for(j=fbloknum+1; j<lbloknum; j++)
311 for(k = 0; k < sptfcbnb; k++, newfcblk++)
314 if ( frownum > newfcblk->
lcolnum ) {
319 if ( lrownum < newfcblk->fcolnum ) {
323 assert( frownum <= lrownum );
336 addblok += sptcbnbw * sptcbnbh - 1;
351 if ( nbcblk2copy > 0 ) {
353 memcpy( newsymb->
cblktab + newnum[ lastcblksplit ],
354 oldsymb->
cblktab + lastcblksplit,
357#if defined(PASTIX_BLEND_PROPMAP_2STEPS)
358 memcpy( newcand + newnum[ lastcblksplit ],
359 oldcand + lastcblksplit,
360 nbcblk2copy *
sizeof(
Cand) );
365 assert( (sptcblk >= 0) && (sptcblk <= extracblk->curcblk) );
366 memcpy( newsymb->
cblktab + newcblknum,
371 for(j=0; j<sptcbnbw; j++, sptcblk++) {
372 extranewnum[sptcblk] = newcblknum+j;
374 assert( (extranewnum[sptcblk] >= 0) &&
375 (extranewnum[sptcblk] < newsymb->
cblknbr) );
377#if defined(PASTIX_BLEND_PROPMAP_2STEPS)
378 memcpy( newcand + extranewnum[ sptcblk ],
379 oldcand + i,
sizeof(
Cand) );
386 newnum[i+1] += newcblknum;
391 if ( lastcblksplit < (oldsymb->
cblknbr-1) )
395 memcpy( newsymb->
cblktab + newnum[ lastcblksplit ],
396 oldsymb->
cblktab + lastcblksplit,
399#if defined(PASTIX_BLEND_PROPMAP_2STEPS)
400 memcpy( newcand + newnum[ lastcblksplit ],
401 oldcand + lastcblksplit,
402 nbcblk2copy *
sizeof(
Cand) );
406#if defined(PASTIX_BLEND_PROPMAP_2STEPS)
421#if defined(PASTIX_SYMBOL_DUMP_SYMBMTX)
424 for(i=0; i<oldsymb->
cblknbr; i++)
431 for(j=0; j<sptcbnbw; j++, curcblknum++, curcblk++)
436#if defined(PASTIX_SYMBOL_DUMP_SYMBMTX)
437 cblk->split_cblk = sptcbnbw-j-1;
442 for(k=0; k<(sptcbnbw-j); k++, curbloknum++, curblok++)
447 curblok->
fcblknm = curcblknum + k;
452 for(k=fbloknum+1; k<lbloknum; k++)
466 assert( newfcblknum != -1 );
467 assert( newfcblk != NULL );
470 for(l=0; l<sptfcbnb; l++, newfcblk++)
473 if ( frownum > newfcblk->
lcolnum ) {
478 if ( lrownum < newfcblk->fcolnum ) {
482 assert( frownum <= lrownum );
483 assert( frownum >= newfcblk->
fcolnum );
488 curblok->
fcblknm = newfcblknum + l;
489 curblok++; curbloknum++;
499 curblok->
fcblknm = newnum[fcblknum];
500 curblok++; curbloknum++;
506 assert(curcblknum == newsymb->
cblknbr);
507 assert(curbloknum == newsymb->
bloknbr);
513 memFree_null(oldsymb);
514 memFree_null(newnum);
515 memFree_null(extranewnum);
520 curcblk[0].
bloknum = curbloknum;
void extraCblkAdd(ExtraCblk_t *extracblk, pastix_int_t fcolnum, pastix_int_t lcolnum, int8_t selevtx)
Add a new additional cblk defined by its first and last columns.
void extraCblkMerge(const ExtraCblk_t *extracblk, symbol_matrix_t *newsymb, Cand **candtab)
Merge the existing symbol structure with the additional information from the extracblk structure.