summaryrefslogtreecommitdiffstats
path: root/src/aig/gia/giaAiger.c
diff options
context:
space:
mode:
authorAlan Mishchenko <alanmi@berkeley.edu>2012-02-20 16:09:20 -0800
committerAlan Mishchenko <alanmi@berkeley.edu>2012-02-20 16:09:20 -0800
commit9f71a9f67bac0e949c9335a2cbf39788b986389c (patch)
treedf8e3d71ff947bc6f6bcfda4a78154943985cf28 /src/aig/gia/giaAiger.c
parente43ca9f850cc0b36fe3c97782f153d1ed27f0fa4 (diff)
downloadabc-9f71a9f67bac0e949c9335a2cbf39788b986389c.tar.gz
abc-9f71a9f67bac0e949c9335a2cbf39788b986389c.tar.bz2
abc-9f71a9f67bac0e949c9335a2cbf39788b986389c.zip
Isomorphism checking code.
Diffstat (limited to 'src/aig/gia/giaAiger.c')
-rw-r--r--src/aig/gia/giaAiger.c55
1 files changed, 49 insertions, 6 deletions
diff --git a/src/aig/gia/giaAiger.c b/src/aig/gia/giaAiger.c
index 5f1bb25d..a0adce33 100644
--- a/src/aig/gia/giaAiger.c
+++ b/src/aig/gia/giaAiger.c
@@ -1614,7 +1614,7 @@ Vec_Str_t * Gia_WriteAigerIntoMemoryStr( Gia_Man_t * p )
Gia_Obj_t * pObj;
int nNodes = 0, i, uLit, uLit0, uLit1;
// set the node numbers to be used in the output file
- Gia_ManConst1(p)->Value = nNodes++;
+ Gia_ManConst0(p)->Value = nNodes++;
Gia_ManForEachCi( p, pObj, i )
pObj->Value = nNodes++;
Gia_ManForEachAnd( p, pObj, i )
@@ -1638,7 +1638,6 @@ Vec_Str_t * Gia_WriteAigerIntoMemoryStr( Gia_Man_t * p )
Gia_ManForEachRi( p, pObj, i )
{
uLit = Abc_Var2Lit( Gia_ObjValue(Gia_ObjFanin0(pObj)), Gia_ObjFaninC0(pObj) );
-// fprintf( pFile, "%u\n", uLit );
Vec_StrPrintNum( vBuffer, uLit );
Vec_StrPrintStr( vBuffer, "\n" );
}
@@ -1647,7 +1646,6 @@ Vec_Str_t * Gia_WriteAigerIntoMemoryStr( Gia_Man_t * p )
Gia_ManForEachPo( p, pObj, i )
{
uLit = Abc_Var2Lit( Gia_ObjValue(Gia_ObjFanin0(pObj)), Gia_ObjFaninC0(pObj) );
-// fprintf( pFile, "%u\n", uLit );
Vec_StrPrintNum( vBuffer, uLit );
Vec_StrPrintStr( vBuffer, "\n" );
}
@@ -1679,7 +1677,7 @@ Vec_Str_t * Gia_WriteAigerIntoMemoryStr( Gia_Man_t * p )
The CI/CO/AND nodes are assumed to be ordered according to some rule.
The resulting buffer should be deallocated by the user.]
- SideEffects [Note that in vCos, the latches should be ordered first!!!]
+ SideEffects [Note that in vCos, PIs are order first, followed by latches!]
SeeAlso []
@@ -1690,7 +1688,7 @@ Vec_Str_t * Gia_WriteAigerIntoMemoryStrPart( Gia_Man_t * p, Vec_Int_t * vCis, Ve
Gia_Obj_t * pObj;
int nNodes = 0, i, uLit, uLit0, uLit1;
// set the node numbers to be used in the output file
- Gia_ManConst1(p)->Value = nNodes++;
+ Gia_ManConst0(p)->Value = nNodes++;
Gia_ManForEachObjVec( vCis, p, pObj, i )
{
assert( Gia_ObjIsCi(pObj) );
@@ -1720,8 +1718,19 @@ Vec_Str_t * Gia_WriteAigerIntoMemoryStrPart( Gia_Man_t * p, Vec_Int_t * vCis, Ve
Gia_ManForEachObjVec( vCos, p, pObj, i )
{
assert( Gia_ObjIsCo(pObj) );
+ if ( i < Vec_IntSize(vCos) - nRegs )
+ continue;
+ uLit = Abc_Var2Lit( Gia_ObjValue(Gia_ObjFanin0(pObj)), Gia_ObjFaninC0(pObj) );
+ Vec_StrPrintNum( vBuffer, uLit );
+ Vec_StrPrintStr( vBuffer, "\n" );
+ }
+ // write output drivers
+ Gia_ManForEachObjVec( vCos, p, pObj, i )
+ {
+ assert( Gia_ObjIsCo(pObj) );
+ if ( i >= Vec_IntSize(vCos) - nRegs )
+ continue;
uLit = Abc_Var2Lit( Gia_ObjValue(Gia_ObjFanin0(pObj)), Gia_ObjFaninC0(pObj) );
-// fprintf( pFile, "%u\n", uLit );
Vec_StrPrintNum( vBuffer, uLit );
Vec_StrPrintStr( vBuffer, "\n" );
}
@@ -1746,6 +1755,40 @@ Vec_Str_t * Gia_WriteAigerIntoMemoryStrPart( Gia_Man_t * p, Vec_Int_t * vCis, Ve
return vBuffer;
}
+/**Function*************************************************************
+
+ Synopsis [Writes the AIG in the binary AIGER format.]
+
+ Description []
+
+ SideEffects []
+
+ SeeAlso []
+
+***********************************************************************/
+void Gia_WriteAigerSimple( Gia_Man_t * pInit, char * pFileName )
+{
+ FILE * pFile;
+ Vec_Str_t * vStr;
+ if ( Gia_ManPoNum(pInit) == 0 )
+ {
+ printf( "Gia_WriteAigerSimple(): AIG cannot be written because it has no POs.\n" );
+ return;
+ }
+ // start the output stream
+ pFile = fopen( pFileName, "wb" );
+ if ( pFile == NULL )
+ {
+ fprintf( stdout, "Gia_WriteAigerSimple(): Cannot open the output file \"%s\".\n", pFileName );
+ return;
+ }
+ // write the buffer
+ vStr = Gia_WriteAigerIntoMemoryStr( pInit );
+ fwrite( Vec_StrArray(vStr), 1, Vec_StrSize(vStr), pFile );
+ Vec_StrFree( vStr );
+ fclose( pFile );
+}
+
////////////////////////////////////////////////////////////////////////
/// END OF FILE ///
////////////////////////////////////////////////////////////////////////