From f215b1bb8a83cf315393584dd4a6051dbc2e9c65 Mon Sep 17 00:00:00 2001
From: Alan Mishchenko <alanmi@berkeley.edu>
Date: Sat, 23 Mar 2019 22:00:10 +0100
Subject: Making 'ndr.h' fully independent of other ABC data-structures.

---
 src/aig/miniaig/ndr.h | 30 ++++++++++++++++++------------
 1 file changed, 18 insertions(+), 12 deletions(-)

(limited to 'src/aig/miniaig')

diff --git a/src/aig/miniaig/ndr.h b/src/aig/miniaig/ndr.h
index fa076896..05b7fef0 100644
--- a/src/aig/miniaig/ndr.h
+++ b/src/aig/miniaig/ndr.h
@@ -131,6 +131,8 @@ static inline int           Ndr_DataEnd( Ndr_Data_t * p, int i )
 static inline void          Ndr_DataAddTo( Ndr_Data_t * p, int i, int Add )      { assert(Ndr_DataType(p, i) <= NDR_OBJECT); p->pBody[i] += Add;  } 
 static inline void          Ndr_DataPush( Ndr_Data_t * p, int Type, int Entry )  { p->pHead[p->nSize] = Type; p->pBody[p->nSize++] = Entry;       }
 
+#define NDR_ALLOC(type, num)     ((type *) malloc(sizeof(type) * (size_t)(num)))
+
 ////////////////////////////////////////////////////////////////////////
 ///                          ITERATORS                               ///
 ////////////////////////////////////////////////////////////////////////
@@ -172,7 +174,7 @@ static inline void Ndr_DataResize( Ndr_Data_t * p, int Add )
 {
     if ( p->nSize + Add <= p->nCap )
         return;
-    p->nCap  = Abc_MaxInt( 2 * p->nCap, p->nSize + Add );
+    p->nCap  = 2 * p->nCap > p->nSize + Add ? 2 * p->nCap : p->nSize + Add;
     p->pHead = (unsigned char*)realloc( p->pHead,   p->nCap );
     p->pBody = (unsigned int *)realloc( p->pBody, 4*p->nCap );
 }
@@ -327,8 +329,8 @@ static inline int Ndr_DataObjNum( Ndr_Data_t * p, int Mod )
 static inline void Ndr_WriteVerilogModule( FILE * pFile, void * pDesign, int Mod, char ** pNames )
 {
     Ndr_Data_t * p = (Ndr_Data_t *)pDesign; 
-    Vec_Int_t * vOuts = Vec_IntAlloc( 100 );
-    int Obj, nArray, * pArray, fFirst = 1;
+    int * pOuts = NDR_ALLOC( int, Ndr_DataCoNum(p, Mod) );
+    int i, k, Obj, nArray, * pArray, fFirst = 1;
 
     fprintf( pFile, "\nmodule %s (\n  ", pNames[Ndr_ObjReadEntry(p, Mod, NDR_NAME)] );
 
@@ -349,25 +351,29 @@ static inline void Ndr_WriteVerilogModule( FILE * pFile, void * pDesign, int Mod
         fprintf( pFile, " %s;\n", Ndr_ObjReadOutName(p, Obj, pNames) );
     }
 
+    i = 0;
     Ndr_ModForEachPo( p, Mod, Obj )
     {
         fprintf( pFile, "  output " );
         Ndr_ObjWriteRange( p, Obj, pFile, 1 );
         fprintf( pFile, " %s;\n", Ndr_ObjReadInName(p, Obj, pNames) );
-        Vec_IntPush( vOuts, Ndr_ObjReadBody(p, Obj, NDR_INPUT) );
+        pOuts[i++] = Ndr_ObjReadBody(p, Obj, NDR_INPUT);
     }
 
     fprintf( pFile, "\n" );
 
     Ndr_ModForEachNode( p, Mod, Obj )
     {
-        if ( Vec_IntFind(vOuts, Ndr_ObjReadBody(p, Obj, NDR_OUTPUT)) >= 0 )
+        for ( k = 0; k < i; k++ )
+            if ( pOuts[k] == Ndr_ObjReadBody(p, Obj, NDR_OUTPUT) )
+                break;
+        if ( k < i )
             continue;
         fprintf( pFile, "  wire " );
         Ndr_ObjWriteRange( p, Obj, pFile, 1 );
         fprintf( pFile, " %s;\n", Ndr_ObjReadOutName(p, Obj, pNames) );
     }
-    Vec_IntFree( vOuts );
+    free( pOuts );
 
     fprintf( pFile, "\n" );
 
@@ -499,11 +505,11 @@ static inline void Ndr_WriteVerilog( char * pFileName, void * pDesign, char ** p
 // creating a new module (returns pointer to the memory buffer storing the module info)
 static inline void * Ndr_Create( int Name )
 {
-    Ndr_Data_t * p = ABC_ALLOC( Ndr_Data_t, 1 );
+    Ndr_Data_t * p = NDR_ALLOC( Ndr_Data_t, 1 );
     p->nSize = 0;
     p->nCap  = 16;
-    p->pHead = ABC_ALLOC( unsigned char, p->nCap );
-    p->pBody = ABC_ALLOC( unsigned int, p->nCap * 4 );
+    p->pHead = NDR_ALLOC( unsigned char, p->nCap );
+    p->pBody = NDR_ALLOC( unsigned int, p->nCap * 4 );
     Ndr_DataPush( p, NDR_DESIGN, 0 );
     Ndr_DataPush( p, NDR_NAME, Name );
     Ndr_DataAddTo( p, 0, p->nSize );
@@ -584,10 +590,10 @@ static inline void * Ndr_Read( char * pFileName )
     assert( nFileSize % 5 == 0 );
     rewind( pFile );
     // create structure
-    p = ABC_ALLOC( Ndr_Data_t, 1 );
+    p = NDR_ALLOC( Ndr_Data_t, 1 );
     p->nSize = p->nCap = nFileSize / 5;
-    p->pHead = ABC_ALLOC( unsigned char, p->nCap );
-    p->pBody = ABC_ALLOC( unsigned int, p->nCap * 4 );
+    p->pHead = NDR_ALLOC( unsigned char, p->nCap );
+    p->pBody = NDR_ALLOC( unsigned int, p->nCap * 4 );
     RetValue = (int)fread( p->pBody, 4, p->nCap, pFile );
     RetValue = (int)fread( p->pHead, 1, p->nCap, pFile );
     assert( p->nSize == (int)p->pBody[0] );
-- 
cgit v1.2.3