55 unsigned char * pnLitsDiff;
60 int nCubes, nBitsMax, nSum;
61 int CutOffNum = -1, CutOffQuant = -1;
62 int iPair, iQuant, k, c;
67 assert( nPairsMax < nPairsTotal );
70 pnLitsDiff =
ABC_FALLOC(
unsigned char, nPairsTotal );
74 for ( c = 0; c < vCovers->nSize; c++ )
75 if ( (pSopCover = (
char *)vCovers->pArray[c]) )
79 Fxu_CountPairDiffs( pSopCover, pnLitsDiff + iPair );
82 iPair += nCubes * (nCubes - 1) / 2;
83 if ( nBitsMax < nFanins )
86 assert( iPair == nPairsTotal );
91 pnPairCounters =
ABC_CALLOC(
int, 2 * nBitsMax );
93 for ( k = 0; k < nPairsTotal; k++ )
94 pnPairCounters[ pnLitsDiff[k] ]++;
97 if ( pnPairCounters[0] != 0 )
101 printf(
"The SOPs of the nodes contain duplicated cubes. Run \"bdd; sop\" before \"fx\".\n" );
104 if ( pnPairCounters[1] != 0 )
108 printf(
"The SOPs of the nodes are not SCC-free. Run \"bdd; sop\" before \"fx\".\n" );
111 assert( pnPairCounters[0] == 0 );
112 assert( pnPairCounters[1] == 0 );
114 for ( k = 0; k < 2 * nBitsMax; k++ )
116 nSum += pnPairCounters[k];
117 if ( nSum >= nPairsMax )
120 CutOffQuant = pnPairCounters[k] - (nSum - nPairsMax);
129 for ( k = 0; k < nPairsTotal; k++ )
130 if ( pnLitsDiff[k] > CutOffNum )
132 else if ( pnLitsDiff[k] == CutOffNum )
134 if ( iQuant++ >= CutOffQuant )
141 assert( iPair == nPairsMax );
145 for ( c = 0; c < vCovers->nSize; c++ )
146 if ( (pSopCover = (
char *)vCovers->pArray[c]) )
149 pVar =
p->ppVars[2*c+1];
151 pCubeFirst = pVar->
pFirst;
153 pCubeLast = pCubeFirst;
154 for ( k = 0; k < pVar->
nCubes; k++ )
155 pCubeLast = pCubeLast->
pNext;
156 assert( pCubeLast == NULL || pCubeLast->
pVar != pVar );
159 for ( pCube1 = pCubeFirst; pCube1 != pCubeLast; pCube1 = pCube1->
pNext )
160 for ( pCube2 = pCube1->
pNext; pCube2 != pCubeLast; pCube2 = pCube2->
pNext )
161 if ( pnLitsDiff[iPair++] )
166 assert( iPair == nPairsTotal );
192 int nOnes, nCubePairs, nFanins, v;
int Fxu_PreprocessCubePairs(Fxu_Matrix *p, Vec_Ptr_t *vCovers, int nPairsTotal, int nPairsMax)
FUNCTION DEFINITIONS ///.