diff options
Diffstat (limited to 'src/base/abc/abcObj.c')
-rw-r--r-- | src/base/abc/abcObj.c | 43 |
1 files changed, 42 insertions, 1 deletions
diff --git a/src/base/abc/abcObj.c b/src/base/abc/abcObj.c index 7741d963..901ffa31 100644 --- a/src/base/abc/abcObj.c +++ b/src/base/abc/abcObj.c @@ -952,14 +952,55 @@ void Abc_NodeComplement( Abc_Obj_t * pNode ) assert( Abc_ObjIsNode(pNode) ); if ( Abc_NtkHasSop(pNode->pNtk) ) Abc_SopComplement( (char *)pNode->pData ); + else if ( Abc_NtkHasAig(pNode->pNtk) ) + pNode->pData = Hop_Not( (Hop_Obj_t *)pNode->pData ); else if ( Abc_NtkHasBdd(pNode->pNtk) ) pNode->pData = Cudd_Not( pNode->pData ); + else + assert( 0 ); +} + +/**Function************************************************************* + + Synopsis [Changes the polarity of one fanin.] + + Description [] + + SideEffects [] + + SeeAlso [] + +***********************************************************************/ +void Abc_NodeComplementInput( Abc_Obj_t * pNode, Abc_Obj_t * pFanin ) +{ + int iFanin; + if ( (iFanin = Vec_IntFind( &pNode->vFanins, pFanin->Id )) == -1 ) + { + printf( "Node %s should be among", Abc_ObjName(pFanin) ); + printf( " the fanins of node %s...\n", Abc_ObjName(pNode) ); + return; + } + if ( Abc_NtkHasSop(pNode->pNtk) ) + Abc_SopComplementVar( (char *)pNode->pData, iFanin ); else if ( Abc_NtkHasAig(pNode->pNtk) ) - pNode->pData = Hop_Not( (Hop_Obj_t *)pNode->pData ); + pNode->pData = Hop_Complement( (Hop_Man_t *)pNode->pNtk->pManFunc, (Hop_Obj_t *)pNode->pData, iFanin ); + else if ( Abc_NtkHasBdd(pNode->pNtk) ) + { + DdManager * dd = (DdManager *)pNode->pNtk->pManFunc; + DdNode * bVar, * bCof0, * bCof1; + bVar = Cudd_bddIthVar( dd, iFanin ); + bCof0 = Cudd_Cofactor( dd, (DdNode *)pNode->pData, Cudd_Not(bVar) ); Cudd_Ref( bCof0 ); + bCof1 = Cudd_Cofactor( dd, (DdNode *)pNode->pData, bVar ); Cudd_Ref( bCof1 ); + Cudd_RecursiveDeref( dd, (DdNode *)pNode->pData ); + pNode->pData = Cudd_bddIte( dd, bVar, bCof0, bCof1 ); Cudd_Ref( (DdNode *)pNode->pData ); + Cudd_RecursiveDeref( dd, bCof0 ); + Cudd_RecursiveDeref( dd, bCof1 ); + } else assert( 0 ); } + //////////////////////////////////////////////////////////////////////// /// END OF FILE /// //////////////////////////////////////////////////////////////////////// |