/**Function************************************************************* Synopsis [Performs incremental sorting of cuts.] Description [Currently only the trivial sorting is implemented.] SideEffects [] SeeAlso [] ***********************************************************************/ void If_CutSort( If_Man_t * p, If_Set_t * pCutSet, If_Cut_t * pCut ) { // int Counter = 0; int i; // the new cut is the last one assert( pCutSet->ppCuts[pCutSet->nCuts] == pCut ); assert( pCutSet->nCuts <= pCutSet->nCutsMax ); // cut structure is empty if ( pCutSet->nCuts == 0 ) { pCutSet->nCuts++; return; } // the cut will be added - find its place for ( i = pCutSet->nCuts-1; i >= 0; i-- ) { // Counter++; if ( If_ManSortCompare( p, pCutSet->ppCuts[i], pCut ) <= 0 ) break; pCutSet->ppCuts[i+1] = pCutSet->ppCuts[i]; pCutSet->ppCuts[i] = pCut; } // printf( "%d ", Counter ); // update the number of cuts if ( pCutSet->nCuts < pCutSet->nCutsMax ) pCutSet->nCuts++; }
/**Function************************************************************* Synopsis [Performs incremental sorting of cuts.] Description [Currently only the trivial sorting is implemented.] SideEffects [] SeeAlso [] ***********************************************************************/ void If_CutSort( If_Man_t * p, If_Set_t * pCutSet, If_Cut_t * pCut ) { // int Counter = 0; int i; // the new cut is the last one assert( pCutSet->ppCuts[pCutSet->nCuts] == pCut ); assert( pCutSet->nCuts <= pCutSet->nCutsMax ); // cut structure is empty if ( pCutSet->nCuts == 0 ) { pCutSet->nCuts++; return; } if ( (p->pPars->fUseBat || p->pPars->fEnableCheck07 || p->pPars->fEnableCheck08 || p->pPars->fEnableCheck10 || p->pPars->pLutStruct || p->pPars->fUserRecLib) && !pCut->fUseless ) { If_Cut_t * pFirst = pCutSet->ppCuts[0]; if ( pFirst->fUseless || If_ManSortCompare(p, pFirst, pCut) == 1 ) { pCutSet->ppCuts[0] = pCut; pCutSet->ppCuts[pCutSet->nCuts] = pFirst; If_CutSort( p, pCutSet, pFirst ); return; } } // the cut will be added - find its place for ( i = pCutSet->nCuts-1; i >= 0; i-- ) { // Counter++; if ( If_ManSortCompare( p, pCutSet->ppCuts[i], pCut ) <= 0 || (i == 0 && !pCutSet->ppCuts[0]->fUseless && pCut->fUseless) ) break; pCutSet->ppCuts[i+1] = pCutSet->ppCuts[i]; pCutSet->ppCuts[i] = pCut; } // Abc_Print( 1, "%d ", Counter ); // update the number of cuts if ( pCutSet->nCuts < pCutSet->nCutsMax ) pCutSet->nCuts++; }