summaryrefslogtreecommitdiffstats
path: root/src/aig/miniaig/miniaig.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/aig/miniaig/miniaig.h')
-rw-r--r--src/aig/miniaig/miniaig.h56
1 files changed, 56 insertions, 0 deletions
diff --git a/src/aig/miniaig/miniaig.h b/src/aig/miniaig/miniaig.h
index 0365b946..9aa41b11 100644
--- a/src/aig/miniaig/miniaig.h
+++ b/src/aig/miniaig/miniaig.h
@@ -144,6 +144,18 @@ static Mini_Aig_t * Mini_AigStart()
Mini_AigPush( p, MINI_AIG_NULL, MINI_AIG_NULL );
return p;
}
+static Mini_Aig_t * Mini_AigStartSupport( int nIns, int nObjsAlloc )
+{
+ Mini_Aig_t * p; int i;
+ assert( 1+nIns < nObjsAlloc );
+ p = MINI_AIG_CALLOC( Mini_Aig_t, 1 );
+ p->nCap = 2*nObjsAlloc;
+ p->nSize = 2*(1+nIns);
+ p->pArray = MINI_AIG_ALLOC( int, p->nCap );
+ for ( i = 0; i < p->nSize; i++ )
+ p->pArray[i] = MINI_AIG_NULL;
+ return p;
+}
static void Mini_AigStop( Mini_Aig_t * p )
{
MINI_AIG_FREE( p->pArray );
@@ -170,6 +182,31 @@ static int Mini_AigAndNum( Mini_Aig_t * p )
nNodes++;
return nNodes;
}
+static int Mini_AigXorNum( Mini_Aig_t * p )
+{
+ int i, nNodes = 0;
+ Mini_AigForEachAnd( p, i )
+ nNodes += p->pArray[2*i] > p->pArray[2*i+1];
+ return nNodes;
+}
+static int Mini_AigLevelNum( Mini_Aig_t * p )
+{
+ int i, Level = 0;
+ int * pLevels = MINI_AIG_CALLOC( int, Mini_AigNodeNum(p) );
+ Mini_AigForEachAnd( p, i )
+ {
+ int Lel0 = pLevels[Mini_AigLit2Var(Mini_AigNodeFanin0(p, i))];
+ int Lel1 = pLevels[Mini_AigLit2Var(Mini_AigNodeFanin1(p, i))];
+ pLevels[i] = 1 + (Lel0 > Lel1 ? Lel0 : Lel1);
+ }
+ Mini_AigForEachPo( p, i )
+ {
+ int Lel0 = pLevels[Mini_AigLit2Var(Mini_AigNodeFanin0(p, i))];
+ Level = Level > Lel0 ? Level : Lel0;
+ }
+ MINI_AIG_FREE( pLevels );
+ return Level;
+}
static void Mini_AigPrintStats( Mini_Aig_t * p )
{
printf( "MiniAIG stats: PI = %d PO = %d FF = %d AND = %d\n", Mini_AigPiNum(p), Mini_AigPoNum(p), Mini_AigRegNum(p), Mini_AigAndNum(p) );
@@ -648,6 +685,25 @@ int main( int argc, char ** argv )
}
*/
+/*
+#include "aig/miniaig/miniaig.h"
+
+// this procedure creates a MiniAIG for function F = a*b + ~c and writes it into a file "test.aig"
+void Mini_AigTest()
+{
+ Mini_Aig_t * p = Mini_AigStart(); // create empty AIG manager (contains only const0 node)
+ int litApos = Mini_AigCreatePi( p ); // create input A (returns pos lit of A)
+ int litBpos = Mini_AigCreatePi( p ); // create input B (returns pos lit of B)
+ int litCpos = Mini_AigCreatePi( p ); // create input C (returns pos lit of C)
+ int litCneg = Mini_AigLitNot( litCpos ); // neg lit of C
+ int litAnd = Mini_AigAnd( p, litApos, litBpos ); // lit for a*b
+ int litOr = Mini_AigOr( p, litAnd, litCneg ); // lit for a*b + ~c
+ Mini_AigCreatePo( p, litOr ); // create primary output
+ Mini_AigerWrite( "test.aig", p, 1 ); // write the result into a file
+ Mini_AigStop( p ); // deallocate MiniAIG
+}
+*/
+
////////////////////////////////////////////////////////////////////////
/// FUNCTION DECLARATIONS ///
////////////////////////////////////////////////////////////////////////