51 cResult->pCubes = Vec_IntFetch( vMemory, Vec_IntSize(vInput) );
54 Kit_SopPushCube( cResult, uCube );
70 unsigned uCube, uMask = 0;
71 int i, nCubes = Vec_IntSize(vInput);
74 cResult->pCubes = Vec_IntFetch( vMemory, nCubes );
77 for ( i = 0; i < nCubes; i++ )
79 uCube = Vec_IntEntry( vInput, i );
80 uMask = ((uCube | (uCube >> 1)) & 0x55555555);
81 uMask |= (uMask << 1);
82 Kit_SopPushCube( cResult, uCube ^ uMask );
103 cResult->pCubes = Vec_IntFetch( vMemory, Kit_SopCubeNum(cSop) );
106 Kit_SopPushCube( cResult, uCube );
127 if ( Kit_CubeHasLit(uCube, iLit) )
128 Kit_SopWriteCube( cSop, Kit_CubeRemLit(uCube, iLit), k++ );
130 Kit_SopShrink( cSop, k );
147 unsigned uCube, uDiv;
150 assert( Kit_SopCubeNum(cDiv) == 1 );
151 uDiv = Kit_SopCube(cDiv, 0);
154 vQuo->pCubes = Vec_IntFetch( vMemory, Kit_SopCubeNum(cSop) );
156 vRem->pCubes = Vec_IntFetch( vMemory, Kit_SopCubeNum(cSop) );
160 if ( Kit_CubeContains( uCube, uDiv ) )
161 Kit_SopPushCube( vQuo, Kit_CubeSharp(uCube, uDiv) );
163 Kit_SopPushCube( vRem, uCube );
180 unsigned uCube, uDiv;
182 unsigned uDiv2, uQuo;
183 int i, i2, k, k2, nCubesRem;
184 assert( Kit_SopCubeNum(cSop) >= Kit_SopCubeNum(cDiv) );
186 if ( Kit_SopCubeNum(cDiv) == 1 )
193 vQuo->pCubes = Vec_IntFetch( vMemory, Kit_SopCubeNum(cSop) / Kit_SopCubeNum(cDiv) );
199 if ( Kit_CubeIsMarked(uCube) )
204 if ( Kit_CubeContains( uCube, uDiv ) )
207 if ( k == Kit_SopCubeNum(cDiv) )
210 uQuo = Kit_CubeSharp( uCube, uDiv );
221 if ( Kit_CubeIsMarked(uCube2) )
224 if ( Kit_CubeContains( uCube2, uDiv2 ) && uQuo == Kit_CubeSharp( uCube2, uDiv2 ) )
228 if ( i2 == Kit_SopCubeNum(cSop) )
232 if ( k2 != Kit_SopCubeNum(cDiv) )
235 Kit_SopPushCube( vQuo, uQuo );
238 Kit_SopWriteCube( cSop, Kit_CubeMark(uCube), i );
248 if ( Kit_CubeIsMarked(uCube2) )
251 if ( Kit_CubeContains( uCube2, uDiv2 ) && uQuo == Kit_CubeSharp( uCube2, uDiv2 ) )
254 assert( i2 < Kit_SopCubeNum(cSop) );
257 Kit_SopWriteCube( cSop, Kit_CubeMark(uCube2), i2 );
261 nCubesRem = Kit_SopCubeNum(cSop) - Kit_SopCubeNum(vQuo) * Kit_SopCubeNum(cDiv);
264 vRem->pCubes = Vec_IntFetch( vMemory, nCubesRem );
269 if ( !Kit_CubeIsMarked(uCube) )
271 Kit_SopPushCube( vRem, uCube );
274 Kit_SopWriteCube( cSop, Kit_CubeUnmark(uCube), i );
276 assert( nCubesRem == Kit_SopCubeNum(vRem) );
290static inline unsigned Kit_SopCommonCube(
Kit_Sop_t * cSop )
292 unsigned uMask, uCube;
294 uMask = ~(unsigned)0;
313 unsigned uMask, uCube;
315 uMask = Kit_SopCommonCube( cSop );
320 Kit_SopWriteCube( cSop, Kit_CubeSharp(uCube, uMask), i );
336 return Kit_SopCommonCube( cSop ) == 0;
352 assert( Kit_SopCubeNum(cSop) > 0 );
354 cResult->pCubes = Vec_IntFetch( vMemory, 1 );
355 Kit_SopPushCube( cResult, Kit_SopCommonCube(cSop) );
375 for ( i = 0; i < nLits; i++ )
380 if ( Kit_CubeHasLit(uCube, i) )
403 int i, k, iMin, nLitsMin, nLitsCur;
409 for ( i = 0; i < nLits; i++ )
414 if ( Kit_CubeHasLit(uCube, i) )
422 if ( nLitsMin > nLitsCur )
430 if ( nLitsMin >= nLitsCur )
437 if ( nLitsMin < 1000000 )
457 int i, k, iMax, nLitsMax, nLitsCur;
463 for ( i = 0; i < nLits; i++ )
465 if ( !Kit_CubeHasLit(uMask, i) )
470 if ( Kit_CubeHasLit(uCube, i) )
478 if ( nLitsMax < nLitsCur )
486 if ( nLitsMax <= nLitsCur )
536 if ( Kit_SopCubeNum(cSop) <= 1 )
544 assert( Kit_SopCubeNum(cResult) > 0 );
567 cResult->pCubes = Vec_IntFetch( vMemory, 1 );
569 Kit_SopPushCube( cResult, Kit_CubeSetLit(0, iLitBest) );
#define ABC_NAMESPACE_IMPL_START
#define ABC_NAMESPACE_IMPL_END
typedefABC_NAMESPACE_IMPL_START struct Vec_Int_t_ Vec_Int_t
DECLARATIONS ///.
void Kit_SopDivideByLiteralQuo(Kit_Sop_t *cSop, int iLit)
ABC_NAMESPACE_IMPL_START void Kit_SopCreate(Kit_Sop_t *cResult, Vec_Int_t *vInput, int nVars, Vec_Int_t *vMemory)
DECLARATIONS ///.
void Kit_SopMakeCubeFree(Kit_Sop_t *cSop)
int Kit_SopAnyLiteral(Kit_Sop_t *cSop, int nLits)
void Kit_SopDup(Kit_Sop_t *cResult, Kit_Sop_t *cSop, Vec_Int_t *vMemory)
void Kit_SopCommonCubeCover(Kit_Sop_t *cResult, Kit_Sop_t *cSop, Vec_Int_t *vMemory)
int Kit_SopBestLiteral(Kit_Sop_t *cSop, int nLits, unsigned uMask)
void Kit_SopDivisorZeroKernel_rec(Kit_Sop_t *cSop, int nLits)
int Kit_SopIsCubeFree(Kit_Sop_t *cSop)
void Kit_SopDivideByCube(Kit_Sop_t *cSop, Kit_Sop_t *cDiv, Kit_Sop_t *vQuo, Kit_Sop_t *vRem, Vec_Int_t *vMemory)
int Kit_SopWorstLiteral(Kit_Sop_t *cSop, int nLits)
int Kit_SopDivisor(Kit_Sop_t *cResult, Kit_Sop_t *cSop, int nLits, Vec_Int_t *vMemory)
void Kit_SopCreateInverse(Kit_Sop_t *cResult, Vec_Int_t *vInput, int nLits, Vec_Int_t *vMemory)
void Kit_SopDivideInternal(Kit_Sop_t *cSop, Kit_Sop_t *cDiv, Kit_Sop_t *vQuo, Kit_Sop_t *vRem, Vec_Int_t *vMemory)
void Kit_SopBestLiteralCover(Kit_Sop_t *cResult, Kit_Sop_t *cSop, unsigned uCube, int nLits, Vec_Int_t *vMemory)
typedefABC_NAMESPACE_HEADER_START struct Kit_Sop_t_ Kit_Sop_t
INCLUDES ///.
#define Kit_SopForEachCube(cSop, uCube, i)
ITERATORS ///.
#define Vec_IntForEachEntry(vVec, Entry, i)
MACRO DEFINITIONS ///.