21#ifndef ABC__base__wln__wln_h
22#define ABC__base__wln__wln_h
86static inline int Wln_NtkObjNum(
Wln_Ntk_t *
p ) {
return Vec_IntSize(&
p->vTypes); }
87static inline int Wln_NtkCiNum(
Wln_Ntk_t *
p ) {
return Vec_IntSize(&
p->vCis); }
88static inline int Wln_NtkCoNum(
Wln_Ntk_t *
p ) {
return Vec_IntSize(&
p->vCos); }
89static inline int Wln_NtkFfNum(
Wln_Ntk_t *
p ) {
return Vec_IntSize(&
p->vFfs); }
90static inline int Wln_NtkPiNum(
Wln_Ntk_t *
p ) {
return Wln_NtkCiNum(
p) - Wln_NtkFfNum(
p); }
91static inline int Wln_NtkPoNum(
Wln_Ntk_t *
p ) {
return Wln_NtkCoNum(
p) - Wln_NtkFfNum(
p); }
93static inline int Wln_NtkCi(
Wln_Ntk_t *
p,
int i ) {
return Vec_IntEntry(&
p->vCis, i); }
94static inline int Wln_NtkCo(
Wln_Ntk_t *
p,
int i ) {
return Vec_IntEntry(&
p->vCos, i); }
95static inline int Wln_NtkFf(
Wln_Ntk_t *
p,
int i ) {
return Vec_IntEntry(&
p->vFfs, i); }
97static inline int Wln_ObjType(
Wln_Ntk_t *
p,
int i ) {
return Vec_IntEntry(&
p->vTypes, i); }
109static inline int Wln_ObjFaninNum(
Wln_Ntk_t *
p,
int i ) {
return p->vFanins[i].nSize; }
110static inline int * Wln_ObjFanins(
Wln_Ntk_t *
p,
int i ) {
return Wln_ObjFaninNum(
p, i) > 2 ?
p->vFanins[i].pArray[0] :
p->vFanins[i].Array; }
111static inline int Wln_ObjFanin(
Wln_Ntk_t *
p,
int i,
int f ) {
return Wln_ObjFaninNum(
p, i) > 2 ?
p->vFanins[i].pArray[0][f] :
p->vFanins[i].Array[f]; }
112static inline void Wln_ObjSetFanin(
Wln_Ntk_t *
p,
int i,
int f,
int v ) { Wln_ObjFanins(
p, i )[f] = v; }
113static inline int Wln_ObjFanin0(
Wln_Ntk_t *
p,
int i ) {
return Wln_ObjFanin(
p, i, 0 ); }
114static inline int Wln_ObjFanin1(
Wln_Ntk_t *
p,
int i ) {
return Wln_ObjFanin(
p, i, 1 ); }
115static inline int Wln_ObjFanin2(
Wln_Ntk_t *
p,
int i ) {
return Wln_ObjFanin(
p, i, 2 ); }
117static inline int Wln_ObjRangeId(
Wln_Ntk_t *
p,
int i ) {
return Vec_IntEntry( &
p->vRanges, i ); }
118static inline int Wln_ObjRangeEnd(
Wln_Ntk_t *
p,
int i ) {
return Hash_IntObjData0(
p->pRanges, Wln_ObjRangeId(
p, i) ); }
119static inline int Wln_ObjRangeBeg(
Wln_Ntk_t *
p,
int i ) {
return Hash_IntObjData1(
p->pRanges, Wln_ObjRangeId(
p, i) ); }
120static inline int Wln_ObjRangeIsReversed(
Wln_Ntk_t *
p,
int i ) {
return Wln_ObjRangeEnd(
p, i) < Wln_ObjRangeBeg(
p, i); }
121static inline int Wln_ObjRange(
Wln_Ntk_t *
p,
int i ) {
return 1 + Abc_AbsInt(Wln_ObjRangeEnd(
p, i)-Wln_ObjRangeBeg(
p, i)); }
123static inline int Wln_ObjIsSigned(
Wln_Ntk_t *
p,
int i ) {
return (
int)Vec_StrEntry(&
p->vSigns, i); }
124static inline void Wln_ObjSetSigned(
Wln_Ntk_t *
p,
int i ) { Vec_StrSetEntry(&
p->vSigns, i, (
char)1); }
125static inline int Wln_ObjIsSignedFanin0(
Wln_Ntk_t *
p,
int i ) {
return Wln_ObjIsSigned(
p,
p->fSmtLib ? i : Wln_ObjFanin0(
p, i) ); }
126static inline int Wln_ObjIsSignedFanin1(
Wln_Ntk_t *
p,
int i ) {
return Wln_ObjIsSigned(
p,
p->fSmtLib ? i : Wln_ObjFanin1(
p, i) ); }
127static inline int Wln_ObjIsSignedFanin01(
Wln_Ntk_t *
p,
int i ) {
return Wln_ObjIsSignedFanin0(
p, i ) && Wln_ObjIsSignedFanin1(
p, i ); }
128static inline int Wln_ObjSign(
Wln_Ntk_t *
p,
int i ) {
return Abc_Var2Lit( Wln_ObjRange(
p, i), Wln_ObjIsSigned(
p, i) ); }
130static inline void Wln_NtkCleanCopy(
Wln_Ntk_t *
p ) { Vec_IntFill( &
p->vCopies, Vec_IntCap(&
p->vTypes), 0 ); }
131static inline int Wln_NtkHasCopy(
Wln_Ntk_t *
p ) {
return Vec_IntSize( &
p->vCopies ) > 0; }
132static inline void Wln_ObjSetCopy(
Wln_Ntk_t *
p,
int i,
int c ) { Vec_IntWriteEntry( &
p->vCopies, i, c ); }
133static inline int Wln_ObjCopy(
Wln_Ntk_t *
p,
int i ) {
return Vec_IntEntry( &
p->vCopies, i ); }
135static inline void Wln_NtkCleanLevel(
Wln_Ntk_t *
p ) { Vec_IntFill( &
p->vLevels, Vec_IntCap(&
p->vTypes), 0 ); }
136static inline int Wln_NtkHasLevel(
Wln_Ntk_t *
p ) {
return Vec_IntSize( &
p->vLevels ) > 0; }
137static inline void Wln_ObjSetLevel(
Wln_Ntk_t *
p,
int i,
int l ) { Vec_IntWriteEntry( &
p->vLevels, i, l ); }
138static inline int Wln_ObjLevel(
Wln_Ntk_t *
p,
int i ) {
return Vec_IntEntry( &
p->vLevels, i ); }
140static inline void Wln_NtkCleanNameId(
Wln_Ntk_t *
p ) { Vec_IntFill( &
p->vNameIds, Vec_IntCap(&
p->vTypes), 0 ); }
141static inline int Wln_NtkHasNameId(
Wln_Ntk_t *
p ) {
return Vec_IntSize( &
p->vNameIds ) > 0; }
142static inline void Wln_ObjSetNameId(
Wln_Ntk_t *
p,
int i,
int n ) { Vec_IntWriteEntry( &
p->vNameIds, i, n ); }
143static inline int Wln_ObjNameId(
Wln_Ntk_t *
p,
int i ) {
return Vec_IntEntry( &
p->vNameIds, i ); }
145static inline void Wln_NtkCleanInstId(
Wln_Ntk_t *
p ) { Vec_IntFill( &
p->vInstIds, Vec_IntCap(&
p->vTypes), 0 ); }
146static inline int Wln_NtkHasInstId(
Wln_Ntk_t *
p ) {
return Vec_IntSize( &
p->vInstIds ) > 0; }
147static inline void Wln_ObjSetInstId(
Wln_Ntk_t *
p,
int i,
int n ) { Vec_IntWriteEntry( &
p->vInstIds, i, n ); }
148static inline int Wln_ObjInstId(
Wln_Ntk_t *
p,
int i ) {
return Vec_IntEntry( &
p->vInstIds, i ); }
150static inline void Wln_NtkCleanRefs(
Wln_Ntk_t *
p ) { Vec_IntFill( &
p->vRefs, Vec_IntCap(&
p->vTypes), 0 ); }
151static inline int Wln_NtkHasRefs(
Wln_Ntk_t *
p ) {
return Vec_IntSize( &
p->vRefs ) > 0; }
152static inline void Wln_ObjSetRefs(
Wln_Ntk_t *
p,
int i,
int n ) { Vec_IntWriteEntry( &
p->vRefs, i, n ); }
153static inline int Wln_ObjRefs(
Wln_Ntk_t *
p,
int i ) {
return Vec_IntEntry( &
p->vRefs, i ); }
154static inline int Wln_ObjRefsInc(
Wln_Ntk_t *
p,
int i ) {
return (*Vec_IntEntryP( &
p->vRefs, i ))++; }
155static inline int Wln_ObjRefsDec(
Wln_Ntk_t *
p,
int i ) {
return --(*Vec_IntEntryP( &
p->vRefs, i )); }
156static inline void Wln_ObjRefsFaninInc(
Wln_Ntk_t *
p,
int i,
int k ) { Wln_ObjRefsInc(
p, Wln_ObjFanin(
p, i, k) ); }
157static inline void Wln_ObjRefsFaninDec(
Wln_Ntk_t *
p,
int i,
int k ) { Wln_ObjRefsDec(
p, Wln_ObjFanin(
p, i, k) ); }
159static inline int Wln_ObjFanoutNum(
Wln_Ntk_t *
p,
int i ) {
return Vec_IntEntry( &
p->vRefs, i ); }
160static inline int * Wln_ObjFanouts(
Wln_Ntk_t *
p,
int i ) {
return Vec_IntEntryP( &
p->vFanout, Vec_IntEntry(&
p->vFanout, i) ); }
161static inline int Wln_ObjFanout(
Wln_Ntk_t *
p,
int i,
int f ) {
return Wln_ObjFanouts(
p, i )[f]; }
162static inline void Wln_ObjSetFanout(
Wln_Ntk_t *
p,
int i,
int f,
int v ){ Wln_ObjFanouts(
p, i )[f] = v; }
164static inline void Wln_NtkIncrementTravId(
Wln_Ntk_t *
p ) {
if (!
p->nTravIds++) Vec_IntFill(&
p->vTravIds, Vec_IntCap(&
p->vTypes), 0); }
165static inline void Wln_ObjSetTravIdCurrent(
Wln_Ntk_t *
p,
int i ) { Vec_IntWriteEntry( &
p->vTravIds, i,
p->nTravIds ); }
166static inline void Wln_ObjSetTravIdPrevious(
Wln_Ntk_t *
p,
int i ) { Vec_IntWriteEntry( &
p->vTravIds, i,
p->nTravIds-1 ); }
167static inline int Wln_ObjIsTravIdCurrent(
Wln_Ntk_t *
p,
int i ) {
return (Vec_IntEntry(&
p->vTravIds, i) ==
p->nTravIds); }
168static inline int Wln_ObjIsTravIdPrevious(
Wln_Ntk_t *
p,
int i ) {
return (Vec_IntEntry(&
p->vTravIds, i) ==
p->nTravIds-1); }
169static inline int Wln_ObjCheckTravId(
Wln_Ntk_t *
p,
int i ) {
if ( Wln_ObjIsTravIdCurrent(
p, i) )
return 1; Wln_ObjSetTravIdCurrent(
p, i);
return 0; }
171static inline int Wln_ObjCioId(
Wln_Ntk_t *
p,
int i ) {
assert( Wln_ObjIsCio(
p, i) );
return Wln_ObjFanin1(
p, i); }
172static inline int Wln_ObjIsPi(
Wln_Ntk_t *
p,
int i ) {
return Wln_ObjIsCi(
p, i) && Wln_ObjCioId(
p, i) < Wln_NtkPiNum(
p); }
173static inline int Wln_ObjIsPo(
Wln_Ntk_t *
p,
int i ) {
return Wln_ObjIsCo(
p, i) && Wln_ObjCioId(
p, i) < Wln_NtkPoNum(
p); }
174static inline int Wln_ObjIsRo(
Wln_Ntk_t *
p,
int i ) {
return Wln_ObjIsCi(
p, i) && Wln_ObjCioId(
p, i) >= Wln_NtkPiNum(
p); }
175static inline int Wln_ObjIsRi(
Wln_Ntk_t *
p,
int i ) {
return Wln_ObjIsCo(
p, i) && Wln_ObjCioId(
p, i) >= Wln_NtkPoNum(
p); }
176static inline int Wln_ObjRoToRi(
Wln_Ntk_t *
p,
int i ) {
assert( Wln_ObjIsRo(
p, i) );
return Wln_NtkCo(
p, Wln_NtkCoNum(
p) - Wln_NtkCiNum(
p) + Wln_ObjCioId(
p, i)); }
177static inline int Wln_ObjRiToRo(
Wln_Ntk_t *
p,
int i ) {
assert( Wln_ObjIsRi(
p, i) );
return Wln_NtkCi(
p, Wln_NtkCiNum(
p) - Wln_NtkCoNum(
p) + Wln_ObjCioId(
p, i)); }
187#define Wln_NtkForEachObj( p, i ) \
188 for ( i = 1; i < Wln_NtkObjNum(p); i++ )
189#define Wln_NtkForEachObjReverse( p, i ) \
190 for ( i = Wln_NtkObjNum(p) - 1; i > 0; i-- )
191#define Wln_NtkForEachObjInternal( p, i ) \
192 for ( i = 1; i < Wln_NtkObjNum(p); i++ ) if ( Wln_ObjIsCio(p, i) ) {} else
194#define Wln_NtkForEachPi( p, iPi, i ) \
195 for ( i = 0; (i < Wln_NtkPiNum(p)) && (((iPi) = Wln_NtkCi(p, i)), 1); i++ )
196#define Wln_NtkForEachPo( p, iPo, i ) \
197 for ( i = 0; (i < Wln_NtkPoNum(p)) && (((iPo) = Wln_NtkCo(p, i)), 1); i++ )
198#define Wln_NtkForEachCi( p, iCi, i ) \
199 for ( i = 0; (i < Wln_NtkCiNum(p)) && (((iCi) = Wln_NtkCi(p, i)), 1); i++ )
200#define Wln_NtkForEachCo( p, iCo, i ) \
201 for ( i = 0; (i < Wln_NtkCoNum(p)) && (((iCo) = Wln_NtkCo(p, i)), 1); i++ )
202#define Wln_NtkForEachFf( p, iFf, i ) \
203 for ( i = 0; (i < Wln_NtkFfNum(p)) && (((iFf) = Wln_NtkFf(p, i)), 1); i++ )
205#define Wln_ObjForEachFanin( p, iObj, iFanin, i ) \
206 for ( i = 0; (i < Wln_ObjFaninNum(p, iObj)) && (((iFanin) = Wln_ObjFanin(p, iObj, i)), 1); i++ ) if ( !iFanin ) {} else
207#define Wln_ObjForEachFaninReverse( pObj, iFanin, i ) \
208 for ( i = Wln_ObjFaninNum(p, iObj) - 1; (i >= 0) && (((iFanin) = Wln_ObjFanin(p, iObj, i)), 1); i-- ) if ( !iFanin ) {} else
210#define Wln_ObjForEachFanoutStatic( p, iObj, iFanout, i ) \
211 for ( i = 0; (i < Wln_ObjRefs(p, iObj)) && (((iFanout) = Wln_ObjFanout(p, iObj, i)), 1); i++ )
#define ABC_NAMESPACE_HEADER_END
#define ABC_NAMESPACE_HEADER_START
NAMESPACES ///.
typedefABC_NAMESPACE_IMPL_START struct Vec_Int_t_ Vec_Int_t
DECLARATIONS ///.
struct Vec_Str_t_ Vec_Str_t
typedefABC_NAMESPACE_HEADER_START struct Abc_Nam_t_ Abc_Nam_t
INCLUDES ///.
struct Hash_IntMan_t_ Hash_IntMan_t
typedefABC_NAMESPACE_HEADER_START struct Vec_Ptr_t_ Vec_Ptr_t
INCLUDES ///.
Wln_Ntk_t * Wln_ReadNdr(char *pFileName)
FUNCTION DECLARATIONS ///.
void Wln_NtkStaticFanoutTest(Wln_Ntk_t *p)
void Rtl_LibFree(Rtl_Lib_t *p)
Wln_Ntk_t * Wln_NtkFromNdr(void *pData, int fDump)
void Wln_NtkStaticFanoutStop(Wln_Ntk_t *p)
void Wln_WriteVer(Wln_Ntk_t *p, char *pFileName)
void Wln_ObjPrint(Wln_Ntk_t *p, int iObj)
void Wln_ObjSetSlice(Wln_Ntk_t *p, int iObj, int SliceId)
typedefABC_NAMESPACE_HEADER_START struct Wln_Vec_t_ Wln_Vec_t
INCLUDES ///.
int Wln_NtkIsAcyclic(Wln_Ntk_t *p)
Wln_Ntk_t * Wln_NtkDupDfs(Wln_Ntk_t *p)
Vec_Int_t * Wln_NtkRetime(Wln_Ntk_t *p, int fIgnoreIO, int fSkipSimple, int fVerbose)
void Wln_ObjUpdateType(Wln_Ntk_t *p, int iObj, int Type)
void Wln_ObjAddFanin(Wln_Ntk_t *p, int iObj, int i)
void Wln_NtkStartFaninMap(Wln_Ntk_t *p, Vec_Int_t *vFaninMap, int nMulti)
int Wln_ObjCreateCo(Wln_Ntk_t *p, int iFanin)
char * Wln_ObjConstString(Wln_Ntk_t *p, int iObj)
struct Rtl_Lib_t_ Rtl_Lib_t
char * Wln_ObjName(Wln_Ntk_t *p, int iObj)
DECLARATIONS ///.
void Wln_NtkFree(Wln_Ntk_t *p)
void Wln_NtkRetimeCreateDelayInfo(Wln_Ntk_t *pNtk)
void Wln_NtkStartFanoutMap(Wln_Ntk_t *p, Vec_Int_t *vFanoutMap, Vec_Int_t *vFanoutNums, int nMulti)
void Wln_NtkCreateRefs(Wln_Ntk_t *p)
void Wln_NtkStaticFanoutStart(Wln_Ntk_t *p)
int Wln_ObjAlloc(Wln_Ntk_t *p, int Type, int Signed, int End, int Beg)
int Wln_ObjClone(Wln_Ntk_t *pNew, Wln_Ntk_t *p, int iObj)
int Wln_NtkMemUsage(Wln_Ntk_t *p)
struct Wln_Ntk_t_ Wln_Ntk_t
void * Wln_NtkToNdr(Wln_Ntk_t *pNtk)
DECLARATIONS ///.
void Wln_WriteNdr(Wln_Ntk_t *pNtk, char *pFileName)
void Wln_ObjSetConst(Wln_Ntk_t *p, int iObj, int NameId)
Wln_Ntk_t * Wln_NtkAlloc(char *pName, int nObjsMax)
DECLARATIONS ///.
Rtl_Lib_t * Rtl_LibReadFile(char *pFileName, char *pFileSpec)
void Wln_NtkPrint(Wln_Ntk_t *p)
int Wln_ObjAddFanins(Wln_Ntk_t *p, int iObj, Vec_Int_t *vFanins)