150 Gia_Obj_t * pObj, * pFanin0New, * pFanin1New, * pObjNew;
152 int i, iLit, nCrossCut = 0, nCrossCutMax = 0;
159 pNew->
pName = Abc_UtilStrsav(
p->pName );
160 pNew->
pSpec = Abc_UtilStrsav(
p->pSpec );
161 pNew->
nFront = 1 + (int)((
float)1.1 * nCrossCutMaxInit);
165 Gia_ManConst0(pNew)->Value = iFront = Gia_ManFrontFindNext( pFront, pNew->
nFront, iFront );
166 if ( Gia_ObjValue(Gia_ManConst0(
p)) == 0 )
173 if ( Gia_ObjIsCi(pObj) )
175 if ( Gia_ObjValue(pObj) && nCrossCutMax < ++nCrossCut )
176 nCrossCutMax = nCrossCut;
178 iLit = Gia_ManAppendCi( pNew );
179 pObjNew = Gia_ManObj( pNew, Abc_Lit2Var(iLit) );
180 assert( Gia_ObjId(pNew, pObjNew) == Gia_ObjId(
p, pObj) );
181 pObjNew->
Value = iFront = Gia_ManFrontFindNext( pFront, pNew->
nFront, iFront );
183 if ( Gia_ObjValue(pObj) == 0 )
187 if ( Gia_ObjIsCo(pObj) )
189 assert( Gia_ObjValue(pObj) == 0 );
191 iLit = Gia_ManAppendCo( pNew, 0 );
192 pObjNew = Gia_ManObj( pNew, Abc_Lit2Var(iLit) );
193 assert( Gia_ObjId(pNew, pObjNew) == Gia_ObjId(
p, pObj) );
195 pFanin0New = Gia_ManObj( pNew, Gia_ObjFaninId0(pObj, i) );
199 pObjNew->
fCompl0 = Gia_ObjFaninC0(pObj);
201 if ( --Gia_ObjFanin0(pObj)->Value == 0 )
203 pFront[pFanin0New->
Value] = 0;
208 if ( Gia_ObjValue(pObj) && nCrossCutMax < ++nCrossCut )
209 nCrossCutMax = nCrossCut;
211 pObjNew = Gia_ManAppendObj( pNew );
212 assert( Gia_ObjId(pNew, pObjNew) == Gia_ObjId(
p, pObj) );
214 pFanin0New = Gia_ManObj( pNew, Gia_ObjFaninId0(pObj, i) );
217 pObjNew->
fCompl0 = Gia_ObjFaninC0(pObj);
219 pFanin1New = Gia_ManObj( pNew, Gia_ObjFaninId1(pObj, i) );
222 pObjNew->
fCompl1 = Gia_ObjFaninC1(pObj);
224 pObjNew->
Value = iFront = Gia_ManFrontFindNext( pFront, pNew->
nFront, iFront );
226 if ( --Gia_ObjFanin0(pObj)->Value == 0 )
228 pFront[pFanin0New->
Value] = 0;
231 if ( --Gia_ObjFanin1(pObj)->Value == 0 )
233 pFront[pFanin1New->
Value] = 0;
237 if ( Gia_ObjValue(pObj) == 0 )
241 assert( nCrossCut == 0 || nCrossCutMax == nCrossCutMaxInit );
242 for ( i = 0; i < pNew->
nFront; i++ )