47 assert( Aig_ManBufNum(
p) == 0 );
49 p->nReprsAlloc = nIdMax;
86 assert( !Aig_IsComplement(pNode1) );
87 assert( !Aig_IsComplement(pNode2) );
91 p->pReprs[pNode2->
Id] = pNode1;
108 assert( !Aig_IsComplement(pNode1) );
109 assert( !Aig_IsComplement(pNode2) );
112 if ( pNode1 == pNode2 )
114 if ( pNode1->
Id < pNode2->
Id )
115 p->pReprs[pNode2->
Id] = pNode1;
117 p->pReprs[pNode1->
Id] = pNode2;
134 assert( !Aig_IsComplement(pNode) );
137 return p->pReprs[pNode->
Id];
154 assert( !Aig_IsComplement(pNode) );
156 p->pReprs[pNode->
Id] = NULL;
173 if ( (pRepr = Aig_ObjFindRepr(
p, pNode)) )
174 while ( (pNext = Aig_ObjFindRepr(
p, pRepr)) )
193 if ( (pRepr = Aig_ObjFindRepr(
p, pObj)) )
197static inline Aig_Obj_t * Aig_ObjChild0Repr(
Aig_Man_t *
p,
Aig_Obj_t * pObj ) {
return Aig_NotCond( Aig_ObjGetRepr(
p, Aig_ObjFanin0(pObj)), Aig_ObjFaninC0(pObj) ); }
198static inline Aig_Obj_t * Aig_ObjChild1Repr(
Aig_Man_t *
p,
Aig_Obj_t * pObj ) {
return Aig_NotCond( Aig_ObjGetRepr(
p, Aig_ObjFanin1(pObj)), Aig_ObjFaninC1(pObj) ); }
215 assert( pNew->pReprs != NULL );
217 if ( pNew->nReprsAlloc < Aig_ManObjNumMax(pNew) )
219 int nReprsAllocNew = 2 * Aig_ManObjNumMax(pNew);
221 memset( pNew->pReprs + pNew->nReprsAlloc, 0,
sizeof(
Aig_Obj_t *) * (nReprsAllocNew-pNew->nReprsAlloc) );
222 pNew->nReprsAlloc = nReprsAllocNew;
226 if ( (pRepr = Aig_ObjFindRepr(pOld, pObj)) )
246 if ( (pRepr = Aig_ObjFindRepr(
p, pObj)) )
274 pNew->pName = Abc_UtilStrsav(
p->pName );
275 pNew->pSpec = Abc_UtilStrsav(
p->pSpec );
276 pNew->nConstrs =
p->nConstrs;
277 pNew->nBarBufs =
p->nBarBufs;
279 pNew->vFlopNums = Vec_IntDup(
p->vFlopNums );
282 Aig_ManConst1(
p)->pData = Aig_ManConst1(pNew);
291 pObj->
pData =
Aig_And( pNew, Aig_ObjChild0Repr(
p, pObj), Aig_ObjChild1Repr(
p, pObj) );
308 printf(
"Aig_ManDupRepr: Check has failed.\n" );
357 pRepr = Aig_ObjFindReprTransitive(
p, pObj );
361 Aig_ObjSetRepr_(
p, pObj, pRepr );
362 nFanouts += (pObj->
nRefs > 0);
382 if (
p->pReprs == NULL )
385 Counter += (
p->pReprs[i] != NULL);
405 if ( Aig_ObjIsCi(pNode) )
412 if ( Aig_ObjIsTravIdCurrent(
p, pNode ) )
414 Aig_ObjSetTravIdCurrent(
p, pNode );
437 assert( !Aig_IsComplement(pNew) );
438 assert( !Aig_IsComplement(pOld) );
493 pRepr = Aig_ObjFindRepr(
p, pObj );
497 if ( !Aig_ObjIsNode(pRepr) )
499 Aig_ObjClearRepr(
p, pObj );
505 Aig_ObjClearRepr(
p, pObj );
510 if ( pObj->
nRefs > 0 )
512 Aig_ObjClearRepr(
p, pObj );
516 p->pEquivs[pObj->
Id] =
p->pEquivs[pRepr->
Id];
517 p->pEquivs[pRepr->
Id] = pObj;
538 if ( pPart->pReprs ) {
541 if ( pPart->pReprs[pObj->
Id] == NULL )
544 Aig_ObjSetRepr_( pAig,
545 Aig_ManObj(pAig, pMapBack[pObj->
Id]),
546 Aig_ManObj(pAig, pMapBack[pPart->pReprs[pObj->
Id]->Id]) );
#define ABC_ALLOC(type, num)
#define ABC_REALLOC(type, obj, num)
#define ABC_NAMESPACE_IMPL_START
#define ABC_NAMESPACE_IMPL_END
Aig_Obj_t * Aig_ManDupRepr_rec(Aig_Man_t *pNew, Aig_Man_t *p, Aig_Obj_t *pObj)
Aig_Man_t * Aig_ManDupRepr(Aig_Man_t *p, int fOrdered)
Aig_Man_t * Aig_ManRehash(Aig_Man_t *p)
void Aig_ManTransferRepr(Aig_Man_t *pNew, Aig_Man_t *pOld)
int Aig_ObjCheckTfi(Aig_Man_t *p, Aig_Obj_t *pNew, Aig_Obj_t *pOld)
void Aig_ObjCreateRepr(Aig_Man_t *p, Aig_Obj_t *pNode1, Aig_Obj_t *pNode2)
int Aig_ManRemapRepr(Aig_Man_t *p)
int Aig_ObjCheckTfi_rec(Aig_Man_t *p, Aig_Obj_t *pNode, Aig_Obj_t *pOld)
ABC_NAMESPACE_IMPL_START void Aig_ManReprStart(Aig_Man_t *p, int nIdMax)
DECLARATIONS ///.
void Aig_ManMarkValidChoices(Aig_Man_t *p)
void Aig_ManReprStop(Aig_Man_t *p)
int Aig_ManCountReprs(Aig_Man_t *p)
int Aig_TransferMappedClasses(Aig_Man_t *pAig, Aig_Man_t *pPart, int *pMapBack)
Aig_Man_t * Aig_ManDupReprBasic(Aig_Man_t *p)
void Aig_ManSetRegNum(Aig_Man_t *p, int nRegs)
#define Aig_ManForEachObj(p, pObj, i)
void Aig_ManStop(Aig_Man_t *p)
int Aig_ManSeqCleanupBasic(Aig_Man_t *p)
void Aig_ManIncrementTravId(Aig_Man_t *p)
DECLARATIONS ///.
#define Aig_ManForEachCi(p, pObj, i)
ITERATORS ///.
Aig_Obj_t * Aig_And(Aig_Man_t *p, Aig_Obj_t *p0, Aig_Obj_t *p1)
Aig_Obj_t * Aig_ObjCreateCo(Aig_Man_t *p, Aig_Obj_t *pDriver)
struct Aig_Obj_t_ Aig_Obj_t
Aig_Man_t * Aig_ManStart(int nNodesMax)
DECLARATIONS ///.
#define Aig_ManForEachNode(p, pObj, i)
typedefABC_NAMESPACE_HEADER_START struct Aig_Man_t_ Aig_Man_t
INCLUDES ///.
#define Aig_ManForEachCo(p, pObj, i)
Aig_Obj_t * Aig_ObjCreateCi(Aig_Man_t *p)
DECLARATIONS ///.
void Aig_ManCleanData(Aig_Man_t *p)
ABC_DLL int Aig_ManCheck(Aig_Man_t *p)
FUNCTION DECLARATIONS ///.