summaryrefslogtreecommitdiffstats
path: root/src/base/abc/abcObj.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/base/abc/abcObj.c')
-rw-r--r--src/base/abc/abcObj.c43
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 ///
////////////////////////////////////////////////////////////////////////