summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlan Mishchenko <alanmi@berkeley.edu>2012-03-30 21:09:08 -0700
committerAlan Mishchenko <alanmi@berkeley.edu>2012-03-30 21:09:08 -0700
commit95207366218ffadcb7f377db1b5577c758b82149 (patch)
tree649e220bf4a9fd0a9da9e5dd228d5ea8c17c7ca1
parent9eb1be8e537d7826d3bd09d173b7578baa7ec2a3 (diff)
downloadabc-95207366218ffadcb7f377db1b5577c758b82149.tar.gz
abc-95207366218ffadcb7f377db1b5577c758b82149.tar.bz2
abc-95207366218ffadcb7f377db1b5577c758b82149.zip
Added several new APIs to GIA and for file management.
-rw-r--r--src/aig/gia/gia.h9
-rw-r--r--src/aig/gia/giaHash.c4
-rw-r--r--src/misc/extra/extra.h2
-rw-r--r--src/misc/extra/extraUtilFile.c36
4 files changed, 49 insertions, 2 deletions
diff --git a/src/aig/gia/gia.h b/src/aig/gia/gia.h
index 2c7d57b2..caafc1e4 100644
--- a/src/aig/gia/gia.h
+++ b/src/aig/gia/gia.h
@@ -472,12 +472,20 @@ static inline int Gia_ManAppendCo( Gia_Man_t * p, int iLit0 )
Gia_ObjAddFanout( p, Gia_ObjFanin0(pObj), pObj );
return Gia_ObjId( p, pObj ) << 1;
}
+static inline int Gia_ManAppendOr( Gia_Man_t * p, int iLit0, int iLit1 )
+{
+ return Abc_LitNot(Gia_ManAppendAnd( p, Abc_LitNot(iLit0), Abc_LitNot(iLit1) ));
+}
static inline int Gia_ManAppendMux( Gia_Man_t * p, int iCtrl, int iData1, int iData0 )
{
int iTemp0 = Gia_ManAppendAnd( p, Abc_LitNot(iCtrl), iData0 );
int iTemp1 = Gia_ManAppendAnd( p, iCtrl, iData1 );
return Abc_LitNotCond( Gia_ManAppendAnd( p, Abc_LitNot(iTemp0), Abc_LitNot(iTemp1) ), 1 );
}
+static inline int Gia_ManAppendXor( Gia_Man_t * p, int iLit0, int iLit1 )
+{
+ return Gia_ManAppendMux( p, iLit0, Abc_LitNot(iLit1), iLit1 );
+}
#define GIA_ZER 1
#define GIA_ONE 2
@@ -728,6 +736,7 @@ extern void Gia_ManHashAlloc( Gia_Man_t * p );
extern void Gia_ManHashStart( Gia_Man_t * p );
extern void Gia_ManHashStop( Gia_Man_t * p );
extern int Gia_ManHashAnd( Gia_Man_t * p, int iLit0, int iLit1 );
+extern int Gia_ManHashOr( Gia_Man_t * p, int iLit0, int iLit1 );
extern int Gia_ManHashXor( Gia_Man_t * p, int iLit0, int iLit1 );
extern int Gia_ManHashMux( Gia_Man_t * p, int iCtrl, int iData1, int iData0 );
extern int Gia_ManHashAndTry( Gia_Man_t * p, int iLit0, int iLit1 );
diff --git a/src/aig/gia/giaHash.c b/src/aig/gia/giaHash.c
index 41092cc7..61f73705 100644
--- a/src/aig/gia/giaHash.c
+++ b/src/aig/gia/giaHash.c
@@ -511,6 +511,10 @@ int Gia_ManHashAnd( Gia_Man_t * p, int iLit0, int iLit1 )
}
}
}
+int Gia_ManHashOr( Gia_Man_t * p, int iLit0, int iLit1 )
+{
+ return Abc_LitNot(Gia_ManHashAnd( p, Abc_LitNot(iLit0), Abc_LitNot(iLit1) ));
+}
/**Function*************************************************************
diff --git a/src/misc/extra/extra.h b/src/misc/extra/extra.h
index 189a4a42..0e9caf84 100644
--- a/src/misc/extra/extra.h
+++ b/src/misc/extra/extra.h
@@ -107,7 +107,9 @@ extern char * Extra_FileNameGenericAppend( char * pBase, char * pSuffix );
extern int Extra_FileCheck( char * pFileName );
extern int Extra_FileSize( char * pFileName );
extern char * Extra_FileRead( FILE * pFile );
+extern char * Extra_FileRead2( FILE * pFile, FILE * pFile2 );
extern char * Extra_FileReadContents( char * pFileName );
+extern char * Extra_FileReadContents2( char * pFileName, char * pFileName2 );
extern int Extra_FileIsType( char * pFileName, char * pS1, char * pS2, char * pS3 );
extern char * Extra_TimeStamp();
extern char * Extra_StringAppend( char * pStrGiven, char * pStrAdd );
diff --git a/src/misc/extra/extraUtilFile.c b/src/misc/extra/extraUtilFile.c
index 4f8af483..5f905814 100644
--- a/src/misc/extra/extraUtilFile.c
+++ b/src/misc/extra/extraUtilFile.c
@@ -276,6 +276,28 @@ char * Extra_FileRead( FILE * pFile )
pBuffer[ nFileSize + 1] = '\0';
return pBuffer;
}
+char * Extra_FileRead2( FILE * pFile, FILE * pFile2 )
+{
+ char * pBuffer;
+ int nSize, nSize2;
+ int RetValue;
+ // get the file size, in bytes
+ fseek( pFile, 0, SEEK_END );
+ nSize = ftell( pFile );
+ rewind( pFile );
+ // get the file size, in bytes
+ fseek( pFile2, 0, SEEK_END );
+ nSize2 = ftell( pFile2 );
+ rewind( pFile2 );
+ // load the contents of the file into memory
+ pBuffer = ABC_ALLOC( char, nSize + nSize2 + 3 );
+ RetValue = fread( pBuffer, nSize, 1, pFile );
+ RetValue = fread( pBuffer + nSize, nSize2, 1, pFile2 );
+ // terminate the string with '\0'
+ pBuffer[ nSize + nSize2 + 0] = '\n';
+ pBuffer[ nSize + nSize2 + 1] = '\0';
+ return pBuffer;
+}
/**Function*************************************************************
@@ -294,8 +316,18 @@ char * Extra_FileReadContents( char * pFileName )
char * pBuffer;
pFile = fopen( pFileName, "rb" );
pBuffer = pFile ? Extra_FileRead( pFile ) : NULL;
- if ( pFile )
- fclose( pFile );
+ if ( pFile ) fclose( pFile );
+ return pBuffer;
+}
+char * Extra_FileReadContents2( char * pFileName, char * pFileName2 )
+{
+ FILE * pFile, * pFile2;
+ char * pBuffer;
+ pFile = fopen( pFileName, "rb" );
+ pFile2 = fopen( pFileName2, "rb" );
+ pBuffer = (pFile && pFile2) ? Extra_FileRead2( pFile, pFile2 ) : NULL;
+ if ( pFile ) fclose( pFile );
+ if ( pFile2 ) fclose( pFile2 );
return pBuffer;
}