diff options
author | Alan Mishchenko <alanmi@berkeley.edu> | 2008-04-11 20:01:00 -0700 |
---|---|---|
committer | Alan Mishchenko <alanmi@berkeley.edu> | 2008-04-11 20:01:00 -0700 |
commit | d8ddea4466d545c7c86d82b24365bc22a6ebd129 (patch) | |
tree | 8a1f547ac0fb10d683a651d30234d4bcf2a7844c /src/aig/aig/aigDup.c | |
parent | 651a32cdc379d2341c631b719ed9af16ce5a66c9 (diff) | |
download | abc-d8ddea4466d545c7c86d82b24365bc22a6ebd129.tar.gz abc-d8ddea4466d545c7c86d82b24365bc22a6ebd129.tar.bz2 abc-d8ddea4466d545c7c86d82b24365bc22a6ebd129.zip |
Version abc80411_2
Diffstat (limited to 'src/aig/aig/aigDup.c')
-rw-r--r-- | src/aig/aig/aigDup.c | 41 |
1 files changed, 40 insertions, 1 deletions
diff --git a/src/aig/aig/aigDup.c b/src/aig/aig/aigDup.c index b435aade..aaaa287f 100644 --- a/src/aig/aig/aigDup.c +++ b/src/aig/aig/aigDup.c @@ -366,6 +366,45 @@ Vec_Ptr_t * Aig_ManOrderPios( Aig_Man_t * p, Aig_Man_t * pOrder ) /**Function************************************************************* + Synopsis [Duplicates the AIG manager recursively.] + + Description [] + + SideEffects [] + + SeeAlso [] + +***********************************************************************/ +Aig_Obj_t * Aig_ManDupDfsOrder_rec( Aig_Man_t * pNew, Aig_Man_t * p, Aig_Obj_t * pObj ) +{ + Aig_Obj_t * pObjNew, * pEquivNew = NULL; + if ( pObj->pData ) + return pObj->pData; + if ( Aig_ObjIsPi(pObj) ) + return NULL; + if ( p->pEquivs && Aig_ObjEquiv(p, pObj) ) + pEquivNew = Aig_ManDupDfsOrder_rec( pNew, p, Aig_ObjEquiv(p, pObj) ); + if ( !Aig_ManDupDfsOrder_rec( pNew, p, Aig_ObjFanin0(pObj) ) ) + return NULL; + if ( Aig_ObjIsBuf(pObj) ) + return pObj->pData = Aig_ObjChild0Copy(pObj); + if ( !Aig_ManDupDfsOrder_rec( pNew, p, Aig_ObjFanin1(pObj) ) ) + return NULL; + pObjNew = Aig_Oper( pNew, Aig_ObjChild0Copy(pObj), Aig_ObjChild1Copy(pObj), Aig_ObjType(pObj) ); + if ( pObj->pHaig ) + Aig_Regular(pObjNew)->pHaig = pObj->pHaig; + if ( pEquivNew ) + { + if ( pNew->pEquivs ) + pNew->pEquivs[Aig_Regular(pObjNew)->Id] = Aig_Regular(pEquivNew); + if ( pNew->pReprs ) + pNew->pReprs[Aig_Regular(pEquivNew)->Id] = Aig_Regular(pObjNew); + } + return pObj->pData = pObjNew; +} + +/**Function************************************************************* + Synopsis [Duplicates the AIG manager.] Description [This duplicator works for AIGs with choices.] @@ -417,7 +456,7 @@ Aig_Man_t * Aig_ManDupDfsOrder( Aig_Man_t * p, Aig_Man_t * pOrder ) } else if ( Aig_ObjIsPo(pObj) ) { - Aig_ManDupDfs_rec( pNew, p, Aig_ObjFanin0(pObj) ); + Aig_ManDupDfsOrder_rec( pNew, p, Aig_ObjFanin0(pObj) ); // assert( pObj->Level == ((Aig_Obj_t*)pObj->pData)->Level ); pObjNew = Aig_ObjCreatePo( pNew, Aig_ObjChild0Copy(pObj) ); Aig_Regular(pObjNew)->pHaig = pObj->pHaig; |