ABC: A System for Sequential Synthesis and Verification
 
Loading...
Searching...
No Matches
vecWec.h
Go to the documentation of this file.
1
20
21#ifndef ABC__misc__vec__vecWec_h
22#define ABC__misc__vec__vecWec_h
23
24
28
29#include <stdio.h>
30
32
33
37
41
42typedef struct Vec_Wec_t_ Vec_Wec_t;
44{
45 int nCap;
46 int nSize;
48};
49
53
54// iterators through levels
55#define Vec_WecForEachLevel( vGlob, vVec, i ) \
56 for ( i = 0; (i < Vec_WecSize(vGlob)) && (((vVec) = Vec_WecEntry(vGlob, i)), 1); i++ )
57#define Vec_WecForEachLevelVec( vLevels, vGlob, vVec, i ) \
58 for ( i = 0; (i < Vec_IntSize(vLevels)) && (((vVec) = Vec_WecEntry(vGlob, Vec_IntEntry(vLevels, i))), 1); i++ )
59#define Vec_WecForEachLevelStart( vGlob, vVec, i, LevelStart ) \
60 for ( i = LevelStart; (i < Vec_WecSize(vGlob)) && (((vVec) = Vec_WecEntry(vGlob, i)), 1); i++ )
61#define Vec_WecForEachLevelStop( vGlob, vVec, i, LevelStop ) \
62 for ( i = 0; (i < LevelStop) && (((vVec) = Vec_WecEntry(vGlob, i)), 1); i++ )
63#define Vec_WecForEachLevelStartStop( vGlob, vVec, i, LevelStart, LevelStop ) \
64 for ( i = LevelStart; (i < LevelStop) && (((vVec) = Vec_WecEntry(vGlob, i)), 1); i++ )
65#define Vec_WecForEachLevelReverse( vGlob, vVec, i ) \
66 for ( i = Vec_WecSize(vGlob)-1; (i >= 0) && (((vVec) = Vec_WecEntry(vGlob, i)), 1); i-- )
67#define Vec_WecForEachLevelReverseStartStop( vGlob, vVec, i, LevelStart, LevelStop ) \
68 for ( i = LevelStart-1; (i >= LevelStop) && (((vVec) = Vec_WecEntry(vGlob, i)), 1); i-- )
69#define Vec_WecForEachLevelTwo( vGlob1, vGlob2, vVec1, vVec2, i ) \
70 for ( i = 0; (i < Vec_WecSize(vGlob1)) && (((vVec1) = Vec_WecEntry(vGlob1, i)), 1) && (((vVec2) = Vec_WecEntry(vGlob2, i)), 1); i++ )
71#define Vec_WecForEachLevelDouble( vGlob, vVec1, vVec2, i ) \
72 for ( i = 0; (i < Vec_WecSize(vGlob)) && (((vVec1) = Vec_WecEntry(vGlob, i)), 1) && (((vVec2) = Vec_WecEntry(vGlob, i+1)), 1); i += 2 )
73
77
89static inline Vec_Wec_t * Vec_WecAlloc( int nCap )
90{
91 Vec_Wec_t * p;
92 p = ABC_ALLOC( Vec_Wec_t, 1 );
93 if ( nCap > 0 && nCap < 8 )
94 nCap = 8;
95 p->nSize = 0;
96 p->nCap = nCap;
97 p->pArray = p->nCap? ABC_CALLOC( Vec_Int_t, p->nCap ) : NULL;
98 return p;
99}
100static inline Vec_Wec_t * Vec_WecAllocExact( int nCap )
101{
102 Vec_Wec_t * p;
103 assert( nCap >= 0 );
104 p = ABC_ALLOC( Vec_Wec_t, 1 );
105 p->nSize = 0;
106 p->nCap = nCap;
107 p->pArray = p->nCap? ABC_CALLOC( Vec_Int_t, p->nCap ) : NULL;
108 return p;
109}
110static inline Vec_Wec_t * Vec_WecStart( int nSize )
111{
112 Vec_Wec_t * p;
113 p = Vec_WecAlloc( nSize );
114 p->nSize = nSize;
115 return p;
116}
117
129static inline void Vec_WecGrow( Vec_Wec_t * p, int nCapMin )
130{
131 if ( p->nCap >= nCapMin )
132 return;
133 p->pArray = ABC_REALLOC( Vec_Int_t, p->pArray, nCapMin );
134 memset( p->pArray + p->nCap, 0, sizeof(Vec_Int_t) * (size_t)(nCapMin - p->nCap) );
135 p->nCap = nCapMin;
136}
137static inline void Vec_WecInit( Vec_Wec_t * p, int nSize )
138{
139 Vec_WecGrow( p, nSize );
140 p->nSize = nSize;
141}
142
154static inline Vec_Int_t * Vec_WecEntry( Vec_Wec_t * p, int i )
155{
156 assert( i >= 0 && i < p->nSize );
157 return p->pArray + i;
158}
159static inline Vec_Int_t * Vec_WecEntryLast( Vec_Wec_t * p )
160{
161 assert( p->nSize > 0 );
162 return p->pArray + p->nSize - 1;
163}
164static inline int Vec_WecEntryEntry( Vec_Wec_t * p, int i, int k )
165{
166 return Vec_IntEntry( Vec_WecEntry(p, i), k );
167}
168
180static inline Vec_Int_t * Vec_WecArray( Vec_Wec_t * p )
181{
182 return p->pArray;
183}
184static inline int Vec_WecLevelId( Vec_Wec_t * p, Vec_Int_t * vLevel )
185{
186 assert( p->pArray <= vLevel && vLevel < p->pArray + p->nSize );
187 return vLevel - p->pArray;
188}
189
201static inline int Vec_WecCap( Vec_Wec_t * p )
202{
203 return p->nCap;
204}
205static inline int Vec_WecSize( Vec_Wec_t * p )
206{
207 return p->nSize;
208}
209static inline int Vec_WecLevelSize( Vec_Wec_t * p, int i )
210{
211 assert( i >= 0 && i < p->nSize );
212 return Vec_IntSize( p->pArray + i );
213}
214static inline int Vec_WecSizeSize( Vec_Wec_t * p )
215{
216 Vec_Int_t * vVec;
217 int i, Counter = 0;
218 Vec_WecForEachLevel( p, vVec, i )
219 Counter += Vec_IntSize(vVec);
220 return Counter;
221}
222static inline int Vec_WecSizeUsed( Vec_Wec_t * p )
223{
224 Vec_Int_t * vVec;
225 int i, Counter = 0;
226 Vec_WecForEachLevel( p, vVec, i )
227 Counter += (int)(Vec_IntSize(vVec) > 0);
228 return Counter;
229}
230static inline int Vec_WecSizeUsedLimits( Vec_Wec_t * p, int iStart, int iStop )
231{
232 Vec_Int_t * vVec;
233 int i, Counter = 0;
234 Vec_WecForEachLevelStartStop( p, vVec, i, iStart, iStop )
235 Counter += (int)(Vec_IntSize(vVec) > 0);
236 return Counter;
237}
238
250static inline void Vec_WecShrink( Vec_Wec_t * p, int nSizeNew )
251{
252 Vec_Int_t * vVec; int i;
253 Vec_WecForEachLevelStart( p, vVec, i, nSizeNew )
254 Vec_IntShrink( vVec, 0 );
255 assert( p->nSize >= nSizeNew );
256 p->nSize = nSizeNew;
257}
258
270static inline void Vec_WecClear( Vec_Wec_t * p )
271{
272 Vec_Int_t * vVec;
273 int i;
274 Vec_WecForEachLevel( p, vVec, i )
275 Vec_IntClear( vVec );
276 p->nSize = 0;
277}
278static inline void Vec_WecClearLevels( Vec_Wec_t * p )
279{
280 Vec_Int_t * vVec;
281 int i;
282 Vec_WecForEachLevel( p, vVec, i )
283 Vec_IntClear( vVec );
284}
285
297static inline void Vec_WecPush( Vec_Wec_t * p, int Level, int Entry )
298{
299 if ( p->nSize < Level + 1 )
300 {
301 Vec_WecGrow( p, Abc_MaxInt(2*p->nSize, Level + 1) );
302 p->nSize = Level + 1;
303 }
304 Vec_IntPush( Vec_WecEntry(p, Level), Entry );
305}
306static inline void Vec_WecPushTwo( Vec_Wec_t * p, int Level, int Entry1, int Entry2 )
307{
308 if ( p->nSize < Level + 1 )
309 {
310 Vec_WecGrow( p, Abc_MaxInt(2*p->nSize, Level + 1) );
311 p->nSize = Level + 1;
312 }
313 Vec_IntPushTwo( Vec_WecEntry(p, Level), Entry1, Entry2 );
314}
315static inline Vec_Int_t * Vec_WecPushLevel( Vec_Wec_t * p )
316{
317 if ( p->nSize == p->nCap )
318 {
319 if ( p->nCap < 16 )
320 Vec_WecGrow( p, 16 );
321 else
322 Vec_WecGrow( p, 2 * p->nCap );
323 }
324 ++p->nSize;
325 return Vec_WecEntryLast( p );
326}
327static inline Vec_Int_t * Vec_WecInsertLevel( Vec_Wec_t * p, int i )
328{
329 Vec_Int_t * pTemp;
330 if ( p->nSize == p->nCap )
331 {
332 if ( p->nCap < 16 )
333 Vec_WecGrow( p, 16 );
334 else
335 Vec_WecGrow( p, 2 * p->nCap );
336 }
337 ++p->nSize;
338 assert( i >= 0 && i < p->nSize );
339 for ( pTemp = p->pArray + p->nSize - 2; pTemp >= p->pArray + i; pTemp-- )
340 pTemp[1] = pTemp[0];
341 Vec_IntZero( p->pArray + i );
342 return p->pArray + i;
343}
344
356static inline double Vec_WecMemory( Vec_Wec_t * p )
357{
358 int i;
359 double Mem;
360 if ( p == NULL ) return 0.0;
361 Mem = sizeof(Vec_Int_t) * Vec_WecCap(p);
362 for ( i = 0; i < p->nSize; i++ )
363 Mem += sizeof(int) * (size_t)Vec_IntCap( Vec_WecEntry(p, i) );
364 return Mem;
365}
366
378static inline void Vec_WecZero( Vec_Wec_t * p )
379{
380 p->pArray = NULL;
381 p->nSize = 0;
382 p->nCap = 0;
383}
384static inline void Vec_WecErase( Vec_Wec_t * p )
385{
386 int i;
387 for ( i = 0; i < p->nCap; i++ )
388 ABC_FREE( p->pArray[i].pArray );
389 ABC_FREE( p->pArray );
390 p->nSize = 0;
391 p->nCap = 0;
392}
393static inline void Vec_WecFree( Vec_Wec_t * p )
394{
395 Vec_WecErase( p );
396 ABC_FREE( p );
397}
398static inline void Vec_WecFreeP( Vec_Wec_t ** p )
399{
400 if ( *p == NULL )
401 return;
402 Vec_WecFree( *p );
403 *p = NULL;
404}
405
417static inline void Vec_WecPushUnique( Vec_Wec_t * p, int Level, int Entry )
418{
419 if ( p->nSize < Level + 1 )
420 Vec_WecPush( p, Level, Entry );
421 else
422 Vec_IntPushUnique( Vec_WecEntry(p, Level), Entry );
423}
424
436static inline Vec_Wec_t * Vec_WecDup( Vec_Wec_t * p )
437{
438 Vec_Wec_t * vNew;
439 Vec_Int_t * vVec;
440 int i, k, Entry;
441 vNew = Vec_WecStart( Vec_WecSize(p) );
442 Vec_WecForEachLevel( p, vVec, i )
443 Vec_IntForEachEntry( vVec, Entry, k )
444 Vec_WecPush( vNew, i, Entry );
445 return vNew;
446}
447static inline Vec_Wec_t * Vec_WecDupSize( Vec_Wec_t * p )
448{
449 Vec_Wec_t * vNew;
450 Vec_Int_t * vVec;
451 int i;
452 vNew = Vec_WecStart( Vec_WecSize(p) );
453 Vec_WecForEachLevel( p, vVec, i )
454 Vec_IntFill( Vec_WecEntry(vNew, i), Vec_IntSize(vVec), 0 );
455 return vNew;
456}
457
469static int Vec_WecSortCompare1( Vec_Int_t * p1, Vec_Int_t * p2 )
470{
471 if ( Vec_IntSize(p1) < Vec_IntSize(p2) )
472 return -1;
473 if ( Vec_IntSize(p1) > Vec_IntSize(p2) )
474 return 1;
475 return 0;
476}
477static int Vec_WecSortCompare2( Vec_Int_t * p1, Vec_Int_t * p2 )
478{
479 if ( Vec_IntSize(p1) > Vec_IntSize(p2) )
480 return -1;
481 if ( Vec_IntSize(p1) < Vec_IntSize(p2) )
482 return 1;
483 return 0;
484}
485static inline void Vec_WecSort( Vec_Wec_t * p, int fReverse )
486{
487 if ( fReverse )
488 qsort( (void *)p->pArray, (size_t)p->nSize, sizeof(Vec_Int_t),
489 (int (*)(const void *, const void *)) Vec_WecSortCompare2 );
490 else
491 qsort( (void *)p->pArray, (size_t)p->nSize, sizeof(Vec_Int_t),
492 (int (*)(const void *, const void *)) Vec_WecSortCompare1 );
493}
494
495
507static int Vec_WecSortCompare3( Vec_Int_t * p1, Vec_Int_t * p2 )
508{
509 if ( Vec_IntEntry(p1,0) < Vec_IntEntry(p2,0) )
510 return -1;
511 if ( Vec_IntEntry(p1,0) > Vec_IntEntry(p2,0) )
512 return 1;
513 return 0;
514}
515static int Vec_WecSortCompare4( Vec_Int_t * p1, Vec_Int_t * p2 )
516{
517 if ( Vec_IntEntry(p1,0) > Vec_IntEntry(p2,0) )
518 return -1;
519 if ( Vec_IntEntry(p1,0) < Vec_IntEntry(p2,0) )
520 return 1;
521 return 0;
522}
523static inline void Vec_WecSortByFirstInt( Vec_Wec_t * p, int fReverse )
524{
525 if ( fReverse )
526 qsort( (void *)p->pArray, (size_t)p->nSize, sizeof(Vec_Int_t),
527 (int (*)(const void *, const void *)) Vec_WecSortCompare4 );
528 else
529 qsort( (void *)p->pArray, (size_t)p->nSize, sizeof(Vec_Int_t),
530 (int (*)(const void *, const void *)) Vec_WecSortCompare3 );
531}
532
544static int Vec_WecSortCompare5( Vec_Int_t * p1, Vec_Int_t * p2 )
545{
546 if ( Vec_IntEntryLast(p1) < Vec_IntEntryLast(p2) )
547 return -1;
548 if ( Vec_IntEntryLast(p1) > Vec_IntEntryLast(p2) )
549 return 1;
550 return 0;
551}
552static int Vec_WecSortCompare6( Vec_Int_t * p1, Vec_Int_t * p2 )
553{
554 if ( Vec_IntEntryLast(p1) > Vec_IntEntryLast(p2) )
555 return -1;
556 if ( Vec_IntEntryLast(p1) < Vec_IntEntryLast(p2) )
557 return 1;
558 return 0;
559}
560static inline void Vec_WecSortByLastInt( Vec_Wec_t * p, int fReverse )
561{
562 if ( fReverse )
563 qsort( (void *)p->pArray, (size_t)p->nSize, sizeof(Vec_Int_t),
564 (int (*)(const void *, const void *)) Vec_WecSortCompare6 );
565 else
566 qsort( (void *)p->pArray, (size_t)p->nSize, sizeof(Vec_Int_t),
567 (int (*)(const void *, const void *)) Vec_WecSortCompare5 );
568}
569
581static inline void Vec_WecKeepLevels( Vec_Wec_t * p, int Limit )
582{
583 Vec_Int_t * vLevel; int i, k = 0;
584 Vec_WecForEachLevel( p, vLevel, i )
585 if ( Vec_IntSize(vLevel) > Limit )
586 {
587 ABC_SWAP( Vec_Int_t, Vec_WecArray(p)[i], Vec_WecArray(p)[k] );
588 k++;
589 }
590 Vec_WecShrink( p, k );
591}
592
604static inline void Vec_WecPrint( Vec_Wec_t * p, int fSkipSingles )
605{
606 Vec_Int_t * vVec;
607 int i, k, Entry;
608 Vec_WecForEachLevel( p, vVec, i )
609 {
610 if ( fSkipSingles && Vec_IntSize(vVec) == 1 )
611 continue;
612 printf( " %4d : {", i );
613 Vec_IntForEachEntry( vVec, Entry, k )
614 printf( " %d", Entry );
615 printf( " }\n" );
616 }
617}
618static inline void Vec_WecPrintLits( Vec_Wec_t * p )
619{
620 Vec_Int_t * vVec;
621 int i, k, iLit;
622 Vec_WecForEachLevel( p, vVec, i )
623 {
624 printf( " %4d : %2d {", i, Vec_IntSize(vVec) );
625 Vec_IntForEachEntry( vVec, iLit, k )
626 printf( " %c%d", Abc_LitIsCompl(iLit) ? '-' : '+', Abc_Lit2Var(iLit) );
627 printf( " }\n" );
628 }
629}
630
642static inline Vec_Wec_t * Vec_WecCreateClasses( Vec_Int_t * vMap )
643{
644 Vec_Wec_t * vClasses;
645 int i, Entry;
646 vClasses = Vec_WecStart( Vec_IntFindMax(vMap) + 1 );
647 Vec_IntForEachEntry( vMap, Entry, i )
648 Vec_WecPush( vClasses, Entry, i );
649 return vClasses;
650}
651
663static inline int Vec_WecCountNonTrivial( Vec_Wec_t * p, int * pnUsed )
664{
665 Vec_Int_t * vClass;
666 int i, nClasses = 0;
667 *pnUsed = 0;
668 Vec_WecForEachLevel( p, vClass, i )
669 {
670 if ( Vec_IntSize(vClass) < 2 )
671 continue;
672 nClasses++;
673 (*pnUsed) += Vec_IntSize(vClass);
674 }
675 return nClasses;
676}
677
689static inline int Vec_WecMaxLevelSize( Vec_Wec_t * p )
690{
691 Vec_Int_t * vTemp; int i, Res = 0;
692 Vec_WecForEachLevel( p, vTemp, i )
693 Res = Abc_MaxInt( Res, Vec_IntSize(vTemp) );
694 return Res;
695}
696static inline int Vec_WecMaxEntry( Vec_Wec_t * p )
697{
698 Vec_Int_t * vTemp; int i, Res = 0;
699 Vec_WecForEachLevel( p, vTemp, i )
700 Res = Abc_MaxInt( Res, Vec_IntFindMax(vTemp) );
701 return Res;
702}
703
715static inline Vec_Int_t * Vec_WecCollectFirsts( Vec_Wec_t * p )
716{
717 Vec_Int_t * vFirsts, * vLevel;
718 int i;
719 vFirsts = Vec_IntAlloc( Vec_WecSize(p) );
720 Vec_WecForEachLevel( p, vLevel, i )
721 if ( Vec_IntSize(vLevel) > 0 )
722 Vec_IntPush( vFirsts, Vec_IntEntry(vLevel, 0) );
723 return vFirsts;
724}
725
737static inline Vec_Ptr_t * Vec_WecConvertToVecPtr( Vec_Wec_t * p )
738{
739 Vec_Ptr_t * vCopy;
740 Vec_Int_t * vLevel;
741 int i;
742 vCopy = Vec_PtrAlloc( Vec_WecSize(p) );
743 Vec_WecForEachLevel( p, vLevel, i )
744 Vec_PtrPush( vCopy, Vec_IntDup(vLevel) );
745 return vCopy;
746}
747
748
760static inline int Vec_WecIntHasMark( Vec_Int_t * vVec ) { return (vVec->nCap >> 30) & 1; }
761static inline void Vec_WecIntSetMark( Vec_Int_t * vVec ) { vVec->nCap |= (1<<30); }
762static inline void Vec_WecIntXorMark( Vec_Int_t * vVec ) { vVec->nCap ^= (1<<30); }
763static inline void Vec_WecMarkLevels( Vec_Wec_t * vCubes, Vec_Int_t * vLevels )
764{
765 Vec_Int_t * vCube;
766 int i;
767 Vec_WecForEachLevelVec( vLevels, vCubes, vCube, i )
768 {
769 assert( !Vec_WecIntHasMark( vCube ) );
770 Vec_WecIntXorMark( vCube );
771 }
772}
773static inline void Vec_WecUnmarkLevels( Vec_Wec_t * vCubes, Vec_Int_t * vLevels )
774{
775 Vec_Int_t * vCube;
776 int i;
777 Vec_WecForEachLevelVec( vLevels, vCubes, vCube, i )
778 {
779 assert( Vec_WecIntHasMark( vCube ) );
780 Vec_WecIntXorMark( vCube );
781 }
782}
783
795static inline void Vec_WecRemoveEmpty( Vec_Wec_t * vCubes )
796{
797 Vec_Int_t * vCube;
798 int i, k = 0;
799 Vec_WecForEachLevel( vCubes, vCube, i )
800 if ( Vec_IntSize(vCube) > 0 )
801 vCubes->pArray[k++] = *vCube;
802 else
803 ABC_FREE( vCube->pArray );
804 for ( i = k; i < Vec_WecSize(vCubes); i++ )
805 Vec_IntZero( Vec_WecEntry(vCubes, i) );
806 Vec_WecShrink( vCubes, k );
807// Vec_WecSortByFirstInt( vCubes, 0 );
808}
809
810
822static inline void Vec_WecDumpBin( char * pFileName, Vec_Wec_t * p, int fVerbose )
823{
824 Vec_Int_t * vLevel;
825 int i, nSize, RetValue;
826 FILE * pFile = fopen( pFileName, "wb" );
827 if ( pFile == NULL )
828 {
829 printf( "Cannot open file \"%s\" for writing.\n", pFileName );
830 return;
831 }
832 nSize = Vec_WecSize(p);
833 RetValue = fwrite( &nSize, 1, sizeof(int), pFile );
834 Vec_WecForEachLevel( p, vLevel, i )
835 {
836 nSize = Vec_IntSize(vLevel);
837 RetValue += fwrite( &nSize, 1, sizeof(int), pFile );
838 RetValue += fwrite( Vec_IntArray(vLevel), 1, sizeof(int)*nSize, pFile );
839 }
840 fclose( pFile );
841 if ( RetValue != (int)sizeof(int)*(Vec_WecSizeSize(p)+Vec_WecSize(p)+1) )
842 printf( "Error writing data into file.\n" );
843 if ( fVerbose )
844 printf( "Written %d integer arrays into file \"%s\".\n", Vec_WecSize(p), pFileName );
845}
846static inline Vec_Wec_t * Vec_WecReadBin( char * pFileName, int fVerbose )
847{
848 Vec_Wec_t * p = NULL; Vec_Int_t * vLevel; int i, nSize, RetValue;
849 FILE * pFile = fopen( pFileName, "rb" );
850 if ( pFile == NULL )
851 {
852 printf( "Cannot open file \"%s\" for reading.\n", pFileName );
853 return NULL;
854 }
855 fseek( pFile, 0, SEEK_END );
856 nSize = ftell( pFile );
857 if ( nSize == 0 )
858 {
859 printf( "The input file is empty.\n" );
860 fclose( pFile );
861 return NULL;
862 }
863 if ( nSize % sizeof(int) > 0 )
864 {
865 printf( "Cannot read file with integers because it is not aligned at 4 bytes (remainder = %d).\n", (int)(nSize % sizeof(int)) );
866 fclose( pFile );
867 return NULL;
868 }
869 rewind( pFile );
870 RetValue = fread( &nSize, 1, sizeof(int), pFile );
871 assert( RetValue == 4 );
872 p = Vec_WecStart( nSize );
873 Vec_WecForEachLevel( p, vLevel, i )
874 {
875 RetValue = fread( &nSize, 1, sizeof(int), pFile );
876 assert( RetValue == 4 );
877 Vec_IntFill( vLevel, nSize, 0 );
878 RetValue = fread( Vec_IntArray(vLevel), 1, sizeof(int)*nSize, pFile );
879 assert( RetValue == 4*nSize );
880 }
881 fclose( pFile );
882 if ( fVerbose )
883 printf( "Read %d integer arrays from file \"%s\".\n", Vec_WecSize(p), pFileName );
884 return p;
885}
886
887
889
890#endif
891
895
#define ABC_SWAP(Type, a, b)
Definition abc_global.h:253
#define ABC_ALLOC(type, num)
Definition abc_global.h:264
#define ABC_REALLOC(type, obj, num)
Definition abc_global.h:268
#define ABC_CALLOC(type, num)
Definition abc_global.h:265
#define ABC_FREE(obj)
Definition abc_global.h:267
#define ABC_NAMESPACE_HEADER_END
#define ABC_NAMESPACE_HEADER_START
NAMESPACES ///.
typedefABC_NAMESPACE_IMPL_START struct Vec_Int_t_ Vec_Int_t
DECLARATIONS ///.
Definition bblif.c:37
Cube * p
Definition exorList.c:222
Vec_Int_t * pArray
Definition vecWec.h:47
int nCap
Definition vecWec.h:45
int nSize
Definition vecWec.h:46
#define assert(ex)
Definition util_old.h:213
char * memset()
VOID_HACK rewind()
#define Vec_IntForEachEntry(vVec, Entry, i)
MACRO DEFINITIONS ///.
Definition vecInt.h:54
typedefABC_NAMESPACE_HEADER_START struct Vec_Ptr_t_ Vec_Ptr_t
INCLUDES ///.
Definition vecPtr.h:42
#define Vec_WecForEachLevel(vGlob, vVec, i)
MACRO DEFINITIONS ///.
Definition vecWec.h:55
#define Vec_WecForEachLevelStart(vGlob, vVec, i, LevelStart)
Definition vecWec.h:59
#define Vec_WecForEachLevelVec(vLevels, vGlob, vVec, i)
Definition vecWec.h:57
#define Vec_WecForEachLevelStartStop(vGlob, vVec, i, LevelStart, LevelStop)
Definition vecWec.h:63
typedefABC_NAMESPACE_HEADER_START struct Vec_Wec_t_ Vec_Wec_t
INCLUDES ///.
Definition vecWec.h:42
#define SEEK_END
Definition zconf.h:392