21#ifndef ABC__base__cba__cba_h
22#define ABC__base__cba__cba_h
121static inline char * Cba_ManName(
Cba_Man_t *
p ) {
return p->pName; }
122static inline char * Cba_ManSpec(
Cba_Man_t *
p ) {
return p->pSpec; }
123static inline int Cba_ManNtkNum(
Cba_Man_t *
p ) {
return Vec_PtrSize(&
p->vNtks)-1; }
124static inline int Cba_ManNtkIsOk(
Cba_Man_t *
p,
int i ) {
return i > 0 && i <= Cba_ManNtkNum(
p); }
127static inline Cba_Ntk_t * Cba_ManNtkFind(
Cba_Man_t *
p,
char * pName ) {
return Cba_ManNtk(
p, Cba_ManNtkFindId(
p, pName) ); }
137static inline Cba_Ntk_t * Cba_NtkNtk(
Cba_Ntk_t *
p,
int i ) {
return Cba_ManNtk(
p->pDesign, i); }
138static inline int Cba_NtkId(
Cba_Ntk_t *
p ) {
return p->Id; }
139static inline int Cba_NtkPi(
Cba_Ntk_t *
p,
int i ) {
return Vec_IntEntry(&
p->vInputs, i); }
140static inline int Cba_NtkPo(
Cba_Ntk_t *
p,
int i ) {
return Vec_IntEntry(&
p->vOutputs, i); }
141static inline int Cba_NtkPioOrder(
Cba_Ntk_t *
p,
int i ) {
return Vec_IntEntry(&
p->vOrder, i); }
142static inline int Cba_NtkBoxSeq(
Cba_Ntk_t *
p,
int i ) {
return Vec_IntEntry(&
p->vSeq, i); }
144static inline char * Cba_NtkStr(
Cba_Ntk_t *
p,
int i ) {
return Cba_ManStr(
p->pDesign, i); }
145static inline int Cba_NtkStrId(
Cba_Ntk_t *
p,
char * pName ) {
return Cba_ManStrId(
p->pDesign, pName); }
146static inline char * Cba_NtkConst(
Cba_Ntk_t *
p,
int i ) {
return Cba_ManConst(
p->pDesign, i); }
147static inline char * Cba_NtkSop(
Cba_Ntk_t *
p,
int i ) {
return Cba_ManConst(
p->pDesign, i); }
148static inline int Cba_NtkNameId(
Cba_Ntk_t *
p ) {
return p->NameId; }
149static inline char * Cba_NtkName(
Cba_Ntk_t *
p ) {
return Cba_NtkStr(
p,
p->NameId); }
150static inline char * Cba_NtkTypeName(
Cba_Ntk_t *
p,
int Type ) {
return p->pDesign->pTypeNames[Type]; }
151static inline int Cba_NtkCopy(
Cba_Ntk_t *
p ) {
return p->iCopy; }
153static inline void Cba_NtkSetCopy(
Cba_Ntk_t *
p,
int i ) {
assert(
p->iCopy == 0);
p->iCopy = i; }
154static inline int Cba_NtkHashRange(
Cba_Ntk_t *
p,
int l,
int r ) {
return Hash_Int2ManInsert(
p->pDesign->vHash, l, r, 0 ); }
155static inline int Cba_NtkRangeLeft(
Cba_Ntk_t *
p,
int h ) {
return h ? Hash_IntObjData0(
p->pDesign->vHash, h ) : 0; }
156static inline int Cba_NtkRangeRight(
Cba_Ntk_t *
p,
int h ) {
return h ? Hash_IntObjData1(
p->pDesign->vHash, h ) : 0; }
157static inline int Cba_NtkRangeSize(
Cba_Ntk_t *
p,
int h ) {
int l = Cba_NtkRangeLeft(
p, h), r = Cba_NtkRangeRight(
p, h);
return 1 + (l > r ? l-r : r-l);}
159static inline int Cba_NtkPiNum(
Cba_Ntk_t *
p ) {
return Vec_IntSize(&
p->vInputs); }
160static inline int Cba_NtkPoNum(
Cba_Ntk_t *
p ) {
return Vec_IntSize(&
p->vOutputs); }
161static inline int Cba_NtkPioNum(
Cba_Ntk_t *
p ) {
return Cba_NtkPiNum(
p) + Cba_NtkPoNum(
p); }
162static inline int Cba_NtkPiNumAlloc(
Cba_Ntk_t *
p ) {
return Vec_IntCap(&
p->vInputs); }
163static inline int Cba_NtkPoNumAlloc(
Cba_Ntk_t *
p ) {
return Vec_IntCap(&
p->vOutputs); }
164static inline int Cba_NtkPioOrderNum(
Cba_Ntk_t *
p ) {
return Vec_IntSize(&
p->vOrder); }
165static inline int Cba_NtkObjNum(
Cba_Ntk_t *
p ) {
return Vec_StrSize(&
p->vObjType)-1; }
166static inline int Cba_NtkObjNumAlloc(
Cba_Ntk_t *
p ) {
return Vec_StrCap(&
p->vObjType)-1; }
167static inline int Cba_NtkFinNum(
Cba_Ntk_t *
p ) {
return Vec_IntSize(&
p->vFinFon)-1; }
168static inline int Cba_NtkFinNumAlloc(
Cba_Ntk_t *
p ) {
return Vec_IntCap(&
p->vFinFon)-1; }
169static inline int Cba_NtkFonNum(
Cba_Ntk_t *
p ) {
return Vec_IntSize(&
p->vFonObj)-1; }
170static inline int Cba_NtkFonNumAlloc(
Cba_Ntk_t *
p ) {
return Vec_IntCap(&
p->vFonObj)-1; }
171static inline int Cba_NtkTypeNum(
Cba_Ntk_t *
p,
int Type ) {
return Vec_StrCountEntry(&
p->vObjType, (
char)Type); }
172static inline int Cba_NtkBoxNum(
Cba_Ntk_t *
p ) {
return Cba_NtkObjNum(
p) - Cba_NtkPioNum(
p); }
174static inline int Cba_NtkBoxPrimNum(
Cba_Ntk_t *
p ) {
return Vec_StrCountLarger(&
p->vObjType, (
char)
CBA_OBJ_BOX); }
175static inline int Cba_NtkBoxSeqNum(
Cba_Ntk_t *
p ) {
return Vec_IntSize(&
p->vSeq); }
177static inline void Cba_NtkCleanObjCopies(
Cba_Ntk_t *
p ) { Vec_IntFill(&
p->vObjCopy, Vec_StrCap(&
p->vObjType), -1); }
178static inline void Cba_NtkCleanObjFuncs(
Cba_Ntk_t *
p ) { Vec_IntFill(&
p->vObjFunc, Vec_StrCap(&
p->vObjType), 0); }
179static inline void Cba_NtkCleanObjNames(
Cba_Ntk_t *
p ) { Vec_IntFill(&
p->vObjName, Vec_StrCap(&
p->vObjType), 0); }
180static inline void Cba_NtkCleanObjAttrs(
Cba_Ntk_t *
p ) { Vec_IntFill(&
p->vObjAttr, Vec_StrCap(&
p->vObjType), 0); Vec_IntFill(&
p->vAttrSto, 1, -1); }
181static inline void Cba_NtkCleanFonCopies(
Cba_Ntk_t *
p ) { Vec_IntFill(&
p->vFonCopy, Vec_IntCap(&
p->vFonObj), 0); }
182static inline void Cba_NtkCleanFonNames(
Cba_Ntk_t *
p ) { Vec_IntFill(&
p->vFonName, Vec_IntCap(&
p->vFonObj), 0); }
183static inline void Cba_NtkCleanFonRanges(
Cba_Ntk_t *
p ) { Vec_IntFill(&
p->vFonRange, Vec_IntCap(&
p->vFonObj), 0); }
184static inline void Cba_NtkCleanFonPrevs(
Cba_Ntk_t *
p ) { Vec_IntFill(&
p->vFonPrev, Vec_IntCap(&
p->vFonObj), 0); }
185static inline void Cba_NtkCleanFonNexts(
Cba_Ntk_t *
p ) { Vec_IntFill(&
p->vFonNext, Vec_IntCap(&
p->vFonObj), 0); }
186static inline void Cba_NtkCleanFinFon0(
Cba_Ntk_t *
p ) { Vec_IntFill(&
p->vFinFon0, Vec_IntCap(&
p->vFinFon), 0); }
187static inline void Cba_NtkCleanFinObjs(
Cba_Ntk_t *
p ) { Vec_IntFill(&
p->vFinObj, Vec_IntCap(&
p->vFinFon), 0); }
189static inline int Cba_NtkHasObjCopies(
Cba_Ntk_t *
p ) {
return Vec_IntSize(&
p->vObjCopy) > 0; }
190static inline int Cba_NtkHasObjFuncs(
Cba_Ntk_t *
p ) {
return Vec_IntSize(&
p->vObjFunc) > 0; }
191static inline int Cba_NtkHasObjNames(
Cba_Ntk_t *
p ) {
return Vec_IntSize(&
p->vObjName) > 0; }
192static inline int Cba_NtkHasObjAttrs(
Cba_Ntk_t *
p ) {
return Vec_IntSize(&
p->vObjAttr) > 0; }
193static inline int Cba_NtkHasFonCopies(
Cba_Ntk_t *
p ) {
return Vec_IntSize(&
p->vFonCopy) > 0; }
194static inline int Cba_NtkHasFonNames(
Cba_Ntk_t *
p ) {
return Vec_IntSize(&
p->vFonName) > 0; }
195static inline int Cba_NtkHasFonRanges(
Cba_Ntk_t *
p ) {
return Vec_IntSize(&
p->vFonRange) > 0; }
196static inline int Cba_NtkHasFonPrevs(
Cba_Ntk_t *
p ) {
return Vec_IntSize(&
p->vFonPrev) > 0; }
197static inline int Cba_NtkHasFonNexts(
Cba_Ntk_t *
p ) {
return Vec_IntSize(&
p->vFonNext) > 0; }
198static inline int Cba_NtkHasFinFon0(
Cba_Ntk_t *
p ) {
return Vec_IntSize(&
p->vFinFon0) > 0; }
199static inline int Cba_NtkHasFinObjs(
Cba_Ntk_t *
p ) {
return Vec_IntSize(&
p->vFinObj) > 0; }
201static inline void Cba_NtkFreeObjCopies(
Cba_Ntk_t *
p ) { Vec_IntErase(&
p->vObjCopy); }
202static inline void Cba_NtkFreeObjFuncs(
Cba_Ntk_t *
p ) { Vec_IntErase(&
p->vObjFunc); }
203static inline void Cba_NtkFreeObjNames(
Cba_Ntk_t *
p ) { Vec_IntErase(&
p->vObjName); }
204static inline void Cba_NtkFreeObjAttrs(
Cba_Ntk_t *
p ) { Vec_IntErase(&
p->vObjAttr); }
205static inline void Cba_NtkFreeFonCopies(
Cba_Ntk_t *
p ) { Vec_IntErase(&
p->vFonCopy); }
206static inline void Cba_NtkFreeFonNames(
Cba_Ntk_t *
p ) { Vec_IntErase(&
p->vFonName); }
207static inline void Cba_NtkFreeFonRanges(
Cba_Ntk_t *
p ) { Vec_IntErase(&
p->vFonRange); }
208static inline void Cba_NtkFreeFonPrevs(
Cba_Ntk_t *
p ) { Vec_IntErase(&
p->vFonPrev); }
209static inline void Cba_NtkFreeFonNexts(
Cba_Ntk_t *
p ) { Vec_IntErase(&
p->vFonNext); }
210static inline void Cba_NtkFreeFinFon0(
Cba_Ntk_t *
p ) { Vec_IntErase(&
p->vFinFon0); }
211static inline void Cba_NtkFreeFinObjs(
Cba_Ntk_t *
p ) { Vec_IntErase(&
p->vFinObj); }
222static inline int Cba_ObjIsPio(
Cba_Ntk_t *
p,
int i ) {
return Cba_ObjIsPi(
p, i) || Cba_ObjIsPo(
p, i); }
223static inline int Cba_ObjIsBox(
Cba_Ntk_t *
p,
int i ) {
return Cba_TypeIsBox(Cba_ObjType(
p, i)); }
229static inline int Cba_ObjIsUnary(
Cba_Ntk_t *
p,
int i ) {
return Cba_TypeIsUnary(Cba_ObjType(
p, i)); }
231static inline int Cba_ObjFin0(
Cba_Ntk_t *
p,
int i ) {
assert(i>0);
return Vec_IntEntry(&
p->vObjFin0, i); }
232static inline int Cba_ObjFon0(
Cba_Ntk_t *
p,
int i ) {
assert(i>0);
return Vec_IntEntry(&
p->vObjFon0, i); }
233static inline int Cba_ObjFin(
Cba_Ntk_t *
p,
int i,
int k ) {
assert(i>0);
return Cba_ObjFin0(
p, i) + k; }
234static inline int Cba_ObjFon(
Cba_Ntk_t *
p,
int i,
int k ) {
assert(i>0);
return Cba_ObjFon0(
p, i) + k; }
235static inline int Cba_ObjFinNum(
Cba_Ntk_t *
p,
int i ) {
assert(i>0);
return Cba_ObjFin0(
p, i+1) - Cba_ObjFin0(
p, i); }
236static inline int Cba_ObjFonNum(
Cba_Ntk_t *
p,
int i ) {
assert(i>0);
return Cba_ObjFon0(
p, i+1) - Cba_ObjFon0(
p, i); }
238static inline int Cba_ObjCopy(
Cba_Ntk_t *
p,
int i ) {
assert(i>0);
assert( Cba_NtkHasObjCopies(
p) );
return Vec_IntGetEntryFull(&
p->vObjCopy, i); }
239static inline int Cba_ObjFunc(
Cba_Ntk_t *
p,
int i ) {
assert(i>0);
assert( Cba_NtkHasObjFuncs(
p) );
return Vec_IntGetEntry(&
p->vObjFunc, i); }
240static inline int Cba_ObjName(
Cba_Ntk_t *
p,
int i ) {
assert(i>0);
assert( Cba_NtkHasObjNames(
p) );
return Vec_IntGetEntry(&
p->vObjName, i); }
241static inline char * Cba_ObjNameStr(
Cba_Ntk_t *
p,
int i ) {
assert(i>0);
return Cba_NtkStr(
p, Cba_ObjName(
p, i)); }
242static inline int Cba_ObjAttr(
Cba_Ntk_t *
p,
int i ) {
assert(i>=0);
return Cba_NtkHasObjAttrs(
p) ? Vec_IntGetEntry(&
p->vObjAttr, i) : 0; }
243static inline int Cba_ObjAttrSize(
Cba_Ntk_t *
p,
int i ) {
assert(i>=0);
return Cba_ObjAttr(
p, i) ? Vec_IntEntry(&
p->vAttrSto, Cba_ObjAttr(
p, i)) : 0; }
244static inline int * Cba_ObjAttrArray(
Cba_Ntk_t *
p,
int i ) {
assert(i>=0);
return Cba_ObjAttr(
p, i) ? Vec_IntEntryP(&
p->vAttrSto, Cba_ObjAttr(
p, i)+1) : NULL; }
245static inline int Cba_ObjAttrValue(
Cba_Ntk_t *
p,
int i,
int x ) {
int k, s = Cba_ObjAttrSize(
p, i), * a = Cba_ObjAttrArray(
p, i);
for ( k = 0; k < s; k += 2)
if (a[k] == x)
return a[k+1];
return 0; }
247static inline void Cba_ObjSetCopy(
Cba_Ntk_t *
p,
int i,
int x ) {
assert(Cba_ObjCopy(
p, i) == -1); Vec_IntSetEntry( &
p->vObjCopy, i, x ); }
248static inline void Cba_ObjSetFunc(
Cba_Ntk_t *
p,
int i,
int x ) {
assert(Cba_ObjFunc(
p, i) == 0); Vec_IntSetEntry( &
p->vObjFunc, i, x ); }
249static inline void Cba_ObjSetName(
Cba_Ntk_t *
p,
int i,
int x ) {
assert(Cba_ObjName(
p, i) == 0); Vec_IntSetEntry( &
p->vObjName, i, x ); }
250static inline void Cba_ObjSetAttrs(
Cba_Ntk_t *
p,
int i,
int * a,
int s ) {
assert(Cba_ObjAttr(
p, i) == 0);
if ( !a )
return; Vec_IntSetEntry(&
p->vObjAttr, i, Vec_IntSize(&
p->vAttrSto)); Vec_IntPush(&
p->vAttrSto, s); Vec_IntPushArray(&
p->vAttrSto, a, s); }
252static inline int Cba_FinFon(
Cba_Ntk_t *
p,
int f ) {
assert(f>0);
return Vec_IntEntry(&
p->vFinFon, f); }
253static inline void Cba_PatchFinFon(
Cba_Ntk_t *
p,
int f,
int x ) {
assert(f>0); Vec_IntWriteEntry(&
p->vFinFon, f, x); }
254static inline int Cba_ObjFinFon(
Cba_Ntk_t *
p,
int i,
int k ) {
assert(i>0);
return Cba_FinFon(
p, Cba_ObjFin(
p, i, k)); }
255static inline int * Cba_ObjFinFons(
Cba_Ntk_t *
p,
int i ) {
assert(i>0);
return Vec_IntEntryP(&
p->vFinFon, Cba_ObjFin0(
p, i)); }
257static inline void Cba_ObjSetFinFon(
Cba_Ntk_t *
p,
int i,
int k,
int x ) {
assert(i>0);
assert(Cba_ObjFinFon(
p, i, k)== 0); Vec_IntWriteEntry(&
p->vFinFon, Cba_ObjFin(
p, i, k), x); }
258static inline void Cba_ObjCleanFinFon(
Cba_Ntk_t *
p,
int i,
int k) {
assert(i>0);
assert(Cba_ObjFinFon(
p, i, k)!= 0); Vec_IntWriteEntry(&
p->vFinFon, Cba_ObjFin(
p, i, k), 0); }
259static inline void Cba_ObjPatchFinFon(
Cba_Ntk_t *
p,
int i,
int k,
int x){
assert(i>0); Cba_ObjCleanFinFon(
p, i, k); Cba_ObjSetFinFon(
p, i, k, x); }
261static inline int Cba_ObjNtkId(
Cba_Ntk_t *
p,
int i ) {
assert(i>0);
return (Cba_ObjIsBoxUser(
p, i) && Cba_NtkHasObjFuncs(
p)) ? Cba_ObjFunc(
p, i) : 0;}
263static inline void Cba_ObjSetNtkId(
Cba_Ntk_t *
p,
int i,
int x ) {
assert(i>0);
assert(Cba_ObjIsBoxUser(
p, i)); Cba_ObjSetFunc(
p, i, x ); }
264static inline int Cba_ObjIsSeq(
Cba_Ntk_t *
p,
int i ) {
assert(i>0);
return Cba_ObjIsBoxUser(
p, i) ? Cba_ObjNtk(
p, i)->fSeq : Cba_TypeIsSeq(Cba_ObjType(
p, i)); }
266static inline int Cba_FonIsReal(
int f ) {
return f > 0; }
267static inline int Cba_FonIsConst(
int f ) {
return f < 0; }
268static inline int Cba_FonConst(
int f ) {
assert(Cba_FonIsConst(f));
return -f-1; }
269static inline int Cba_FonFromConst(
int c ) {
assert(c >= 0);
return -c-1; }
270static inline int Cba_FonConstRangeSize(
Cba_Ntk_t *
p,
int f ) {
assert(Cba_FonIsConst(f));
return atoi(Cba_NtkConst(
p, Cba_FonConst(f))); }
271static inline int Cba_FonConstSigned(
Cba_Ntk_t *
p,
int f ) {
assert(Cba_FonIsConst(f));
return strchr(Cba_NtkConst(
p, Cba_FonConst(f)),
's') != NULL; }
273static inline int Cba_FonObj(
Cba_Ntk_t *
p,
int f ) {
return Cba_FonIsReal(f) ? Vec_IntEntry(&
p->vFonObj, f) : 0; }
274static inline int Cba_FonRangeId(
Cba_Ntk_t *
p,
int f ) {
assert(Cba_FonIsReal(f));
return Cba_NtkHasFonRanges(
p)?Vec_IntGetEntry(&
p->vFonRange, f):0;}
275static inline int Cba_FonRange(
Cba_Ntk_t *
p,
int f ) {
assert(Cba_FonIsReal(f));
return Abc_Lit2Var( Cba_FonRangeId(
p, f) ); }
276static inline int Cba_FonLeft(
Cba_Ntk_t *
p,
int f ) {
return Cba_NtkRangeLeft(
p, Cba_FonRange(
p, f)); }
277static inline int Cba_FonRight(
Cba_Ntk_t *
p,
int f ) {
return Cba_NtkRangeRight(
p, Cba_FonRange(
p, f)); }
278static inline int Cba_FonSigned(
Cba_Ntk_t *
p,
int f ) {
return Cba_FonIsConst(f) ? Cba_FonConstSigned(
p, f) : Abc_LitIsCompl(Cba_FonRangeId(
p, f)); }
279static inline int Cba_FonRangeSize(
Cba_Ntk_t *
p,
int f ) {
return Cba_FonIsConst(f) ? Cba_FonConstRangeSize(
p, f):Cba_NtkRangeSize(
p, Cba_FonRange(
p, f)); }
280static inline void Cba_FonSetRangeSign(
Cba_Ntk_t *
p,
int f,
int x ) {
assert(Cba_NtkHasFonRanges(
p)); Vec_IntSetEntry(&
p->vFonRange, f, x); }
281static inline void Cba_FonSetRange(
Cba_Ntk_t *
p,
int f,
int x ) {
assert(Cba_NtkHasFonRanges(
p)); Vec_IntSetEntry(&
p->vFonRange, f, Abc_Var2Lit(x,0)); }
282static inline void Cba_FonHashRange(
Cba_Ntk_t *
p,
int f,
int l,
int r ) { Cba_FonSetRange(
p, f, Cba_NtkHashRange(
p, l, r) ); }
283static inline int Cba_FonCopy(
Cba_Ntk_t *
p,
int f ) {
return Cba_FonIsReal(f) ? Vec_IntEntry(&
p->vFonCopy, f) : f; }
284static inline void Cba_FonSetCopy(
Cba_Ntk_t *
p,
int f,
int x ) {
assert(Cba_FonIsReal(f));
assert(Cba_FonCopy(
p, f) == 0); Vec_IntWriteEntry(&
p->vFonCopy, f, x); }
285static inline int Cba_FonName(
Cba_Ntk_t *
p,
int f ) {
assert(Cba_NtkHasFonNames(
p));
assert(Cba_FonIsReal(f));
return Vec_IntGetEntry( &
p->vFonName, f ); }
286static inline char * Cba_FonNameStr(
Cba_Ntk_t *
p,
int f ) {
assert(Cba_NtkHasFonNames(
p));
assert(Cba_FonIsReal(f));
return Cba_NtkStr(
p, Cba_FonName(
p, f)); }
287static inline void Cba_FonSetName(
Cba_Ntk_t *
p,
int f,
int x ) {
assert(Cba_NtkHasFonNames(
p));
assert(Cba_FonIsReal(f));
assert(Cba_FonName(
p, f) == 0); Vec_IntSetEntry(&
p->vFonName, f, x); }
288static inline void Cba_FonCleanName(
Cba_Ntk_t *
p,
int f ) {
assert(Cba_NtkHasFonNames(
p));
assert(Cba_FonIsReal(f));
assert(Cba_FonName(
p, f) != 0); Vec_IntSetEntry(&
p->vFonName, f, 0); }
289static inline void Cba_FonPatchName(
Cba_Ntk_t *
p,
int f,
int x) {
assert(Cba_NtkHasFonNames(
p));
assert(Cba_FonIsReal(f)); Cba_FonCleanName(
p, f); Cba_FonSetName(
p, f, x); }
290static inline int Cba_FonIndex(
Cba_Ntk_t *
p,
int f ) {
assert(Cba_FonIsReal(f));
return f - Cba_ObjFon0(
p, Cba_FonObj(
p, f) ); }
291static inline int Cba_FonNtkId(
Cba_Ntk_t *
p,
int f ) {
assert(Cba_FonIsReal(f));
return Cba_ObjNtkId(
p, Cba_FonObj(
p, f) ); }
292static inline Cba_Ntk_t * Cba_FonNtk(
Cba_Ntk_t *
p,
int f ) {
assert(Cba_FonIsReal(f));
return Cba_ObjNtk(
p, Cba_FonObj(
p, f) ); }
294static inline int Cba_ObjFanin(
Cba_Ntk_t *
p,
int i,
int k ) {
assert(i>0);
return Cba_FonObj(
p, Cba_ObjFinFon(
p, i, k) ); }
295static inline int Cba_ObjLeft(
Cba_Ntk_t *
p,
int i ) {
return Cba_FonLeft(
p, Cba_ObjFon0(
p, i) ); }
296static inline int Cba_ObjRight(
Cba_Ntk_t *
p,
int i ) {
return Cba_FonRight(
p, Cba_ObjFon0(
p, i) ); }
297static inline int Cba_ObjRangeSize(
Cba_Ntk_t *
p,
int i ) {
return Cba_FonRangeSize(
p, Cba_ObjFon0(
p, i) ); }
298static inline int Cba_ObjSigned(
Cba_Ntk_t *
p,
int i ) {
return Cba_FonSigned(
p, Cba_ObjFon0(
p, i) ); }
299static inline int Cba_ObjSign(
Cba_Ntk_t *
p,
int i ) {
return Abc_Var2Lit( Cba_FonRangeSize(
p, i), Cba_ObjSigned(
p, i) ); }
305#define Cba_ManForEachNtk( p, pNtk, i ) \
306 for ( i = 1; (i <= Cba_ManNtkNum(p)) && (((pNtk) = Cba_ManNtk(p, i)), 1); i++ )
308#define Cba_NtkForEachPi( p, iObj, i ) \
309 for ( i = 0; (i < Cba_NtkPiNum(p)) && (((iObj) = Cba_NtkPi(p, i)), 1); i++ )
310#define Cba_NtkForEachPo( p, iObj, i ) \
311 for ( i = 0; (i < Cba_NtkPoNum(p)) && (((iObj) = Cba_NtkPo(p, i)), 1); i++ )
312#define Cba_NtkForEachBoxSeq( p, iObj, i ) \
313 for ( i = 0; (i < Cba_NtkBoxSeqNum(p)) && (((iObj) = Cba_NtkBoxSeq(p, i)), 1); i++ )
314#define Cba_NtkForEachPioOrder( p, iObj, i ) \
315 for ( i = 0; (i < Cba_NtkPioOrderNum(p)) && (((iObj) = Cba_NtkPioOrder(p, i)), 1); i++ )
317#define Cba_NtkForEachPiFon( p, iObj, iFon, i ) \
318 for ( i = 0; (i < Cba_NtkPiNum(p)) && (((iObj) = Cba_NtkPi(p, i)), 1) && (((iFon) = Cba_ObjFon0(p, iObj)), 1); i++ )
319#define Cba_NtkForEachPoDriverFon( p, iObj, iFon, i ) \
320 for ( i = 0; (i < Cba_NtkPoNum(p)) && (((iObj) = Cba_NtkPo(p, i)), 1) && (((iFon) = Cba_ObjFinFon(p, iObj, 0)), 1); i++ )
321#define Cba_NtkForEachPoDriver( p, iObj, i ) \
322 for ( i = 0; (i < Cba_NtkPoNum(p)) && (((iObj) = Cba_ObjFanin(p, Cba_NtkPo(p, i), 0)), 1); i++ )
324#define Cba_NtkForEachObj( p, i ) \
325 for ( i = 1; i < Vec_StrSize(&p->vObjType); i++ ) if ( !Cba_ObjType(p, i) ) {} else
326#define Cba_NtkForEachObjType( p, Type, i ) \
327 for ( i = 1; i < Vec_StrSize(&p->vObjType) && (((Type) = Cba_ObjType(p, i)), 1); i++ ) if ( !Type ) {} else
328#define Cba_NtkForEachBox( p, i ) \
329 for ( i = 1; i < Vec_StrSize(&p->vObjType); i++ ) if ( !Cba_ObjIsBox(p, i) ) {} else
330#define Cba_NtkForEachBoxComb( p, i ) \
331 for ( i = 1; i < Vec_StrSize(&p->vObjType); i++ ) if ( !Cba_ObjIsBox(p, i) || Cba_ObjIsSeq(p, i) ) {} else
332#define Cba_NtkForEachBoxUser( p, i ) \
333 for ( i = 1; i < Vec_StrSize(&p->vObjType); i++ ) if ( !Cba_ObjIsBoxUser(p, i) ) {} else
334#define Cba_NtkForEachBoxPrim( p, i ) \
335 for ( i = 1; i < Vec_StrSize(&p->vObjType); i++ ) if ( !Cba_ObjIsBoxPrim(p, i) ) {} else
337#define Cba_NtkForEachFon( p, i ) \
338 for ( i = 1; i < Vec_IntSize(&p->vFonObj); i++ )
339#define Cba_NtkForEachFinFon( p, iFon, iFin ) \
340 for ( iFin = 1; iFin < Vec_IntSize(&p->vFinFon) && (((iFon) = Vec_IntEntry(&p->vFinFon, iFin)), 1); iFin++ ) if ( !iFon ) {} else
341#define Cba_NtkForEachFonName( p, NameId, iFon ) \
342 for ( iFon = 1; iFon < Vec_IntSize(&p->vFonName) && (((NameId) = Vec_IntEntry(&p->vFonName, iFon)), 1); iFon++ ) if ( !NameId ) {} else
344#define Cba_ObjForEachFin( p, iObj, iFin, k ) \
345 for ( k = 0, iFin = Cba_ObjFin0(p, iObj); iFin < Cba_ObjFin0(p, iObj+1); iFin++, k++ )
346#define Cba_ObjForEachFon( p, iObj, iFon, k ) \
347 for ( k = 0, iFon = Cba_ObjFon0(p, iObj); iFon < Cba_ObjFon0(p, iObj+1); iFon++, k++ )
348#define Cba_ObjForEachFinFon( p, iObj, iFin, iFon, k ) \
349 for ( k = 0, iFin = Cba_ObjFin0(p, iObj); iFin < Cba_ObjFin0(p, iObj+1) && ((iFon = Cba_FinFon(p, iFin)), 1); iFin++, k++ )
350#define Cba_ObjForEachFinFanin( p, iObj, iFin, iFanin, k ) \
351 for ( k = 0, iFin = Cba_ObjFin0(p, iObj); iFin < Cba_ObjFin0(p, iObj+1) && ((iFanin = Cba_FonObj(p, Cba_FinFon(p, iFin))), 1); iFin++, k++ )
352#define Cba_ObjForEachFinFaninReal( p, iObj, iFin, iFanin, k ) \
353 for ( k = 0, iFin = Cba_ObjFin0(p, iObj); iFin < Cba_ObjFin0(p, iObj+1) && ((iFanin = Cba_FonObj(p, Cba_FinFon(p, iFin))), 1); iFin++, k++ ) if ( !iFanin ) {} else
373 int i, iObj = Vec_StrSize(&
p->vObjType);
375 Vec_IntPush( &
p->vInputs, iObj );
377 Vec_IntPush( &
p->vOutputs, iObj );
378 Vec_StrPush( &
p->vObjType, (
char)Type );
380 for ( i = 0; i < nFins; i++ )
381 Vec_IntPush( &
p->vFinFon, 0 );
382 if ( Vec_IntSize(&
p->vObjFin0) )
383 Vec_IntPush( &
p->vObjFin0, Vec_IntSize(&
p->vFinFon) );
385 for ( i = 0; i < nFons; i++ )
386 Vec_IntPush( &
p->vFonObj, iObj );
387 if ( Vec_IntSize(&
p->vObjFon0) )
388 Vec_IntPush( &
p->vObjFon0, Vec_IntSize(&
p->vFonObj) );
393 int iObj = Cba_ObjAlloc( pNew, Cba_ObjType(
p, i), Cba_ObjFinNum(
p, i), Cba_ObjFonNum(
p, i) );
394 Cba_ObjSetCopy(
p, i, iObj );
397static inline void Cba_ObjDelete(
Cba_Ntk_t *
p,
int i )
400 Cba_ObjCleanType(
p, i );
402 Vec_IntWriteEntry( &
p->vFinFon, iFin, 0 );
404 Vec_IntWriteEntry( &
p->vFonObj, iFon, 0 );
418static inline Cba_Ntk_t * Cba_NtkAlloc(
Cba_Man_t *
p,
int NameId,
int nIns,
int nOuts,
int nObjs,
int nFins,
int nFons )
421 assert( nIns >= 0 && nOuts >= 0 && nObjs >= 0 && nFins >= 0 && nFons >= 0 );
422 pNew->Id = Vec_PtrSize(&
p->vNtks); Vec_PtrPush( &
p->vNtks, pNew );
423 pNew->NameId = NameId;
425 Vec_IntGrow( &pNew->vInputs, nIns );
426 Vec_IntGrow( &pNew->vOutputs, nOuts );
427 Vec_StrGrow( &pNew->vObjType, nObjs+1 ); Vec_StrPush( &pNew->vObjType, (
char)
CBA_OBJ_NONE );
428 Vec_IntGrow( &pNew->vObjFin0, nObjs+2 ); Vec_IntPush( &pNew->vObjFin0, 0 ); Vec_IntPush( &pNew->vObjFin0, 1 );
429 Vec_IntGrow( &pNew->vObjFon0, nObjs+2 ); Vec_IntPush( &pNew->vObjFon0, 0 ); Vec_IntPush( &pNew->vObjFon0, 1 );
430 Vec_IntGrow( &pNew->vFinFon, nFins+1 ); Vec_IntPush( &pNew->vFinFon, 0 );
431 Vec_IntGrow( &pNew->vFonObj, nFons+1 ); Vec_IntPush( &pNew->vFonObj, 0 );
434static inline void Cba_NtkFree(
Cba_Ntk_t *
p )
437 Vec_IntErase( &
p->vInputs );
438 Vec_IntErase( &
p->vOutputs );
439 Vec_IntErase( &
p->vOrder );
440 Vec_IntErase( &
p->vSeq );
442 Vec_StrErase( &
p->vObjType );
443 Vec_IntErase( &
p->vObjFin0 );
444 Vec_IntErase( &
p->vObjFon0 );
445 Vec_IntErase( &
p->vFinFon );
446 Vec_IntErase( &
p->vFonObj );
448 Vec_IntErase( &
p->vObjCopy );
449 Vec_IntErase( &
p->vObjFunc );
450 Vec_IntErase( &
p->vObjName );
451 Vec_IntErase( &
p->vObjAttr );
452 Vec_IntErase( &
p->vAttrSto );
453 Vec_IntErase( &
p->vFonCopy );
454 Vec_IntErase( &
p->vFonName );
455 Vec_IntErase( &
p->vFonRange );
456 Vec_IntErase( &
p->vFonPrev );
457 Vec_IntErase( &
p->vFonNext );
458 Vec_IntErase( &
p->vFinFon0 );
459 Vec_IntErase( &
p->vFinObj );
460 Vec_IntErase( &
p->vNtkObjs );
461 Vec_IntErase( &
p->vFonBits );
463 Vec_IntErase( &
p->vArray0 );
464 Vec_IntErase( &
p->vArray1 );
465 if (
p->vOther ) Vec_VecFree( (
Vec_Vec_t *)
p->vOther );
468static inline int Cba_NtkNewStrId(
Cba_Ntk_t * pNtk,
const char * format, ... )
472 int nAdded, nSize = 1000;
473 va_list args; va_start( args, format );
474 Vec_StrGrow( vBuf, Vec_StrSize(vBuf) + nSize );
475 nAdded = vsnprintf( Vec_StrLimit(vBuf), nSize, format, args );
476 if ( nAdded > nSize )
478 Vec_StrGrow( vBuf, Vec_StrSize(vBuf) + nAdded + nSize );
479 nSize = vsnprintf( Vec_StrLimit(vBuf), nAdded, format, args );
480 assert( nSize == nAdded );
488 Vec_StrPrintF( vOut,
"%d\'b%s", Vec_StrSize(vBits)-1, Vec_StrArray(vBits) );
491static inline int Cba_ManNewConstZero(
Cba_Ntk_t *
p,
int nBits )
494 Vec_StrPrintF( vOut,
"%d\'b%0s", nBits,
"" );
501 printf(
"Network with name \"%s\" already exists.\n", Cba_NtkName(pNtk) );
503 assert( NtkId == pNtk->Id );
509 printf(
"Network with name \"%s\" does not exist.\n", Cba_NtkName(pNtk) );
512 Cba_NtkFree( Cba_ManNtk(
p, NtkId) );
513 Vec_PtrWriteEntry( &
p->vNtks, NtkId, pNtk );
519 Vec_Int_t * vObjs = Vec_IntAlloc( Cba_NtkObjNum(
p) );
521 Vec_IntPush( vObjs, iObj );
524static inline int Cba_NtkIsSeq(
Cba_Ntk_t *
p )
533 if ( Cba_ObjIsBoxUser(
p, iObj) )
535 if ( Cba_NtkIsSeq( Cba_ObjNtk(
p, iObj) ) )
541 else if ( Cba_ObjIsSeq(
p, iObj) )
549static inline void Cba_NtkPrepareSeq(
Cba_Ntk_t *
p )
552 assert( Cba_NtkBoxSeqNum(
p) == 0 );
553 if ( !Cba_NtkIsSeq(
p) )
556 if ( Cba_ObjIsSeq(
p, iObj) )
557 Vec_IntPush( &
p->vSeq, iObj );
560static inline void Cba_NtkCountParams(
Cba_Ntk_t *
p,
Vec_Int_t * vObjs,
int * nPis,
int * nPos,
int * nFins,
int * nFons )
563 *nPis = *nPos = *nFins = *nFons = 0;
566 *nPis += Cba_ObjIsPi(
p, iObj);
567 *nPos += Cba_ObjIsPo(
p, iObj);
568 *nFins += Cba_ObjFinNum(
p, iObj);
569 *nFons += Cba_ObjFonNum(
p, iObj);
575 int i, k, iObj, iObjNew, iFin, iFon;
576 int nPis, nPos, nFins, nFons;
577 Cba_NtkCountParams(
p, vObjs, &nPis, &nPos, &nFins, &nFons );
578 pNew = Cba_NtkAlloc( pMan, Cba_NtkNameId(
p), nPis, nPos, Vec_IntSize(vObjs), nFins, nFons );
579 Cba_NtkCleanObjCopies(
p );
580 Cba_NtkCleanFonCopies(
p );
583 iObjNew = Cba_ObjDup( pNew,
p, iObj );
585 Cba_FonSetCopy(
p, iFon, Cba_ObjFon(pNew, iObjNew, k) );
589 iObjNew = Cba_ObjCopy(
p, iObj );
591 Cba_ObjSetFinFon( pNew, iObjNew, k, Cba_FonCopy(
p, iFon) );
595 assert( Cba_NtkObjNum(pNew) == Cba_NtkObjNumAlloc(pNew) );
596 Cba_NtkSetCopy(
p, Cba_NtkId(pNew) );
602 Vec_Int_t * vObjs = pFuncOrder ? pFuncOrder(
p) : Cba_NtkCollect(
p);
605 pNew = Cba_NtkDup( pMan,
p, vObjs );
606 Vec_IntFree( vObjs );
613 assert( Vec_IntSize(&pNew->vOrder) == 0 );
615 Vec_IntPush( &pNew->vOrder, Cba_ObjCopy(
p, iObj) );
619 Vec_IntRemapArray( &
p->vObjCopy, &
p->vObjFunc, &pNew->vObjFunc, Cba_NtkObjNum(pNew) + 1 );
620 Vec_IntRemapArray( &
p->vObjCopy, &
p->vObjName, &pNew->vObjName, Cba_NtkObjNum(pNew) + 1 );
621 Vec_IntRemapArray( &
p->vObjCopy, &
p->vObjAttr, &pNew->vObjAttr, Cba_NtkObjNum(pNew) + 1 );
623 Vec_IntRemapArray( &
p->vFonCopy, &
p->vFonName, &pNew->vFonName, Cba_NtkFonNum(pNew) + 1 );
624 Vec_IntRemapArray( &
p->vFonCopy, &
p->vFonRange, &pNew->vFonRange, Cba_NtkFonNum(pNew) + 1 );
626 Vec_IntAppend( &pNew->vAttrSto, &
p->vAttrSto );
629static inline int Cba_NtkMemory(
Cba_Ntk_t *
p )
633 nMem += (int)Vec_IntMemory(&
p->vInputs);
634 nMem += (int)Vec_IntMemory(&
p->vOutputs);
635 nMem += (int)Vec_IntMemory(&
p->vOrder);
636 nMem += (int)Vec_IntMemory(&
p->vSeq);
638 nMem += (int)Vec_StrMemory(&
p->vObjType);
639 nMem += (int)Vec_IntMemory(&
p->vObjFin0);
640 nMem += (int)Vec_IntMemory(&
p->vObjFon0);
641 nMem += (int)Vec_IntMemory(&
p->vFinFon);
642 nMem += (int)Vec_IntMemory(&
p->vFonObj);
644 nMem += (int)Vec_IntMemory(&
p->vObjCopy );
645 nMem += (int)Vec_IntMemory(&
p->vObjFunc );
646 nMem += (int)Vec_IntMemory(&
p->vObjName );
647 nMem += (int)Vec_IntMemory(&
p->vObjAttr );
648 nMem += (int)Vec_IntMemory(&
p->vAttrSto );
649 nMem += (int)Vec_IntMemory(&
p->vFonCopy );
650 nMem += (int)Vec_IntMemory(&
p->vFonName );
651 nMem += (int)Vec_IntMemory(&
p->vFonRange );
652 nMem += (int)Vec_IntMemory(&
p->vFonPrev );
653 nMem += (int)Vec_IntMemory(&
p->vFonNext );
654 nMem += (int)Vec_IntMemory(&
p->vFinFon0 );
655 nMem += (int)Vec_IntMemory(&
p->vFinObj );
656 nMem += (int)Vec_IntMemory(&
p->vNtkObjs );
657 nMem += (int)Vec_IntMemory(&
p->vFonBits );
659 nMem += (int)Vec_IntMemory(&
p->vArray1 );
660 nMem += (int)Vec_IntMemory(&
p->vArray1 );
663static inline void Cba_NtkPrintStats(
Cba_Ntk_t *
p )
665 printf(
"pi =%5d ", Cba_NtkPiNum(
p) );
666 printf(
"po =%5d ", Cba_NtkPoNum(
p) );
667 printf(
"seq =%5d ", Cba_NtkBoxSeqNum(
p) );
668 printf(
"box =%5d ", Cba_NtkBoxNum(
p) );
669 printf(
"prim =%5d ", Cba_NtkBoxPrimNum(
p) );
670 printf(
"user =%5d ", Cba_NtkBoxUserNum(
p) );
672 printf(
" %s ", Cba_NtkName(
p) );
673 if ( Vec_IntSize(&
p->vNtkObjs) )
674 printf(
"-> %s", Cba_NtkName(Cba_NtkNtk(
p, Vec_IntEntry(&
p->vNtkObjs, 0))) );
678static inline void Cba_NtkPrint(
Cba_Ntk_t *
p )
681 printf(
"Interface (%d):\n", Cba_NtkPioNum(
p) );
682 printf(
"Objects (%d):\n", Cba_NtkObjNum(
p) );
685 printf(
"%6d : ", i );
686 printf(
"Type =%3d ", Type );
687 printf(
"Fins = %d ", Cba_ObjFinNum(
p, i) );
688 printf(
"Fons = %d ", Cba_ObjFonNum(
p, i) );
689 if ( Cba_NtkHasObjNames(
p) && Cba_ObjName(
p, i) )
690 printf(
"%s", Cba_ObjNameStr(
p, i) );
710 pNew->
pSpec = Abc_UtilStrsav( pFileName );
714 pNew->
vHash = vHash ? vHash : Hash_IntManStart( 1000 );
724 Vec_PtrGrow( &pNew->
vNtks, nNtks+1 ); Vec_PtrPush( &pNew->
vNtks, NULL );
737 Cba_ManDupTypeNames( pNew,
p );
740 pNtkNew = Cba_NtkDupOrder( pNew, pNtk, pFuncOrder );
741 Cba_NtkAdd( pNew, pNtkNew );
742 Cba_NtkDupAttrs( pNtkNew, pNtk );
747 pNew->
iRoot = Cba_ManNtkNum(pNew);
750static inline void Cba_ManPrepareSeq(
Cba_Man_t *
p )
754 Cba_NtkPrepareSeq( pNtk );
756static inline void Cba_ManFree(
Cba_Man_t *
p )
765 Hash_IntManDeref(
p->vHash );
766 Vec_IntErase( &
p->vNameMap );
767 Vec_IntErase( &
p->vUsed );
768 Vec_IntErase( &
p->vNameMap2 );
769 Vec_IntErase( &
p->vUsed2 );
770 Vec_StrErase( &
p->vOut );
771 Vec_StrErase( &
p->vOut2 );
776static inline int Cba_ManGetMap(
Cba_Man_t *
p,
int i )
778 return Vec_IntGetEntry(&
p->vNameMap, i);
780static inline void Cba_ManSetMap(
Cba_Man_t *
p,
int i,
int x )
782 assert( Vec_IntGetEntry(&
p->vNameMap, i) == 0 );
783 Vec_IntSetEntry( &
p->vNameMap, i, x );
784 Vec_IntPush( &
p->vUsed, i );
786static inline void Cba_ManUnsetMap(
Cba_Man_t *
p,
int i )
788 Vec_IntSetEntry( &
p->vNameMap, i, 0 );
790static inline void Cba_ManCleanMap(
Cba_Man_t *
p )
794 Vec_IntWriteEntry( &
p->vNameMap, Entry, 0 );
795 Vec_IntClear( &
p->vUsed );
797static inline int Cba_NtkGetMap(
Cba_Ntk_t *
p,
int i ) {
return Cba_ManGetMap(
p->pDesign, i); }
798static inline void Cba_NtkSetMap(
Cba_Ntk_t *
p,
int i,
int x ) { Cba_ManSetMap(
p->pDesign, i, x); }
799static inline void Cba_NtkUnsetMap(
Cba_Ntk_t *
p,
int i ) { Cba_ManUnsetMap(
p->pDesign, i); }
800static inline void Cba_NtkCleanMap(
Cba_Ntk_t *
p ) { Cba_ManCleanMap(
p->pDesign); }
802static inline int Cba_ManGetMap2(
Cba_Man_t *
p,
int i )
804 return Vec_IntGetEntry(&
p->vNameMap2, i);
806static inline void Cba_ManSetMap2(
Cba_Man_t *
p,
int i,
int x )
808 assert( Vec_IntGetEntry(&
p->vNameMap2, i) == 0 );
809 Vec_IntSetEntry( &
p->vNameMap2, i, x );
810 Vec_IntPush( &
p->vUsed2, i );
812static inline void Cba_ManUnsetMap2(
Cba_Man_t *
p,
int i )
814 Vec_IntSetEntry( &
p->vNameMap2, i, 0 );
816static inline void Cba_ManCleanMap2(
Cba_Man_t *
p )
820 Vec_IntWriteEntry( &
p->vNameMap2, Entry, 0 );
821 Vec_IntClear( &
p->vUsed2 );
823static inline int Cba_NtkGetMap2(
Cba_Ntk_t *
p,
int i ) {
return Cba_ManGetMap2(
p->pDesign, i); }
824static inline void Cba_NtkSetMap2(
Cba_Ntk_t *
p,
int i,
int x ) { Cba_ManSetMap2(
p->pDesign, i, x); }
825static inline void Cba_NtkUnsetMap2(
Cba_Ntk_t *
p,
int i ) { Cba_ManUnsetMap2(
p->pDesign, i); }
826static inline void Cba_NtkCleanMap2(
Cba_Ntk_t *
p ) { Cba_ManCleanMap2(
p->pDesign); }
828static inline int Cba_ManMemory(
Cba_Man_t *
p )
832 nMem +=
p->pName ? (int)
strlen(
p->pName) : 0;
833 nMem +=
p->pSpec ? (int)
strlen(
p->pSpec) : 0;
837 nMem += (int)Vec_IntMemory(&
p->vNameMap );
838 nMem += (int)Vec_IntMemory(&
p->vUsed );
839 nMem += (int)Vec_StrMemory(&
p->vOut );
840 nMem += (int)Vec_StrMemory(&
p->vOut2 );
841 nMem += (int)Vec_PtrMemory(&
p->vNtks);
843 nMem += Cba_NtkMemory( pNtk );
846static inline int Cba_ManObjNum(
Cba_Man_t *
p )
850 Count += Cba_NtkObjNum(pNtk);
853static inline int Cba_ManBoxNum(
Cba_Man_t *
p )
857 Count += Cba_NtkBoxNum( pNtk );
860static inline void Cba_ManBoxNumRec_rec(
Cba_Ntk_t *
p,
int * pCountP,
int * pCountU )
862 int iObj, Id = Cba_NtkId(
p);
863 if ( pCountP[Id] >= 0 )
865 pCountP[Id] = pCountU[Id] = 0;
868 if ( Cba_ObjIsBoxUser(
p, iObj) )
870 Cba_ManBoxNumRec_rec( Cba_ObjNtk(
p, iObj), pCountP, pCountU );
871 pCountP[Id] += pCountP[Cba_ObjNtkId(
p, iObj)];
872 pCountU[Id] += pCountU[Cba_ObjNtkId(
p, iObj)] + 1;
878static inline void Cba_ManBoxNumRec(
Cba_Man_t *
p,
int * pnPrims,
int * pnUsers )
881 int * pCountP =
ABC_FALLOC(
int, Cba_ManNtkNum(
p) + 1 );
882 int * pCountU =
ABC_FALLOC(
int, Cba_ManNtkNum(
p) + 1 );
883 Cba_ManBoxNumRec_rec( pNtk, pCountP, pCountU );
884 *pnPrims = pCountP[Cba_NtkId(pNtk)];
885 *pnUsers = pCountU[Cba_NtkId(pNtk)];
889static inline void Cba_ManPrintStats(
Cba_Man_t *
p,
int nModules,
int fVerbose )
893 Cba_ManBoxNumRec(
p, &nPrims, &nUsers );
894 printf(
"%-12s : ", Cba_ManName(
p) );
895 printf(
"pi =%5d ", Cba_NtkPiNum(pRoot) );
896 printf(
"po =%5d ", Cba_NtkPoNum(pRoot) );
897 printf(
"mod =%5d ", Cba_ManNtkNum(
p) );
898 printf(
"box =%5d ", nPrims + nUsers );
899 printf(
"prim =%5d ", nPrims );
900 printf(
"user =%5d ", nUsers );
901 printf(
"mem =%6.3f MB", 1.0*Cba_ManMemory(
p)/(1<<20) );
905 if ( i == nModules+1 )
907 printf(
"Module %5d : ", i );
908 Cba_NtkPrintStats( pNtk );
924static inline void Cba_NtkAddMissingFonNames(
Cba_Ntk_t *
p,
char * pPref )
926 int iFon, NameId, Index;
928 Cba_ManCleanMap(
p->pDesign );
931 Cba_ManSetMap(
p->pDesign, NameId, iFon );
937 NameId = Cba_NtkNewStrId(
p,
"%s%d", pPref, iFon);
938 for ( Index = 1; Cba_ManGetMap(
p->pDesign, NameId); Index++ )
939 NameId = Cba_NtkNewStrId(
p,
"%s%d_%d", pPref, iFon, Index);
940 Cba_FonSetName(
p, iFon, NameId );
941 Cba_ManSetMap(
p->pDesign, NameId, iFon );
944static inline void Cba_NtkCreateFonNames(
Cba_Ntk_t *
p,
char * pPref )
947 Cba_NtkCleanFonNames(
p );
949 if ( !Cba_FonName(
p, iFon) )
950 Cba_FonSetName(
p, iFon, Cba_ObjName(
p, iObj) );
952 if ( Cba_FonIsReal(iFon) && !Cba_FonName(
p, iFon) )
953 Cba_FonSetName(
p, iFon, Cba_ObjName(
p, iObj) );
957 Cba_NtkAddMissingFonNames(
p, pPref );
959static inline void Cba_NtkMissingFonNames(
Cba_Ntk_t *
p,
char * pPref )
963 if ( !Cba_FonName(
p, iFon) )
964 Cba_FonSetName(
p, iFon, Cba_ObjName(
p, iObj) );
966 if ( Cba_FonIsReal(iFon) && !Cba_FonName(
p, iFon) )
967 Cba_FonSetName(
p, iFon, Cba_ObjName(
p, iObj) );
971 Cba_NtkAddMissingFonNames(
p, pPref );
#define ABC_FALLOC(type, num)
#define ABC_CALLOC(type, num)
#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
Cba_ObjType_t
INCLUDES ///.
void Cba_ManPrintDistrib(Cba_Man_t *p)
Cba_Man_t * Cba_ManExtractGroup(Cba_Man_t *p, Vec_Int_t *vObjs)
void Cba_NtkPrintNodes(Cba_Ntk_t *p, int Type)
void Prs_ManWriteVerilog(char *pFileName, Vec_Ptr_t *p)
#define Cba_NtkForEachObj(p, i)
void Prs_ManReadVerilogTest(char *pFileName)
#define Cba_NtkForEachPioOrder(p, iObj, i)
Cba_Man_t * Cba_ManReadBlif(char *pFileName)
Cba_Man_t * Cba_ManInsertAbc(Cba_Man_t *p, void *pAbc)
void Prs_ManReadBlifTest(char *pFileName)
Cba_Man_t * Cba_ManInsertGroup(Cba_Man_t *p, Vec_Int_t *vObjs, Cba_Ntk_t *pSyn)
#define Cba_NtkForEachBox(p, i)
int Cba_ManIsTopoOrder(Cba_Man_t *p)
Gia_Man_t * Cba_ManBlast(Cba_Man_t *p, int fBarBufs, int fSeq, int fVerbose)
#define Cba_ObjForEachFin(p, iObj, iFin, k)
#define Cba_ObjForEachFinFon(p, iObj, iFin, iFon, k)
Cba_Man_t * Cba_ManReadCba(char *pFileName)
DECLARATIONS ///.
void Cba_NtkPrintDistribOld(Cba_Ntk_t *p)
void Cba_ManWriteVerilog(char *pFileName, Cba_Man_t *p, int fInlineConcat)
int Cba_NtkCheckComboLoop(Cba_Ntk_t *p)
void Prs_ManWriteBlif(char *pFileName, Vec_Ptr_t *p)
void Cba_ManWriteCba(char *pFileName, Cba_Man_t *p)
int Cba_NtkCiFonNum(Cba_Ntk_t *p)
Cba_Man_t * Cba_ManCollapse(Cba_Man_t *p)
void Cba_NtkPrintStatsFull(Cba_Ntk_t *p, int fDistrib, int fVerbose)
#define Cba_ObjForEachFon(p, iObj, iFon, k)
#define Cba_NtkForEachObjType(p, Type, i)
void Cba_NtkObjOrder(Cba_Ntk_t *p, Vec_Int_t *vObjs, Vec_Int_t *vNameIds)
typedefABC_NAMESPACE_HEADER_START struct Cba_Ntk_t_ Cba_Ntk_t
INCLUDES ///.
Cba_Man_t * Prs_ManBuildCbaBlif(char *pFileName, Vec_Ptr_t *vDes)
Cba_Man_t * Cba_ManReadVerilog(char *pFileName)
#define Cba_NtkForEachPiFon(p, iObj, iFon, i)
#define Cba_NtkForEachPoDriverFon(p, iObj, iFon, i)
char * Cba_ManGetSliceName(Cba_Ntk_t *p, int iFon, int RangeId)
struct Cba_Man_t_ Cba_Man_t
Vec_Int_t * Cba_NtkCollectDfs(Cba_Ntk_t *p)
#define Cba_ManForEachNtk(p, pNtk, i)
ITERATORS ///.
Cba_Man_t * Cba_ManDeriveFromGia(Cba_Man_t *p, Gia_Man_t *pGia, int fUseXor)
void Cba_ManWriteBlif(char *pFileName, Cba_Man_t *p)
int Cba_NtkCoFinNum(Cba_Ntk_t *p)
void Cba_ManCreatePrimMap(char **pMap)
DECLARATIONS ///.
Cba_Man_t * Prs_ManBuildCbaVerilog(char *pFileName, Vec_Ptr_t *vDes)
Cba_Man_t * Cba_ManInsertGia(Cba_Man_t *p, Gia_Man_t *pGia)
struct Gia_Man_t_ Gia_Man_t
char * pTypeNames[CBA_BOX_LAST]
int Abc_NamStrFind(Abc_Nam_t *p, char *pStr)
int Abc_NamStrFindOrAddLim(Abc_Nam_t *p, char *pStr, char *pLim, int *pfFound)
int Abc_NamMemUsed(Abc_Nam_t *p)
int Abc_NamStrFindOrAdd(Abc_Nam_t *p, char *pStr, int *pfFound)
int Abc_NamObjNumMax(Abc_Nam_t *p)
Abc_Nam_t * Abc_NamStart(int nObjs, int nAveSize)
FUNCTION DEFINITIONS ///.
Vec_Str_t * Abc_NamBuffer(Abc_Nam_t *p)
void Abc_NamDeref(Abc_Nam_t *p)
Abc_Nam_t * Abc_NamRef(Abc_Nam_t *p)
char * Abc_NamStr(Abc_Nam_t *p, int NameId)
typedefABC_NAMESPACE_HEADER_START struct Abc_Nam_t_ Abc_Nam_t
INCLUDES ///.
struct Hash_IntMan_t_ Hash_IntMan_t
#define Vec_IntForEachEntry(vVec, Entry, i)
MACRO DEFINITIONS ///.
#define Vec_IntForEachEntryStart(vVec, Entry, i, Start)
typedefABC_NAMESPACE_HEADER_START struct Vec_Ptr_t_ Vec_Ptr_t
INCLUDES ///.
typedefABC_NAMESPACE_HEADER_START struct Vec_Vec_t_ Vec_Vec_t
INCLUDES ///.