298{
302 unsigned * pStore, Counter;
303 int i, * pIso, * pTable, nTableSize;
304
307 {
308 if ( Gia_ObjIsCo(pObj) )
309 {
310 assert( Gia_ObjColors(
p, i) == 0 );
311 continue;
312 }
314 if ( Gia_ObjColors(
p, i) == 3 )
315 pIso[i] = i;
316 }
317
319
320 nTableSize = Abc_PrimeCudd( 100 + Gia_ManObjNum(
p)/2 );
324 {
325 if ( Gia_ObjIsCo(pObj) )
326 continue;
327 if ( pIso[i] == 0 )
328 Gia_ManIsoSimulate( pObj, i, pStore,
nWords );
329 else if ( pIso[i] < i )
330 Gia_ManIsoCopy( i, pIso[i], pStore,
nWords );
331 else
332 Gia_ManIsoRandom( i, pStore,
nWords );
333 if ( pIso[i] == 0 )
334 Gia_ManIsoTableAdd(
p, i, pStore,
nWords, pTable, nTableSize );
335 }
336
337 vNodesA = Vec_IntAlloc( 100 );
338 vNodesB = Vec_IntAlloc( 100 );
339 for ( i = 0; i < nTableSize; i++ )
340 if ( Gia_ManIsoExtractClasses(
p, pTable[i], pStore,
nWords, vNodesA, vNodesB ) )
341 Gia_ManIsoMatchNodes( pIso, pStore,
nWords, vNodesA, vNodesB );
342 Vec_IntFree( vNodesA );
343 Vec_IntFree( vNodesB );
344
345 Counter = 0;
347 {
348 Counter += (pIso[i] && pIso[i] < i);
349
350
351
352
353
354
355
356
357
358
359 }
360 Abc_Print( 1, "Computed %d pairs of structurally equivalent nodes.\n", Counter );
361
362
363
366 return pIso;
367}
#define ABC_ALLOC(type, num)
#define ABC_CALLOC(type, num)
typedefABC_NAMESPACE_IMPL_START struct Vec_Int_t_ Vec_Int_t
DECLARATIONS ///.
struct Gia_Obj_t_ Gia_Obj_t
#define Gia_ManForEachObj1(p, pObj, i)
void Gia_ManCleanValue(Gia_Man_t *p)
#define Gia_ManForEachObj(p, pObj, i)
MACRO DEFINITIONS ///.