summaryrefslogtreecommitdiffstats
path: root/src/base/cba/cbaPrs.h
diff options
context:
space:
mode:
authorAlan Mishchenko <alanmi@berkeley.edu>2015-08-09 13:18:22 -0700
committerAlan Mishchenko <alanmi@berkeley.edu>2015-08-09 13:18:22 -0700
commit6a4e94e74de5158280ca6959b17c2c86db1299a4 (patch)
treec2c364976a541b936a28895d4645e0461ad683fb /src/base/cba/cbaPrs.h
parent356217eff7416606ebbcf739dbd999ba6b2db299 (diff)
downloadabc-6a4e94e74de5158280ca6959b17c2c86db1299a4.tar.gz
abc-6a4e94e74de5158280ca6959b17c2c86db1299a4.tar.bz2
abc-6a4e94e74de5158280ca6959b17c2c86db1299a4.zip
Improvements to Cba data-structure.
Diffstat (limited to 'src/base/cba/cbaPrs.h')
-rw-r--r--src/base/cba/cbaPrs.h92
1 files changed, 45 insertions, 47 deletions
diff --git a/src/base/cba/cbaPrs.h b/src/base/cba/cbaPrs.h
index cfe1f06d..9fe1f33d 100644
--- a/src/base/cba/cbaPrs.h
+++ b/src/base/cba/cbaPrs.h
@@ -52,32 +52,33 @@ typedef struct Prs_Ntk_t_ Prs_Ntk_t;
struct Prs_Ntk_t_
{
// general info
- int iModuleName;
- unsigned fMapped : 1;
- unsigned fSlices : 1;
- unsigned fHasC0s : 1;
- unsigned fHasC1s : 1;
- unsigned fHasCXs : 1;
- unsigned fHasCZs : 1;
- Abc_Nam_t * pStrs;
- Abc_Nam_t * pFuns;
+ int iModuleName;
+ unsigned fMapped : 1;
+ unsigned fSlices : 1;
+ unsigned fHasC0s : 1;
+ unsigned fHasC1s : 1;
+ unsigned fHasCXs : 1;
+ unsigned fHasCZs : 1;
+ Abc_Nam_t * pStrs;
+ Abc_Nam_t * pFuns;
+ Hash_IntMan_t * vHash;
// interface
- Vec_Int_t vOrder; // order of signals
+ Vec_Int_t vOrder; // order of signals
// signal names
- Vec_Int_t vInouts; // inouts
- Vec_Int_t vInputs; // inputs
- Vec_Int_t vOutputs; // outputs
- Vec_Int_t vWires; // wires
+ Vec_Int_t vInouts; // inouts
+ Vec_Int_t vInputs; // inputs
+ Vec_Int_t vOutputs; // outputs
+ Vec_Int_t vWires; // wires
// signal ranges
- Vec_Int_t vInoutsR; // inouts
- Vec_Int_t vInputsR; // inputs
- Vec_Int_t vOutputsR; // outputs
- Vec_Int_t vWiresR; // wires
+ Vec_Int_t vInoutsR; // inouts
+ Vec_Int_t vInputsR; // inputs
+ Vec_Int_t vOutputsR; // outputs
+ Vec_Int_t vWiresR; // wires
// slices/concatenations/objects
- Vec_Int_t vSlices; // NameId + RangeId
- Vec_Int_t vConcats; // array of NameId/SliceId/ConstId
- Vec_Int_t vBoxes; // ModuleId + InstId + array of pairs {FormNameId, ActSignalId(NameId/SliceId/ConstId/ConcatId)}
- Vec_Int_t vObjs; // box handles
+ Vec_Int_t vSlices; // NameId + RangeId
+ Vec_Int_t vConcats; // array of NameId/SliceId/ConstId
+ Vec_Int_t vBoxes; // ModuleId + InstId + array of pairs {FormNameId, ActSignalId(NameId/SliceId/ConstId/ConcatId)}
+ Vec_Int_t vObjs; // box handles
};
// parser
@@ -85,24 +86,25 @@ typedef struct Prs_Man_t_ Prs_Man_t;
struct Prs_Man_t_
{
// input data
- char * pName; // file name
- char * pBuffer; // file contents
- char * pLimit; // end of file
- char * pCur; // current position
- Abc_Nam_t * pStrs; // string manager
- Abc_Nam_t * pFuns; // cover manager
- Prs_Ntk_t * pNtk; // current network
- Vec_Ptr_t * vNtks; // input networks
+ char * pName; // file name
+ char * pBuffer; // file contents
+ char * pLimit; // end of file
+ char * pCur; // current position
+ Abc_Nam_t * pStrs; // string manager
+ Abc_Nam_t * pFuns; // cover manager
+ Hash_IntMan_t * vHash; // variable ranges
+ Prs_Ntk_t * pNtk; // current network
+ Vec_Ptr_t * vNtks; // input networks
// temporary data
- Vec_Str_t vCover; // one SOP cover
- Vec_Int_t vTemp; // array of tokens
- Vec_Int_t vTemp2; // array of tokens
+ Vec_Str_t vCover; // one SOP cover
+ Vec_Int_t vTemp; // array of tokens
+ Vec_Int_t vTemp2; // array of tokens
// statistics
- Vec_Int_t vKnown;
- Vec_Int_t vFailed;
- Vec_Int_t vSucceeded;
+ Vec_Int_t vKnown;
+ Vec_Int_t vFailed;
+ Vec_Int_t vSucceeded;
// error handling
- int fUsingTemp2; // vTemp2 is in use
+ int fUsingTemp2; // vTemp2 is in use
char ErrorStr[1000]; // error
};
@@ -188,6 +190,7 @@ static inline void Prs_ManInitializeNtk( Prs_Man_t * p, int iName, int fSlices )
p->pNtk->fSlices = fSlices;
p->pNtk->pStrs = Abc_NamRef( p->pStrs );
p->pNtk->pFuns = Abc_NamRef( p->pFuns );
+ p->pNtk->vHash = Hash_IntManRef( p->vHash );
Vec_PtrPush( p->vNtks, p->pNtk );
}
static inline void Prs_ManFinalizeNtk( Prs_Man_t * p )
@@ -229,16 +232,6 @@ static inline void Prs_NtkAddBox( Prs_Ntk_t * p, int ModName, int InstName, Vec_
Vec_IntPush( &p->vBoxes, InstName );
Vec_IntAppend( &p->vBoxes, vTemp );
}
-
-// parsing range
-static inline void Prs_NtkParseRange( Prs_Ntk_t * p, int RangeId, int * pLeft, int * pRight )
-{
- char * pRange = Prs_NtkStr(p, RangeId);
- char * pPivot = strchr( pRange, ':' );
- *pLeft = atoi(pRange + 1);
- *pRight = pPivot ? atoi(pPivot + 1) : *pLeft;
-}
-
static inline char * Prs_ManLoadFile( char * pFileName, char ** ppLimit )
{
char * pBuffer;
@@ -280,6 +273,8 @@ static inline Prs_Man_t * Prs_ManAlloc( char * pFileName )
p->pStrs = Abc_NamStart( 1000, 24 );
p->pFuns = Abc_NamStart( 100, 24 );
p->vNtks = Vec_PtrAlloc( 100 );
+ p->vHash = Hash_IntManStart( 1000 );
+// Hash_Int2ManInsert( p->vHash, 0, 0, 0 );
return p;
}
@@ -287,6 +282,7 @@ static inline void Prs_NtkFree( Prs_Ntk_t * p )
{
if ( p->pStrs ) Abc_NamDeref( p->pStrs );
if ( p->pFuns ) Abc_NamDeref( p->pFuns );
+ if ( p->vHash ) Hash_IntManDeref( p->vHash );
Vec_IntErase( &p->vOrder );
Vec_IntErase( &p->vInouts );
Vec_IntErase( &p->vInputs );
@@ -315,6 +311,7 @@ static inline void Prs_ManFree( Prs_Man_t * p )
{
if ( p->pStrs ) Abc_NamDeref( p->pStrs );
if ( p->pFuns ) Abc_NamDeref( p->pFuns );
+ if ( p->vHash ) Hash_IntManDeref( p->vHash );
if ( p->vNtks ) Prs_ManVecFree( p->vNtks );
// temporary
Vec_StrErase( &p->vCover );
@@ -424,6 +421,7 @@ static inline char * Ptr_TypeToName( Cba_ObjType_t Type )
if ( Type == CBA_BOX_MAJ ) return "maj";
if ( Type == CBA_BOX_SHARP ) return "sharp";
if ( Type == CBA_BOX_SHARPL) return "sharpl";
+ if ( Type == CBA_BOX_TRI) return "bufifl";
assert( 0 );
return "???";
}