49 int nCubesInit, nCubesOld, nIter;
53 nCubesInit =
p->nCubes;
55 nCubesOld =
p->nCubes;
59 while ( 100.0*(nCubesOld -
p->nCubes)/nCubesOld > 3.0 );
83 int v00, v01, v10, v11,
Var0,
Var1, Index, nCubesOld;
87 p->pBubble->pNext =
p->ppStore[0];
88 p->ppStore[0] =
p->pBubble;
89 p->pBubble->nLits = 0;
95 Index =
p->pBubble->nLits;
99 if ( pCube ==
p->pBubble )
104 *ppPrev =
p->pBubble->pNext;
105 pCube =
p->pBubble->pNext;
107 for ( Index++; Index <=
p->nVars; Index++ )
108 if (
p->ppStore[Index] )
110 ppPrev = &(
p->ppStore[Index]);
111 pCube =
p->ppStore[Index];
120 if ( Min_CubesDistTwo( pCube, pThis, &
Var0, &
Var1 ) )
122 if ( pThis == NULL && Index < p->nVars )
124 if ( Min_CubesDistTwo( pCube, pThis, &
Var0, &
Var1 ) )
126 if ( pThis == NULL && Index < p->nVars - 1 )
128 if ( Min_CubesDistTwo( pCube, pThis, &
Var0, &
Var1 ) )
134 p->pBubble->pNext = pCube->
pNext;
135 pCube->
pNext =
p->pBubble;
136 p->pBubble->nLits = pCube->
nLits;
142 *ppPrevT = pThis->
pNext;
143 *ppPrev =
p->pBubble;
144 p->pBubble->pNext = pCube->
pNext;
145 p->pBubble->nLits = pCube->
nLits;
154 v00 = Min_CubeGetVar( pCube,
Var0 );
155 v01 = Min_CubeGetVar( pCube,
Var1 );
156 v10 = Min_CubeGetVar( pThis,
Var0 );
157 v11 = Min_CubeGetVar( pThis,
Var1 );
163 Min_CubeXorVar( pCube,
Var0, v10 );
164 pCube->
nLits -= (v00 != 3);
165 pCube->
nLits += ((v00 ^ v10) != 3);
166 Min_CubeXorVar( pThis,
Var1, v01 );
167 pThis->
nLits -= (v11 != 3);
168 pThis->
nLits += ((v01 ^ v11) != 3);
171 nCubesOld =
p->nCubes;
175 if (
p->nCubes < nCubesOld + 2 )
186 Min_CubeXorVar( pCube,
Var0, v10 );
187 pCube->
nLits -= ((v00 ^ v10) != 3);
188 pCube->
nLits += (v00 != 3);
189 Min_CubeXorVar( pCube,
Var1, v11 );
190 pCube->
nLits -= (v01 != 3);
191 pCube->
nLits += ((v01 ^ v11) != 3);
193 Min_CubeXorVar( pThis,
Var0, v00 );
194 pThis->
nLits -= (v10 != 3);
195 pThis->
nLits += ((v00 ^ v10) != 3);
196 Min_CubeXorVar( pThis,
Var1, v01 );
197 pThis->
nLits -= ((v01 ^ v11) != 3);
198 pThis->
nLits += (v11 != 3);
226 if ( Min_CubesAreEqual( pCube, pThis ) )
228 *ppPrev = pThis->
pNext;
229 Min_CubeRecycle(
p, pCube );
230 Min_CubeRecycle(
p, pThis );
239 if ( Min_CubesDistOne( pCube, pThis,
p->pTemp ) )
241 *ppPrev = pThis->
pNext;
242 Min_CubesTransform( pCube, pThis,
p->pTemp );
244 Min_CubeRecycle(
p, pThis );
251 if ( Min_CubesDistOne( pCube, pThis,
p->pTemp ) )
253 *ppPrev = pThis->
pNext;
254 Min_CubesTransform( pCube, pThis,
p->pTemp );
256 Min_CubeRecycle(
p, pThis );
261 if ( pCube->
nLits > 0 )
264 if ( Min_CubesDistOne( pCube, pThis,
p->pTemp ) )
266 *ppPrev = pThis->
pNext;
267 Min_CubesTransform( pCube, pThis,
p->pTemp );
268 Min_CubeRecycle(
p, pThis );
275 p->ppStore[pCube->
nLits] = pCube;
294 assert( (
int)pCube->
nLits == Min_CubeCountLits(pCube) );
#define ABC_NAMESPACE_IMPL_START
#define ABC_NAMESPACE_IMPL_END
struct Min_Cube_t_ Min_Cube_t
#define Min_CoverForEachCubePrev(pCover, pCube, ppPrev)
int Min_EsopAddCubeInt(Min_Man_t *p, Min_Cube_t *pCube)
void Min_EsopAddCube(Min_Man_t *p, Min_Cube_t *pCube)
void Min_EsopMinimize(Min_Man_t *p)
FUNCTION DEFINITIONS ///.
typedefABC_NAMESPACE_IMPL_START struct Min_Man_t_ Min_Man_t
DECLARATIONS ///.