21#ifndef ABC__base__acb__acb_h
22#define ABC__base__acb__acb_h
134static inline char * Acb_ManName(
Acb_Man_t *
p ) {
return p->pName; }
135static inline char * Acb_ManSpec(
Acb_Man_t *
p ) {
return p->pSpec; }
136static inline int Acb_ManNtkNum(
Acb_Man_t *
p ) {
return Vec_PtrSize(&
p->vNtks)-1; }
137static inline int Acb_ManNtkIsOk(
Acb_Man_t *
p,
int i ) {
return i > 0 && i <= Acb_ManNtkNum(
p); }
140static inline Acb_Ntk_t * Acb_ManNtkFind(
Acb_Man_t *
p,
char * pName ) {
return Acb_ManNtk(
p, Acb_ManNtkFindId(
p, pName) ); }
150static inline Acb_Ntk_t * Acb_NtkNtk(
Acb_Ntk_t *
p,
int i ) {
return Acb_ManNtk(
p->pDesign, i); }
151static inline int Acb_NtkId(
Acb_Ntk_t *
p ) {
return p->Id; }
152static inline int Acb_NtkCi(
Acb_Ntk_t *
p,
int i ) {
return Vec_IntEntry(&
p->vCis, i); }
153static inline int Acb_NtkCo(
Acb_Ntk_t *
p,
int i ) {
return Vec_IntEntry(&
p->vCos, i); }
154static inline int Acb_NtkCioOrder(
Acb_Ntk_t *
p,
int i ) {
return Vec_IntEntry(&
p->vOrder, i); }
155static inline int Acb_NtkBoxSeq(
Acb_Ntk_t *
p,
int i ) {
return Vec_IntEntry(&
p->vSeq, i); }
157static inline char * Acb_NtkStr(
Acb_Ntk_t *
p,
int i ) {
return Acb_ManStr(
p->pDesign, i); }
158static inline int Acb_NtkStrId(
Acb_Ntk_t *
p,
char * pName ) {
return Acb_ManStrId(
p->pDesign, pName); }
159static inline char * Acb_NtkConst(
Acb_Ntk_t *
p,
int i ) {
return Acb_ManConst(
p->pDesign, i); }
160static inline char * Acb_NtkSop(
Acb_Ntk_t *
p,
int i ) {
return Acb_ManConst(
p->pDesign, i); }
161static inline int Acb_NtkNameId(
Acb_Ntk_t *
p ) {
return p->NameId; }
162static inline char * Acb_NtkName(
Acb_Ntk_t *
p ) {
return Acb_NtkStr(
p,
p->NameId); }
163static inline char * Acb_NtkTypeName(
Acb_Ntk_t *
p,
int Type ) {
return p->pDesign->pTypeNames[Type]; }
164static inline int Acb_NtkCopy(
Acb_Ntk_t *
p ) {
return p->iCopy; }
166static inline void Acb_NtkSetCopy(
Acb_Ntk_t *
p,
int i ) {
assert(
p->iCopy == 0);
p->iCopy = i; }
167static inline int Acb_NtkHashRange(
Acb_Ntk_t *
p,
int l,
int r ) {
return Hash_Int2ManInsert(
p->pDesign->vHash, l, r, 0 ); }
168static inline int Acb_NtkRangeLeft(
Acb_Ntk_t *
p,
int h ) {
return h ? Hash_IntObjData0(
p->pDesign->vHash, h ) : 0; }
169static inline int Acb_NtkRangeRight(
Acb_Ntk_t *
p,
int h ) {
return h ? Hash_IntObjData1(
p->pDesign->vHash, h ) : 0; }
170static inline int Acb_NtkRangeSize(
Acb_Ntk_t *
p,
int h ) {
int l = Acb_NtkRangeLeft(
p, h), r = Acb_NtkRangeRight(
p, h);
return 1 + (l > r ? l-r : r-l);}
172static inline int Acb_NtkCiNum(
Acb_Ntk_t *
p ) {
return Vec_IntSize(&
p->vCis); }
173static inline int Acb_NtkCoNum(
Acb_Ntk_t *
p ) {
return Vec_IntSize(&
p->vCos); }
174static inline int Acb_NtkCioNum(
Acb_Ntk_t *
p ) {
return Acb_NtkCiNum(
p) + Acb_NtkCoNum(
p); }
175static inline int Acb_NtkCiNumAlloc(
Acb_Ntk_t *
p ) {
return Vec_IntCap(&
p->vCis); }
176static inline int Acb_NtkCoNumAlloc(
Acb_Ntk_t *
p ) {
return Vec_IntCap(&
p->vCos); }
177static inline int Acb_NtkRegNum(
Acb_Ntk_t *
p ) {
return p->nRegs; }
178static inline void Acb_NtkSetRegNum(
Acb_Ntk_t *
p,
int nRegs ) {
p->nRegs = nRegs; }
179static inline int Acb_NtkPiNum(
Acb_Ntk_t *
p ) {
return Acb_NtkCiNum(
p) - Acb_NtkRegNum(
p); }
180static inline int Acb_NtkPoNum(
Acb_Ntk_t *
p ) {
return Acb_NtkCoNum(
p) - Acb_NtkRegNum(
p); }
181static inline int Acb_NtkCioOrderNum(
Acb_Ntk_t *
p ) {
return Vec_IntSize(&
p->vOrder); }
182static inline int Acb_NtkObjNumAlloc(
Acb_Ntk_t *
p ) {
return Vec_StrCap(&
p->vObjType)-1; }
183static inline int Acb_NtkObjNum(
Acb_Ntk_t *
p ) {
return Vec_StrSize(&
p->vObjType)-1; }
184static inline int Acb_NtkObjNumMax(
Acb_Ntk_t *
p ) {
return Vec_StrSize(&
p->vObjType); }
185static inline int Acb_NtkTypeNum(
Acb_Ntk_t *
p,
int Type ) {
return Vec_StrCountEntry(&
p->vObjType, (
char)Type); }
187static inline int Acb_NtkNodeNum(
Acb_Ntk_t *
p ) {
return Vec_StrCountLarger(&
p->vObjType, (
char)
ABC_OPER_BOX); }
188static inline int Acb_NtkSeqNum(
Acb_Ntk_t *
p ) {
return Vec_IntSize(&
p->vSeq); }
190static inline void Acb_NtkCleanObjCopies(
Acb_Ntk_t *
p ) { Vec_IntFill(&
p->vObjCopy, Vec_StrCap(&
p->vObjType), -1); }
191static inline void Acb_NtkCleanObjFuncs(
Acb_Ntk_t *
p ) { Vec_IntFill(&
p->vObjFunc, Vec_StrCap(&
p->vObjType), -1); }
192static inline void Acb_NtkCleanObjWeights(
Acb_Ntk_t *
p ) { Vec_IntFill(&
p->vObjWeight,Vec_StrCap(&
p->vObjType), 0); }
193static inline void Acb_NtkCleanObjTruths(
Acb_Ntk_t *
p ) { Vec_WrdFill(&
p->vObjTruth, Vec_StrCap(&
p->vObjType), 0); }
194static inline void Acb_NtkCleanObjNames(
Acb_Ntk_t *
p ) { Vec_IntFill(&
p->vObjName, Vec_StrCap(&
p->vObjType), 0); }
195static inline void Acb_NtkCleanObjRanges(
Acb_Ntk_t *
p ) { Vec_IntFill(&
p->vObjRange, Vec_StrCap(&
p->vObjType), 0); }
196static inline void Acb_NtkCleanObjTravs(
Acb_Ntk_t *
p ) { Vec_IntFill(&
p->vObjTrav, Vec_StrCap(&
p->vObjType), 0); }
197static inline void Acb_NtkCleanObjAttrs(
Acb_Ntk_t *
p ) { Vec_IntFill(&
p->vObjAttr, Vec_StrCap(&
p->vObjType), 0); Vec_IntFill(&
p->vAttrSto, 1, -1); }
198static inline void Acb_NtkCleanObjLevelD(
Acb_Ntk_t *
p ) { Vec_IntFill(&
p->vLevelD, Vec_StrCap(&
p->vObjType), 0); }
199static inline void Acb_NtkCleanObjLevelR(
Acb_Ntk_t *
p ) { Vec_IntFill(&
p->vLevelR, Vec_StrCap(&
p->vObjType), 0); }
200static inline void Acb_NtkCleanObjPathD(
Acb_Ntk_t *
p ) { Vec_IntFill(&
p->vPathD, Vec_StrCap(&
p->vObjType), 0); }
201static inline void Acb_NtkCleanObjPathR(
Acb_Ntk_t *
p ) { Vec_IntFill(&
p->vPathR, Vec_StrCap(&
p->vObjType), 0); }
202static inline void Acb_NtkCleanObjCounts(
Acb_Ntk_t *
p ) { Vec_FltFill(&
p->vCounts, Vec_StrCap(&
p->vObjType), 0); }
203static inline void Acb_NtkCleanObjFanout(
Acb_Ntk_t *
p ) { Vec_WecInit(&
p->vFanouts, Vec_StrCap(&
p->vObjType) ); }
204static inline void Acb_NtkCleanObjCnfs(
Acb_Ntk_t *
p ) { Vec_WecInit(&
p->vCnfs, Vec_StrCap(&
p->vObjType) ); }
206static inline int Acb_NtkHasObjCopies(
Acb_Ntk_t *
p ) {
return Vec_IntSize(&
p->vObjCopy) > 0; }
207static inline int Acb_NtkHasObjFuncs(
Acb_Ntk_t *
p ) {
return Vec_IntSize(&
p->vObjFunc) > 0; }
208static inline int Acb_NtkHasObjWeights(
Acb_Ntk_t *
p ) {
return Vec_IntSize(&
p->vObjWeight)> 0; }
209static inline int Acb_NtkHasObjTruths(
Acb_Ntk_t *
p ) {
return Vec_WrdSize(&
p->vObjTruth) > 0; }
210static inline int Acb_NtkHasObjNames(
Acb_Ntk_t *
p ) {
return Vec_IntSize(&
p->vObjName) > 0; }
211static inline int Acb_NtkHasObjRanges(
Acb_Ntk_t *
p ) {
return Vec_IntSize(&
p->vObjRange) > 0; }
212static inline int Acb_NtkHasObjTravs(
Acb_Ntk_t *
p ) {
return Vec_IntSize(&
p->vObjTrav) > 0; }
213static inline int Acb_NtkHasObjAttrs(
Acb_Ntk_t *
p ) {
return Vec_IntSize(&
p->vObjAttr) > 0; }
214static inline int Acb_NtkHasObjLevelD(
Acb_Ntk_t *
p ) {
return Vec_IntSize(&
p->vLevelD) > 0; }
215static inline int Acb_NtkHasObjLevelR(
Acb_Ntk_t *
p ) {
return Vec_IntSize(&
p->vLevelR) > 0; }
216static inline int Acb_NtkHasObjPathD(
Acb_Ntk_t *
p ) {
return Vec_IntSize(&
p->vPathD) > 0; }
217static inline int Acb_NtkHasObjPathR(
Acb_Ntk_t *
p ) {
return Vec_IntSize(&
p->vPathR) > 0; }
218static inline int Acb_NtkHasObjCounts(
Acb_Ntk_t *
p ) {
return Vec_FltSize(&
p->vCounts) > 0; }
219static inline int Acb_NtkHasObjFanout(
Acb_Ntk_t *
p ) {
return Vec_WecSize(&
p->vFanouts) > 0; }
220static inline int Acb_NtkHasObjCnfs(
Acb_Ntk_t *
p ) {
return Vec_WecSize(&
p->vCnfs) > 0; }
222static inline void Acb_NtkFreeObjCopies(
Acb_Ntk_t *
p ) { Vec_IntErase(&
p->vObjCopy); }
223static inline void Acb_NtkFreeObjFuncs(
Acb_Ntk_t *
p ) { Vec_IntErase(&
p->vObjFunc); }
224static inline void Acb_NtkFreeObjWeights(
Acb_Ntk_t *
p ) { Vec_IntErase(&
p->vObjWeight); }
225static inline void Acb_NtkFreeObjTruths(
Acb_Ntk_t *
p ) { Vec_WrdErase(&
p->vObjTruth); }
226static inline void Acb_NtkFreeObjNames(
Acb_Ntk_t *
p ) { Vec_IntErase(&
p->vObjName); }
227static inline void Acb_NtkFreeObjRanges(
Acb_Ntk_t *
p ) { Vec_IntErase(&
p->vObjRange); }
228static inline void Acb_NtkFreeObjTravs(
Acb_Ntk_t *
p ) { Vec_IntErase(&
p->vObjTrav); }
229static inline void Acb_NtkFreeObjAttrs(
Acb_Ntk_t *
p ) { Vec_IntErase(&
p->vObjAttr); }
230static inline void Acb_NtkFreeObjLevelD(
Acb_Ntk_t *
p ) { Vec_IntErase(&
p->vLevelD); }
231static inline void Acb_NtkFreeObjLevelR(
Acb_Ntk_t *
p ) { Vec_IntErase(&
p->vLevelR); }
232static inline void Acb_NtkFreeObjPathD(
Acb_Ntk_t *
p ) { Vec_IntErase(&
p->vPathD); }
233static inline void Acb_NtkFreeObjPathR(
Acb_Ntk_t *
p ) { Vec_IntErase(&
p->vPathR); }
234static inline void Acb_NtkFreeObjCounts(
Acb_Ntk_t *
p ) { Vec_FltErase(&
p->vCounts); }
235static inline void Acb_NtkFreeObjFanout(
Acb_Ntk_t *
p ) { Vec_WecErase(&
p->vFanouts); }
236static inline void Acb_NtkFreeObjCnfs(
Acb_Ntk_t *
p ) { Vec_WecErase(&
p->vCnfs); }
246static inline int Acb_ObjIsCio(
Acb_Ntk_t *
p,
int i ) {
return Acb_ObjIsCi(
p, i) || Acb_ObjIsCo(
p, i); }
252static inline int Acb_ObjIsUnary(
Acb_Ntk_t *
p,
int i ) {
return Acb_TypeIsUnary(Acb_ObjType(
p, i)); }
254static inline int Acb_ObjFanOffset(
Acb_Ntk_t *
p,
int i ) {
assert(i>0);
return Vec_IntEntry(&
p->vObjFans, i); }
255static inline int * Acb_ObjFanins(
Acb_Ntk_t *
p,
int i ) {
return Vec_IntEntryP(&
p->vFanSto, Acb_ObjFanOffset(
p, i)); }
256static inline int Acb_ObjFanin(
Acb_Ntk_t *
p,
int i,
int k ) {
return Acb_ObjFanins(
p, i)[k+1]; }
257static inline int Acb_ObjFaninNum(
Acb_Ntk_t *
p,
int i ) {
return Acb_ObjFanins(
p, i)[0]; }
258static inline int Acb_ObjFanoutNum(
Acb_Ntk_t *
p,
int i ) {
return Vec_IntSize( Vec_WecEntry(&
p->vFanouts, i) ); }
260static inline int Acb_ObjFanout(
Acb_Ntk_t *
p,
int i,
int k ) {
return Vec_IntEntry( Acb_ObjFanoutVec(
p, i), k ); }
261static inline int Acb_ObjFanin0(
Acb_Ntk_t *
p,
int i ) {
return Acb_ObjFanins(
p, i)[1]; }
262static inline int Acb_ObjCioId(
Acb_Ntk_t *
p,
int i ) {
return Acb_ObjFanins(
p, i)[2]; }
264static inline int Acb_ObjCopy(
Acb_Ntk_t *
p,
int i ) {
assert(i>0);
assert( Acb_NtkHasObjCopies(
p) );
return Vec_IntEntry(&
p->vObjCopy, i); }
265static inline int Acb_ObjFunc(
Acb_Ntk_t *
p,
int i ) {
assert(i>0);
assert( Acb_NtkHasObjFuncs(
p) );
return Vec_IntEntry(&
p->vObjFunc, i); }
266static inline int Acb_ObjWeight(
Acb_Ntk_t *
p,
int i ) {
assert(i>0);
assert( Acb_NtkHasObjWeights(
p) );
return Vec_IntEntry(&
p->vObjWeight, i); }
267static inline word Acb_ObjTruth(
Acb_Ntk_t *
p,
int i ) {
assert(i>0);
assert( Acb_NtkHasObjTruths(
p) );
return Vec_WrdEntry(&
p->vObjTruth, i); }
268static inline word * Acb_ObjTruthP(
Acb_Ntk_t *
p,
int i ) {
assert(i>0);
assert( Acb_NtkHasObjTruths(
p) );
return Vec_WrdEntryP(&
p->vObjTruth, i); }
269static inline int Acb_ObjName(
Acb_Ntk_t *
p,
int i ) {
assert(i>0);
assert( Acb_NtkHasObjNames(
p) );
return Vec_IntEntry(&
p->vObjName, i); }
270static inline char * Acb_ObjNameStr(
Acb_Ntk_t *
p,
int i ) {
assert(i>0);
return Acb_NtkStr(
p, Acb_ObjName(
p, i)); }
271static inline int Acb_ObjAttr(
Acb_Ntk_t *
p,
int i ) {
assert(i>=0);
return Acb_NtkHasObjAttrs(
p) ? Vec_IntEntry(&
p->vObjAttr, i) : 0; }
272static inline int Acb_ObjAttrSize(
Acb_Ntk_t *
p,
int i ) {
assert(i>=0);
return Acb_ObjAttr(
p, i) ? Vec_IntEntry(&
p->vAttrSto, Acb_ObjAttr(
p, i)) : 0; }
273static inline int * Acb_ObjAttrArray(
Acb_Ntk_t *
p,
int i ) {
assert(i>=0);
return Acb_ObjAttr(
p, i) ? Vec_IntEntryP(&
p->vAttrSto, Acb_ObjAttr(
p, i)+1) : NULL; }
274static inline int Acb_ObjAttrValue(
Acb_Ntk_t *
p,
int i,
int x ) {
int k, s = Acb_ObjAttrSize(
p, i), * a = Acb_ObjAttrArray(
p, i);
for ( k = 0; k < s; k += 2)
if (a[k] == x)
return a[k+1];
return 0; }
275static inline int Acb_ObjLevelD(
Acb_Ntk_t *
p,
int i ) {
assert(i>0);
return Vec_IntEntry(&
p->vLevelD, i); }
276static inline int Acb_ObjLevelR(
Acb_Ntk_t *
p,
int i ) {
assert(i>0);
return Vec_IntEntry(&
p->vLevelR, i); }
277static inline int Acb_ObjPathD(
Acb_Ntk_t *
p,
int i ) {
assert(i>0);
return Vec_IntEntry(&
p->vPathD, i); }
278static inline int Acb_ObjPathR(
Acb_Ntk_t *
p,
int i ) {
assert(i>0);
return Vec_IntEntry(&
p->vPathR, i); }
279static inline float Acb_ObjCounts(
Acb_Ntk_t *
p,
int i ) {
assert(i>0);
return Vec_FltEntry(&
p->vCounts, i); }
282static inline void Acb_ObjSetCopy(
Acb_Ntk_t *
p,
int i,
int x ) {
assert(Acb_ObjCopy(
p, i) == -1); Vec_IntWriteEntry( &
p->vObjCopy, i, x ); }
283static inline void Acb_ObjSetFunc(
Acb_Ntk_t *
p,
int i,
int x ) {
assert(Acb_ObjFunc(
p, i) == -1); Vec_IntWriteEntry( &
p->vObjFunc, i, x ); }
284static inline void Acb_ObjSetWeight(
Acb_Ntk_t *
p,
int i,
int x ) {
assert(Acb_ObjWeight(
p, i)== 0); Vec_IntWriteEntry( &
p->vObjWeight, i, x ); }
285static inline void Acb_ObjSetTruth(
Acb_Ntk_t *
p,
int i,
word x ) {
assert(Acb_ObjTruth(
p, i) == 0); Vec_WrdWriteEntry( &
p->vObjTruth, i, x ); }
286static inline void Acb_ObjSetName(
Acb_Ntk_t *
p,
int i,
int x ) {
assert(Acb_ObjName(
p, i) == 0); Vec_IntWriteEntry( &
p->vObjName, i, x ); }
287static inline void Acb_ObjSetAttrs(
Acb_Ntk_t *
p,
int i,
int * a,
int s ) {
assert(Acb_ObjAttr(
p, i) == 0);
if ( !a )
return; Vec_IntWriteEntry(&
p->vObjAttr, i, Vec_IntSize(&
p->vAttrSto)); Vec_IntPush(&
p->vAttrSto, s); Vec_IntPushArray(&
p->vAttrSto, a, s); }
288static inline int Acb_ObjSetLevelD(
Acb_Ntk_t *
p,
int i,
int x ) { Vec_IntWriteEntry( &
p->vLevelD, i, x );
return x; }
289static inline int Acb_ObjSetLevelR(
Acb_Ntk_t *
p,
int i,
int x ) { Vec_IntWriteEntry( &
p->vLevelR, i, x );
return x; }
290static inline int Acb_ObjSetPathD(
Acb_Ntk_t *
p,
int i,
int x ) { Vec_IntWriteEntry( &
p->vPathD, i, x );
return x; }
291static inline int Acb_ObjSetPathR(
Acb_Ntk_t *
p,
int i,
int x ) { Vec_IntWriteEntry( &
p->vPathR, i, x );
return x; }
292static inline float Acb_ObjSetCounts(
Acb_Ntk_t *
p,
int i,
float x ) { Vec_FltWriteEntry( &
p->vCounts, i, x );
return x; }
293static inline int Acb_ObjUpdateLevelD(
Acb_Ntk_t *
p,
int i,
int x ) { Vec_IntUpdateEntry( &
p->vLevelD, i, x );
return x; }
294static inline int Acb_ObjUpdateLevelR(
Acb_Ntk_t *
p,
int i,
int x ) { Vec_IntUpdateEntry( &
p->vLevelR, i, x );
return x; }
295static inline int Acb_ObjAddToPathD(
Acb_Ntk_t *
p,
int i,
int x ) { Vec_IntAddToEntry( &
p->vPathD, i, x );
return x; }
296static inline int Acb_ObjAddToPathR(
Acb_Ntk_t *
p,
int i,
int x ) { Vec_IntAddToEntry( &
p->vPathR, i, x );
return x; }
298static inline int Acb_ObjNtkId(
Acb_Ntk_t *
p,
int i ) {
assert(i>0);
return Acb_ObjIsBox(
p, i) ? Acb_ObjFanin(
p, i, Acb_ObjFaninNum(
p, i)) : 0; }
300static inline int Acb_ObjIsSeq(
Acb_Ntk_t *
p,
int i ) {
assert(i>0);
return Acb_ObjIsBox(
p, i) ? Acb_ObjNtk(
p, i)->fSeq : Acb_TypeIsSeq(Acb_ObjType(
p, i)); }
302static inline int Acb_ObjRangeId(
Acb_Ntk_t *
p,
int i ) {
return Acb_NtkHasObjRanges(
p) ? Vec_IntEntry(&
p->vObjRange, i) : 0; }
303static inline int Acb_ObjRange(
Acb_Ntk_t *
p,
int i ) {
return Abc_Lit2Var( Acb_ObjRangeId(
p, i) ); }
304static inline int Acb_ObjLeft(
Acb_Ntk_t *
p,
int i ) {
return Acb_NtkRangeLeft(
p, Acb_ObjRange(
p, i)); }
305static inline int Acb_ObjRight(
Acb_Ntk_t *
p,
int i ) {
return Acb_NtkRangeRight(
p, Acb_ObjRange(
p, i)); }
306static inline int Acb_ObjSigned(
Acb_Ntk_t *
p,
int i ) {
return Abc_LitIsCompl(Acb_ObjRangeId(
p, i)); }
307static inline int Acb_ObjRangeSize(
Acb_Ntk_t *
p,
int i ) {
return Acb_NtkRangeSize(
p, Acb_ObjRange(
p, i)); }
308static inline void Acb_ObjSetRangeSign(
Acb_Ntk_t *
p,
int i,
int x ) {
assert(Acb_NtkHasObjRanges(
p)); Vec_IntWriteEntry(&
p->vObjRange, i, x); }
309static inline void Acb_ObjSetRange(
Acb_Ntk_t *
p,
int i,
int x ) {
assert(Acb_NtkHasObjRanges(
p)); Vec_IntWriteEntry(&
p->vObjRange, i, Abc_Var2Lit(x,0)); }
310static inline void Acb_ObjHashRange(
Acb_Ntk_t *
p,
int i,
int l,
int r ) { Acb_ObjSetRange(
p, i, Acb_NtkHashRange(
p, l, r) ); }
311static inline int Acb_ObjRangeSign(
Acb_Ntk_t *
p,
int i ) {
return Abc_Var2Lit( Acb_ObjRangeSize(
p, i), Acb_ObjSigned(
p, i) ); }
313static inline int Acb_ObjTravId(
Acb_Ntk_t *
p,
int i ) {
return Vec_IntEntry(&
p->vObjTrav, i); }
314static inline int Acb_ObjTravIdDiff(
Acb_Ntk_t *
p,
int i ) {
return p->nObjTravs - Vec_IntEntry(&
p->vObjTrav, i); }
315static inline int Acb_ObjIsTravIdCur(
Acb_Ntk_t *
p,
int i ) {
return Acb_ObjTravId(
p, i) ==
p->nObjTravs; }
316static inline int Acb_ObjIsTravIdPrev(
Acb_Ntk_t *
p,
int i ) {
return Acb_ObjTravId(
p, i) ==
p->nObjTravs-1; }
317static inline int Acb_ObjIsTravIdDiff(
Acb_Ntk_t *
p,
int i,
int d ) {
return Acb_ObjTravId(
p, i) ==
p->nObjTravs-d; }
318static inline int Acb_ObjSetTravIdCur(
Acb_Ntk_t *
p,
int i ) {
int r = Acb_ObjIsTravIdCur(
p, i); Vec_IntWriteEntry(&
p->vObjTrav, i,
p->nObjTravs);
return r; }
319static inline int Acb_ObjSetTravIdPrev(
Acb_Ntk_t *
p,
int i ) {
int r = Acb_ObjIsTravIdPrev(
p, i); Vec_IntWriteEntry(&
p->vObjTrav, i,
p->nObjTravs-1);
return r; }
320static inline int Acb_ObjSetTravIdDiff(
Acb_Ntk_t *
p,
int i,
int d ) {
int r = Acb_ObjTravIdDiff(
p, i); Vec_IntWriteEntry(&
p->vObjTrav, i,
p->nObjTravs-d);
return r; }
321static inline int Acb_NtkTravId(
Acb_Ntk_t *
p ) {
return p->nObjTravs; }
322static inline void Acb_NtkIncTravId(
Acb_Ntk_t *
p ) {
if ( !Acb_NtkHasObjTravs(
p) ) Acb_NtkCleanObjTravs(
p);
p->nObjTravs++; }
328#define Acb_ManForEachNtk( p, pNtk, i ) \
329 for ( i = 1; (i <= Acb_ManNtkNum(p)) && (((pNtk) = Acb_ManNtk(p, i)), 1); i++ )
331#define Acb_NtkForEachPi( p, iObj, i ) \
332 for ( i = 0; (i < Acb_NtkPiNum(p)) && (((iObj) = Acb_NtkCi(p, i)), 1); i++ )
333#define Acb_NtkForEachPo( p, iObj, i ) \
334 for ( i = 0; (i < Acb_NtkPoNum(p)) && (((iObj) = Acb_NtkCo(p, i)), 1); i++ )
336#define Acb_NtkForEachCi( p, iObj, i ) \
337 for ( i = 0; (i < Acb_NtkCiNum(p)) && (((iObj) = Acb_NtkCi(p, i)), 1); i++ )
338#define Acb_NtkForEachCo( p, iObj, i ) \
339 for ( i = 0; (i < Acb_NtkCoNum(p)) && (((iObj) = Acb_NtkCo(p, i)), 1); i++ )
340#define Acb_NtkForEachCoDriver( p, iObj, i ) \
341 for ( i = 0; (i < Acb_NtkCoNum(p)) && (((iObj) = Acb_ObjFanin(p, Acb_NtkCo(p, i), 0)), 1); i++ )
342#define Acb_NtkForEachCoAndDriver( p, iObj, iDriver, i ) \
343 for ( i = 0; (i < Acb_NtkCoNum(p)) && (((iObj) = Acb_NtkCo(p, i)), 1) && (((iDriver) = Acb_ObjFanin(p, iObj, 0)), 1); i++ )
345#define Acb_NtkForEachCiVec( vVec, p, iObj, i ) \
346 for ( i = 0; (i < Vec_IntSize(vVec)) && (((iObj) = Acb_NtkCi(p, Vec_IntEntry(vVec,i))), 1); i++ )
347#define Acb_NtkForEachCoVec( vVec, p, iObj, i ) \
348 for ( i = 0; (i < Vec_IntSize(vVec)) && (((iObj) = Acb_NtkCo(p, Vec_IntEntry(vVec,i))), 1); i++ )
349#define Acb_NtkForEachCoDriverVec( vVec, p, iObj, i ) \
350 for ( i = 0; (i < Vec_IntSize(vVec)) && (((iObj) = Acb_ObjFanin(p, Acb_NtkCo(p, Vec_IntEntry(vVec,i)), 0)), 1); i++ )
352#define Acb_NtkForEachBoxSeq( p, iObj, i ) \
353 for ( i = 0; (i < Acb_NtkSeqNum(p)) && (((iObj) = Acb_NtkBoxSeq(p, i)), 1); i++ )
354#define Acb_NtkForEachCioOrder( p, iObj, i ) \
355 for ( i = 0; (i < Acb_NtkCioOrderNum(p)) && (((iObj) = Acb_NtkCioOrder(p, i)), 1); i++ )
358#define Acb_NtkForEachObj( p, i ) \
359 for ( i = 1; i < Vec_StrSize(&p->vObjType); i++ ) if ( !Acb_ObjType(p, i) ) {} else
360#define Acb_NtkForEachObjReverse( p, i ) \
361 for ( i = Vec_StrSize(&p->vObjType)-1; i > 0; i-- ) if ( !Acb_ObjType(p, i) ) {} else
362#define Acb_NtkForEachNode( p, i ) \
363 for ( i = 1; i < Vec_StrSize(&p->vObjType); i++ ) if ( !Acb_ObjType(p, i) || Acb_ObjIsCio(p, i) ) {} else
364#define Acb_NtkForEachNodeSupp( p, i, nSuppSize ) \
365 for ( i = 1; i < Vec_StrSize(&p->vObjType); i++ ) if ( !Acb_ObjType(p, i) || Acb_ObjIsCio(p, i) || Acb_ObjFaninNum(p, i) != nSuppSize ) {} else
366#define Acb_NtkForEachNodeReverse( p, i ) \
367 for ( i = Vec_StrSize(&p->vObjType)-1; i > 0; i-- ) if ( !Acb_ObjType(p, i) || Acb_ObjIsCio(p, i) ) {} else
368#define Acb_NtkForEachObjType( p, Type, i ) \
369 for ( i = 1; i < Vec_StrSize(&p->vObjType) && (((Type) = Acb_ObjType(p, i)), 1); i++ ) if ( !Type ) {} else
370#define Acb_NtkForEachBox( p, i ) \
371 for ( i = 1; i < Vec_StrSize(&p->vObjType); i++ ) if ( !Acb_ObjIsBox(p, i) ) {} else
373#define Acb_ObjForEachFanin( p, iObj, iFanin, k ) \
374 for ( k = 0; k < Acb_ObjFaninNum(p, iObj) && ((iFanin = Acb_ObjFanin(p, iObj, k)), 1); k++ )
375#define Acb_ObjForEachFaninFast( p, iObj, pFanins, iFanin, k ) \
376 for ( k = 0, pFanins = Acb_ObjFanins(p, iObj); k < pFanins[0] && ((iFanin = pFanins[k+1]), 1); k++ )
378#define Acb_ObjForEachFanout( p, iObj, iFanout, k ) \
379 Vec_IntForEachEntry( Vec_WecEntry(&p->vFanouts, iObj), iFanout, k ) if ( !Acb_ObjType(p, iFanout) ) {} else
381#define Acb_ObjForEachFon( p, iObj, iFon ) \
382 for ( assert(Acb_ObjIsBox(p, iObj)), iFon = iObj + 1; iFon < Acb_NtkObjNum(p) && Acb_ObjIsFon(p, iFon); iFon++ )
399static inline int Acb_ObjFonNum(
Acb_Ntk_t *
p,
int iObj )
402 if ( !Acb_ObjIsBox(
p, iObj) )
408static inline int Acb_ObjWhatFanin(
Acb_Ntk_t *
p,
int iObj,
int iFaninGiven )
410 int k, iFanin, * pFanins;
412 if ( iFanin == iFaninGiven )
416static inline void Acb_ObjAddFanin(
Acb_Ntk_t *
p,
int iObj,
int iFanin )
418 int * pFanins = Acb_ObjFanins(
p, iObj );
420 assert( pFanins[ 1 + pFanins[0] ] == -1 );
421 pFanins[ 1 + pFanins[0]++ ] = iFanin;
423static inline void Acb_ObjDeleteFaninIndex(
Acb_Ntk_t *
p,
int iObj,
int iFaninIndex )
425 int i, * pFanins = Acb_ObjFanins(
p, iObj );
427 for ( i = iFaninIndex; i < pFanins[0]; i++ )
428 pFanins[ 1 + i ] = pFanins[ 2 + i ];
429 pFanins[ 1 + pFanins[0] ] = -1;
431static inline void Acb_ObjDeleteFanin(
Acb_Ntk_t *
p,
int iObj,
int iFanin )
433 int * pFanins = Acb_ObjFanins(
p, iObj );
434 int iFaninIndex = Acb_ObjWhatFanin(
p, iObj, iFanin );
435 assert( pFanins[ 1 + iFaninIndex ] == iFanin );
436 Acb_ObjDeleteFaninIndex(
p, iObj, iFaninIndex );
443 Acb_ObjAddFanin(
p, iObj, iFanin );
445static inline void Acb_ObjSetNtkId(
Acb_Ntk_t *
p,
int iObj,
int iNtk )
447 int * pFanins = Acb_ObjFanins(
p, iObj );
448 assert( pFanins[ 1 + pFanins[0] ] == -1 );
449 pFanins[ 1 + pFanins[0] ] = iNtk;
451static inline void Acb_ObjRemoveFanins(
Acb_Ntk_t *
p,
int iObj )
453 int i, * pFanins = Acb_ObjFanins(
p, iObj );
454 for ( i = 1; i <= pFanins[0]; i++ )
463 int i, nFansReal, CioId = -1, iObj = Vec_StrSize(&
p->vObjType);
464 Vec_StrPush( &
p->vObjType, (
char)Type );
468 CioId = Vec_IntSize( &
p->vCis );
469 Vec_IntPush( &
p->vCis, iObj );
475 CioId = Vec_IntSize( &
p->vCos );
476 Vec_IntPush( &
p->vCos, iObj );
480 nFansReal = Abc_MaxInt( nFans + Acb_ObjIsBox(
p, iObj),
p->nFaninMax );
482 Vec_IntPush( &
p->vObjFans, Vec_IntSize(&
p->vFanSto) );
483 Vec_IntPush( &
p->vFanSto, 0 );
484 for ( i = 0; i < nFansReal; i++ )
485 Vec_IntPush( &
p->vFanSto, (CioId >= 0 && i == 1) ? CioId : -1 );
487 assert( !Acb_ObjIsBox(
p, iObj) || nFons > 0 );
488 for ( i = 0; i < nFons; i++ )
491 if ( Acb_NtkHasObjCopies(
p) ) Vec_IntPush(&
p->vObjCopy , -1);
492 if ( Acb_NtkHasObjFuncs(
p) ) Vec_IntPush(&
p->vObjFunc , -1);
493 if ( Acb_NtkHasObjWeights(
p)) Vec_IntPush(&
p->vObjWeight, 0);
494 if ( Acb_NtkHasObjTruths(
p) ) Vec_WrdPush(&
p->vObjTruth , 0);
495 if ( Acb_NtkHasObjNames(
p) ) Vec_IntPush(&
p->vObjName , 0);
496 if ( Acb_NtkHasObjRanges(
p) ) Vec_IntPush(&
p->vObjRange , 0);
497 if ( Acb_NtkHasObjTravs(
p) ) Vec_IntPush(&
p->vObjTrav , 0);
498 if ( Acb_NtkHasObjAttrs(
p) ) Vec_IntPush(&
p->vObjAttr , 0);
499 if ( Acb_NtkHasObjLevelD(
p) ) Vec_IntPush(&
p->vLevelD , 0);
500 if ( Acb_NtkHasObjLevelR(
p) ) Vec_IntPush(&
p->vLevelR , 0);
501 if ( Acb_NtkHasObjPathD(
p) ) Vec_IntPush(&
p->vPathD , 0);
502 if ( Acb_NtkHasObjPathR(
p) ) Vec_IntPush(&
p->vPathR , 0);
503 if ( Acb_NtkHasObjCounts(
p) ) Vec_FltPush(&
p->vCounts , 0);
504 if ( Acb_NtkHasObjFanout(
p) ) Vec_WecPushLevel(&
p->vFanouts);
505 if ( Acb_NtkHasObjCnfs(
p) ) Vec_WecPushLevel(&
p->vCnfs);
506 if (
p->vQue ) Vec_QueSetPriority(
p->vQue, Vec_FltArrayP(&
p->vCounts) );
511 int iObj = Acb_ObjAlloc( pNew, Acb_ObjType(
p, i), Acb_ObjFaninNum(
p, i), Acb_ObjFonNum(
p, i) );
512 Acb_ObjSetCopy(
p, i, iObj );
515static inline void Acb_ObjDelete(
Acb_Ntk_t *
p,
int iObj )
518 Acb_ObjCleanType(
p, iObj );
519 if ( !Acb_ObjIsBox(
p, iObj) )
522 Acb_ObjCleanType(
p, i );
524static inline void Acb_ObjAddFaninFanoutOne(
Acb_Ntk_t *
p,
int iObj,
int iFanin )
526 Vec_IntPush( Vec_WecEntry(&
p->vFanouts, iFanin), iObj );
527 Acb_ObjAddFanin(
p, iObj, iFanin );
529static inline void Acb_ObjAddFaninFanout(
Acb_Ntk_t *
p,
int iObj )
531 int k, iFanin, * pFanins;
533 Vec_IntPush( Vec_WecEntry(&
p->vFanouts, iFanin), iObj );
535static inline void Acb_ObjRemoveFaninFanoutOne(
Acb_Ntk_t *
p,
int iObj,
int iFanin )
537 int RetValue = Vec_IntRemove( Vec_WecEntry(&
p->vFanouts, iFanin), iObj );
539 Acb_ObjDeleteFanin(
p, iObj, iFanin );
541static inline void Acb_ObjRemoveFaninFanout(
Acb_Ntk_t *
p,
int iObj )
543 int k, iFanin, * pFanins;
546 int RetValue = Vec_IntRemove( Vec_WecEntry(&
p->vFanouts, iFanin), iObj );
550static inline void Acb_ObjPatchFanin(
Acb_Ntk_t *
p,
int iObj,
int iFanin,
int iFaninNew )
552 int i, RetValue, * pFanins = Acb_ObjFanins(
p, iObj );
553 assert( iFanin != iFaninNew );
554 for ( i = 0; i < pFanins[0]; i++ )
555 if ( pFanins[ 1 + i ] == iFanin )
556 pFanins[ 1 + i ] = iFaninNew;
557 if ( !Acb_NtkHasObjFanout(
p) )
559 RetValue = Vec_IntRemove( Vec_WecEntry(&
p->vFanouts, iFanin), iObj );
561 Vec_IntPush( Vec_WecEntry(&
p->vFanouts, iFaninNew), iObj );
563static inline void Acb_NtkCreateFanout(
Acb_Ntk_t *
p )
566 Acb_NtkCleanObjFanout(
p );
568 Acb_ObjAddFaninFanout(
p, iObj );
582static inline Acb_Ntk_t * Acb_NtkAlloc(
Acb_Man_t *
p,
int NameId,
int nCis,
int nCos,
int nObjs )
585 assert( nCis >= 0 && nCos >= 0 && nObjs >= 0 );
586 pNew->
Id = Vec_PtrSize(&
p->vNtks); Vec_PtrPush( &
p->vNtks, pNew );
589 Vec_IntGrow( &pNew->
vCis, nCis );
590 Vec_IntGrow( &pNew->
vCos, nCos );
592 Vec_IntGrow( &pNew->
vObjFans, nObjs+1 ); Vec_IntPush( &pNew->
vObjFans, -1 );
593 Vec_IntGrow( &pNew->
vFanSto, 3*nObjs );
596static inline void Acb_NtkFree(
Acb_Ntk_t *
p )
599 Vec_IntErase( &
p->vCis );
600 Vec_IntErase( &
p->vCos );
601 Vec_IntErase( &
p->vOrder );
602 Vec_IntErase( &
p->vSeq );
604 Vec_StrErase( &
p->vObjType );
605 Vec_IntErase( &
p->vObjFans );
606 Vec_IntErase( &
p->vFanSto );
608 Vec_IntErase( &
p->vObjCopy );
609 Vec_IntErase( &
p->vObjFunc );
610 Vec_IntErase( &
p->vObjWeight );
611 Vec_WrdErase( &
p->vObjTruth );
612 Vec_IntErase( &
p->vObjName );
613 Vec_IntErase( &
p->vObjRange );
614 Vec_IntErase( &
p->vObjTrav );
615 Vec_IntErase( &
p->vObjBits );
616 Vec_IntErase( &
p->vObjAttr );
617 Vec_IntErase( &
p->vAttrSto );
618 Vec_IntErase( &
p->vNtkObjs );
619 Vec_IntErase( &
p->vTargets );
620 Vec_IntErase( &
p->vLevelD );
621 Vec_IntErase( &
p->vLevelR );
622 Vec_IntErase( &
p->vPathD );
623 Vec_IntErase( &
p->vPathR );
624 Vec_FltErase( &
p->vCounts );
625 Vec_WecErase( &
p->vFanouts );
626 Vec_WecErase( &
p->vCnfs );
627 Vec_StrErase( &
p->vCnf );
628 Vec_IntErase( &
p->vSuppOld );
630 Vec_QueFreeP( &
p->vQue );
631 Vec_IntErase( &
p->vCover );
632 Vec_IntErase( &
p->vArray0 );
633 Vec_IntErase( &
p->vArray1 );
634 Vec_IntErase( &
p->vArray2 );
637static inline int Acb_NtkNewStrId(
Acb_Ntk_t * pNtk,
const char * format, ... )
641 int nAdded, nSize = 1000;
642 va_list args; va_start( args, format );
643 Vec_StrGrow( vBuf, Vec_StrSize(vBuf) + nSize );
644 nAdded = vsnprintf( Vec_StrLimit(vBuf), nSize, format, args );
645 if ( nAdded > nSize )
647 Vec_StrGrow( vBuf, Vec_StrSize(vBuf) + nAdded + nSize );
648 nSize = vsnprintf( Vec_StrLimit(vBuf), nAdded, format, args );
649 assert( nSize == nAdded );
657 Vec_StrPrintF( vOut,
"%d\'b%s", Vec_StrSize(vBits)-1, Vec_StrArray(vBits) );
660static inline int Acb_ManNewConstZero(
Acb_Ntk_t *
p,
int nBits )
663 Vec_StrPrintF( vOut,
"%d\'b%0s", nBits,
"" );
670 printf(
"Network with name \"%s\" already exists.\n", Acb_NtkName(pNtk) );
678 printf(
"Network with name \"%s\" does not exist.\n", Acb_NtkName(pNtk) );
681 Acb_NtkFree( Acb_ManNtk(
p, NtkId) );
682 Vec_PtrWriteEntry( &
p->vNtks, NtkId, pNtk );
688 Vec_Int_t * vObjs = Vec_IntAlloc( Acb_NtkObjNum(
p) );
690 Vec_IntPush( vObjs, iObj );
696 int i, k, iObj, iObjNew, iFanin;
697 pNew = Acb_NtkAlloc( pMan, Acb_NtkNameId(
p), Acb_NtkCiNum(
p), Acb_NtkCoNum(
p), Vec_IntSize(vObjs) );
698 Acb_NtkCleanObjCopies(
p );
700 iObjNew = Acb_ObjDup( pNew,
p, iObj );
703 iObjNew = Acb_ObjCopy(
p, iObj );
705 Acb_ObjAddFanin( pNew, iObjNew, Acb_ObjCopy(
p, iFanin) );
708 assert( Acb_NtkObjNum(pNew) == Acb_NtkObjNumAlloc(pNew) );
709 Acb_NtkSetCopy(
p, Acb_NtkId(pNew) );
710 Acb_NtkSetRegNum( pNew, Acb_NtkRegNum(
p) );
716 Vec_Int_t * vObjs = pFuncOrder ? pFuncOrder(
p) : Acb_NtkCollect(
p);
719 pNew = Acb_NtkDup( pMan,
p, vObjs );
720 Vec_IntFree( vObjs );
729 Vec_IntPush( &pNew->
vOrder, Acb_ObjCopy(
p, iObj) );
733 Vec_IntRemapArray( &
p->vObjCopy, &
p->vObjFunc, &pNew->
vObjFunc, Acb_NtkObjNum(pNew) + 1 );
734 Vec_IntRemapArray( &
p->vObjCopy, &
p->vObjWeight, &pNew->
vObjWeight, Acb_NtkObjNum(pNew) + 1 );
736 Vec_IntRemapArray( &
p->vObjCopy, &
p->vObjName, &pNew->
vObjName, Acb_NtkObjNum(pNew) + 1 );
737 Vec_IntRemapArray( &
p->vObjCopy, &
p->vObjRange, &pNew->
vObjRange, Acb_NtkObjNum(pNew) + 1 );
738 Vec_IntRemapArray( &
p->vObjCopy, &
p->vObjAttr, &pNew->
vObjAttr, Acb_NtkObjNum(pNew) + 1 );
740 Vec_IntAppend( &pNew->
vAttrSto, &
p->vAttrSto );
742static inline int Acb_NtkMemory(
Acb_Ntk_t *
p )
746 nMem += (int)Vec_IntMemory(&
p->vCis);
747 nMem += (int)Vec_IntMemory(&
p->vCos);
748 nMem += (int)Vec_IntMemory(&
p->vOrder);
749 nMem += (int)Vec_IntMemory(&
p->vSeq);
751 nMem += (int)Vec_StrMemory(&
p->vObjType);
752 nMem += (int)Vec_IntMemory(&
p->vObjFans);
753 nMem += (int)Vec_IntMemory(&
p->vFanSto);
754 nMem += (int)Vec_WecMemory(&
p->vFanouts);
756 nMem += (int)Vec_IntMemory(&
p->vObjCopy );
757 nMem += (int)Vec_IntMemory(&
p->vObjFunc );
758 nMem += (int)Vec_IntMemory(&
p->vObjWeight );
759 nMem += (int)Vec_WrdMemory(&
p->vObjTruth );
760 nMem += (int)Vec_IntMemory(&
p->vObjName );
761 nMem += (int)Vec_IntMemory(&
p->vObjRange );
762 nMem += (int)Vec_IntMemory(&
p->vObjTrav );
763 nMem += (int)Vec_IntMemory(&
p->vObjBits );
764 nMem += (int)Vec_IntMemory(&
p->vObjAttr );
765 nMem += (int)Vec_IntMemory(&
p->vAttrSto );
766 nMem += (int)Vec_IntMemory(&
p->vNtkObjs );
767 nMem += (int)Vec_IntMemory(&
p->vTargets );
769 nMem += (int)Vec_IntMemory(&
p->vCover );
770 nMem += (int)Vec_IntMemory(&
p->vArray0 );
771 nMem += (int)Vec_IntMemory(&
p->vArray1 );
772 nMem += (int)Vec_IntMemory(&
p->vArray2 );
775static inline void Acb_NtkPrintStats(
Acb_Ntk_t *
p )
777 printf(
"pi =%5d ", Acb_NtkPiNum(
p) );
778 printf(
"po =%5d ", Acb_NtkPoNum(
p) );
779 printf(
"ff =%5d ", Acb_NtkRegNum(
p) );
780 printf(
"node =%5d ", Acb_NtkNodeNum(
p) );
781 printf(
"box =%5d ", Acb_NtkBoxNum(
p) );
783 printf(
" %s ", Acb_NtkName(
p) );
784 if ( Vec_IntSize(&
p->vNtkObjs) )
785 printf(
"-> %s", Acb_NtkName(Acb_NtkNtk(
p, Vec_IntEntry(&
p->vNtkObjs, 0))) );
789static inline void Acb_NtkPrint(
Acb_Ntk_t *
p )
792 printf(
"Interface (%d):\n", Acb_NtkCioNum(
p) );
793 printf(
"Objects (%d):\n", Acb_NtkObjNum(
p) );
796 printf(
"%6d : ", i );
797 printf(
"Type =%3d ", Type );
798 printf(
"Fanins = %d ", Acb_ObjFaninNum(
p, i) );
799 if ( Acb_NtkHasObjNames(
p) && Acb_ObjName(
p, i) )
800 printf(
"%s", Acb_ObjNameStr(
p, i) );
820 pNew->
pSpec = Abc_UtilStrsav( pFileName );
824 pNew->
vHash = vHash ? vHash : Hash_IntManStart( 1000 );
834 Vec_PtrGrow( &pNew->
vNtks, nNtks+1 ); Vec_PtrPush( &pNew->
vNtks, NULL );
847 Acb_ManDupTypeNames( pNew,
p );
850 pNtkNew = Acb_NtkDupOrder( pNew, pNtk, pFuncOrder );
851 Acb_NtkAdd( pNew, pNtkNew );
852 Acb_NtkDupAttrs( pNtkNew, pNtk );
857 pNew->
iRoot = Acb_ManNtkNum(pNew);
860static inline void Acb_ManFree(
Acb_Man_t *
p )
869 Hash_IntManDeref(
p->vHash );
870 Vec_IntErase( &
p->vNameMap );
871 Vec_IntErase( &
p->vUsed );
872 Vec_IntErase( &
p->vNameMap2 );
873 Vec_IntErase( &
p->vUsed2 );
874 Vec_StrErase( &
p->vOut );
875 Vec_StrErase( &
p->vOut2 );
880static inline int Acb_ManGetMap(
Acb_Man_t *
p,
int i )
882 return Vec_IntGetEntry(&
p->vNameMap, i);
884static inline void Acb_ManSetMap(
Acb_Man_t *
p,
int i,
int x )
886 assert( Vec_IntGetEntry(&
p->vNameMap, i) == 0 );
887 Vec_IntSetEntry( &
p->vNameMap, i, x );
888 Vec_IntPush( &
p->vUsed, i );
890static inline void Acb_ManUnsetMap(
Acb_Man_t *
p,
int i )
892 Vec_IntSetEntry( &
p->vNameMap, i, 0 );
894static inline void Acb_ManCleanMap(
Acb_Man_t *
p )
898 Vec_IntWriteEntry( &
p->vNameMap, Entry, 0 );
899 Vec_IntClear( &
p->vUsed );
901static inline int Acb_NtkGetMap(
Acb_Ntk_t *
p,
int i ) {
return Acb_ManGetMap(
p->pDesign, i); }
902static inline void Acb_NtkSetMap(
Acb_Ntk_t *
p,
int i,
int x ) { Acb_ManSetMap(
p->pDesign, i, x); }
903static inline void Acb_NtkUnsetMap(
Acb_Ntk_t *
p,
int i ) { Acb_ManUnsetMap(
p->pDesign, i); }
904static inline void Acb_NtkCleanMap(
Acb_Ntk_t *
p ) { Acb_ManCleanMap(
p->pDesign); }
906static inline int Acb_ManGetMap2(
Acb_Man_t *
p,
int i )
908 return Vec_IntGetEntry(&
p->vNameMap2, i);
910static inline void Acb_ManSetMap2(
Acb_Man_t *
p,
int i,
int x )
912 assert( Vec_IntGetEntry(&
p->vNameMap2, i) == 0 );
913 Vec_IntSetEntry( &
p->vNameMap2, i, x );
914 Vec_IntPush( &
p->vUsed2, i );
916static inline void Acb_ManUnsetMap2(
Acb_Man_t *
p,
int i )
918 Vec_IntSetEntry( &
p->vNameMap2, i, 0 );
920static inline void Acb_ManCleanMap2(
Acb_Man_t *
p )
924 Vec_IntWriteEntry( &
p->vNameMap2, Entry, 0 );
925 Vec_IntClear( &
p->vUsed2 );
927static inline int Acb_NtkGetMap2(
Acb_Ntk_t *
p,
int i ) {
return Acb_ManGetMap2(
p->pDesign, i); }
928static inline void Acb_NtkSetMap2(
Acb_Ntk_t *
p,
int i,
int x ) { Acb_ManSetMap2(
p->pDesign, i, x); }
929static inline void Acb_NtkUnsetMap2(
Acb_Ntk_t *
p,
int i ) { Acb_ManUnsetMap2(
p->pDesign, i); }
930static inline void Acb_NtkCleanMap2(
Acb_Ntk_t *
p ) { Acb_ManCleanMap2(
p->pDesign); }
932static inline int Acb_ManMemory(
Acb_Man_t *
p )
936 nMem +=
p->pName ? (int)
strlen(
p->pName) : 0;
937 nMem +=
p->pSpec ? (int)
strlen(
p->pSpec) : 0;
941 nMem += (int)Vec_IntMemory(&
p->vNameMap );
942 nMem += (int)Vec_IntMemory(&
p->vUsed );
943 nMem += (int)Vec_StrMemory(&
p->vOut );
944 nMem += (int)Vec_StrMemory(&
p->vOut2 );
945 nMem += (int)Vec_PtrMemory(&
p->vNtks);
947 nMem += Acb_NtkMemory( pNtk );
950static inline int Acb_ManObjNum(
Acb_Man_t *
p )
954 Count += Acb_NtkObjNum(pNtk);
957static inline int Acb_ManBoxNum(
Acb_Man_t *
p )
961 Count += Acb_NtkBoxNum( pNtk );
964static inline void Acb_ManBoxNumRec_rec(
Acb_Ntk_t *
p,
int * pCountP,
int * pCountU )
966 int iObj, Id = Acb_NtkId(
p);
967 if ( pCountP[Id] >= 0 )
969 pCountP[Id] = pCountU[Id] = 0;
972 if ( Acb_ObjIsBox(
p, iObj) )
974 Acb_ManBoxNumRec_rec( Acb_ObjNtk(
p, iObj), pCountP, pCountU );
975 pCountP[Id] += pCountP[Acb_ObjNtkId(
p, iObj)];
976 pCountU[Id] += pCountU[Acb_ObjNtkId(
p, iObj)] + 1;
982static inline void Acb_ManBoxNumRec(
Acb_Man_t *
p,
int * pnPrims,
int * pnUsers )
985 int * pCountP =
ABC_FALLOC(
int, Acb_ManNtkNum(
p) + 1 );
986 int * pCountU =
ABC_FALLOC(
int, Acb_ManNtkNum(
p) + 1 );
987 Acb_ManBoxNumRec_rec( pNtk, pCountP, pCountU );
988 *pnPrims = pCountP[Acb_NtkId(pNtk)];
989 *pnUsers = pCountU[Acb_NtkId(pNtk)];
993static inline void Acb_ManPrintStats(
Acb_Man_t *
p,
int nModules,
int fVerbose )
997 Acb_ManBoxNumRec(
p, &nPrims, &nUsers );
998 printf(
"%-12s : ", Acb_ManName(
p) );
999 printf(
"pi =%5d ", Acb_NtkCiNum(pRoot) );
1000 printf(
"po =%5d ", Acb_NtkCoNum(pRoot) );
1001 printf(
"mod =%5d ", Acb_ManNtkNum(
p) );
1002 printf(
"box =%5d ", nPrims + nUsers );
1003 printf(
"prim =%5d ", nPrims );
1004 printf(
"user =%5d ", nUsers );
1005 printf(
"mem =%6.3f MB", 1.0*Acb_ManMemory(
p)/(1<<20) );
1009 if ( i == nModules+1 )
1011 printf(
"Module %5d : ", i );
1012 Acb_NtkPrintStats( pNtk );
Acb_ObjType_t
INCLUDES ///.
#define ABC_FALLOC(type, num)
#define ABC_CALLOC(type, num)
#define ABC_NAMESPACE_HEADER_END
#define ABC_NAMESPACE_HEADER_START
NAMESPACES ///.
void Acb_NtkUpdateLevelD(Acb_Ntk_t *p, int iObj)
Acb_Ntk_t * Acb_VerilogSimpleRead(char *pFileName, char *pFileNameW)
struct Acb_Ntk_t_ Acb_Ntk_t
int Acb_NtkCountPiBuffers(Acb_Ntk_t *p, Vec_Int_t *vObjs)
#define Acb_NtkForEachCioOrder(p, iObj, i)
struct Acb_Man_t_ Acb_Man_t
void Acb_NtkUpdateNode(Acb_Ntk_t *p, int Pivot, word uTruth, Vec_Int_t *vSupp)
#define Acb_ObjForEachFon(p, iObj, iFon)
int Acb_NtkCreateNode(Acb_Ntk_t *p, word uTruth, Vec_Int_t *vSupp)
void Acb_NtkPrintNode(Acb_Ntk_t *p, int iObj)
void Acb_NtkUpdateTiming(Acb_Ntk_t *p, int iObj)
Vec_Int_t * Acb_ObjCollectTfi(Acb_Ntk_t *p, int iObj, int fTerm)
Vec_Int_t * Acb_ObjCollectTfoVec(Acb_Ntk_t *p, Vec_Int_t *vObjs)
int Acb_ObjComputeLevelD(Acb_Ntk_t *p, int iObj)
int Acb_NtkCountPoDrivers(Acb_Ntk_t *p, Vec_Int_t *vObjs)
Vec_Int_t * Acb_ObjCollectTfiVec(Acb_Ntk_t *p, Vec_Int_t *vObjs)
Vec_Int_t * Acb_ObjCollectTfo(Acb_Ntk_t *p, int iObj, int fTerm)
#define Acb_ManForEachNtk(p, pNtk, i)
ITERATORS ///.
#define Acb_NtkForEachObj(p, i)
#define Acb_ObjForEachFanin(p, iObj, iFanin, k)
typedefABC_NAMESPACE_HEADER_START struct Acb_Aig_t_ Acb_Aig_t
INCLUDES ///.
int Acb_NtkComputeLevelD(Acb_Ntk_t *p, Vec_Int_t *vTfo)
#define Acb_NtkForEachObjType(p, Type, i)
#define Acb_ObjForEachFaninFast(p, iObj, pFanins, iFanin, k)
int Acb_NtkFindMffcSize(Acb_Ntk_t *p, Vec_Int_t *vObjsRefed, Vec_Int_t *vObjsDerefed, int nGates[5])
typedefABC_NAMESPACE_IMPL_START struct Vec_Int_t_ Vec_Int_t
DECLARATIONS ///.
struct Vec_Str_t_ Vec_Str_t
unsigned __int64 word
DECLARATIONS ///.
char * pTypeNames[ABC_OPER_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 ///.
typedefABC_NAMESPACE_HEADER_START struct Vec_Flt_t_ Vec_Flt_t
INCLUDES ///.
struct Hash_IntMan_t_ Hash_IntMan_t
#define Vec_IntForEachEntry(vVec, Entry, i)
MACRO DEFINITIONS ///.
typedefABC_NAMESPACE_HEADER_START struct Vec_Ptr_t_ Vec_Ptr_t
INCLUDES ///.
typedefABC_NAMESPACE_HEADER_START struct Vec_Que_t_ Vec_Que_t
INCLUDES ///.
typedefABC_NAMESPACE_HEADER_START struct Vec_Wec_t_ Vec_Wec_t
INCLUDES ///.
typedefABC_NAMESPACE_HEADER_START struct Vec_Wrd_t_ Vec_Wrd_t
INCLUDES ///.