30static unsigned int s_256Primes[
ISO_MASK+1] =
32 0x984b6ad9,0x18a6eed3,0x950353e2,0x6222f6eb,0xdfbedd47,0xef0f9023,0xac932a26,0x590eaf55,
33 0x97d0a034,0xdc36cd2e,0x22736b37,0xdc9066b0,0x2eb2f98b,0x5d9c7baf,0x85747c9e,0x8aca1055,
34 0x50d66b74,0x2f01ae9e,0xa1a80123,0x3e1ce2dc,0xebedbc57,0x4e68bc34,0x855ee0cf,0x17275120,
35 0x2ae7f2df,0xf71039eb,0x7c283eec,0x70cd1137,0x7cf651f3,0xa87bfa7a,0x14d87f02,0xe82e197d,
36 0x8d8a5ebe,0x1e6a15dc,0x197d49db,0x5bab9c89,0x4b55dea7,0x55dede49,0x9a6a8080,0xe5e51035,
37 0xe148d658,0x8a17eb3b,0xe22e4b38,0xe5be2a9a,0xbe938cbb,0x3b981069,0x7f9c0c8e,0xf756df10,
38 0x8fa783f7,0x252062ce,0x3dc46b4b,0xf70f6432,0x3f378276,0x44b137a1,0x2bf74b77,0x04892ed6,
39 0xfd318de1,0xd58c235e,0x94c6d25b,0x7aa5f218,0x35c9e921,0x5732fbbb,0x06026481,0xf584a44f,
40 0x946e1b5f,0x8463d5b2,0x4ebca7b2,0x54887b15,0x08d1e804,0x5b22067d,0x794580f6,0xb351ea43,
41 0xbce555b9,0x19ae2194,0xd32f1396,0x6fc1a7f1,0x1fd8a867,0x3a89fdb0,0xea49c61c,0x25f8a879,
42 0xde1e6437,0x7c74afca,0x8ba63e50,0xb1572074,0xe4655092,0xdb6f8b1c,0xc2955f3c,0x327f85ba,
43 0x60a17021,0x95bd261d,0xdea94f28,0x04528b65,0xbe0109cc,0x26dd5688,0x6ab2729d,0xc4f029ce,
44 0xacf7a0be,0x4c912f55,0x34c06e65,0x4fbb938e,0x1533fb5f,0x03da06bd,0x48262889,0xc2523d7d,
45 0x28a71d57,0x89f9713a,0xf574c551,0x7a99deb5,0x52834d91,0x5a6f4484,0xc67ba946,0x13ae698f,
46 0x3e390f34,0x34fc9593,0x894c7932,0x6cf414a3,0xdb7928ab,0x13a3b8a3,0x4b381c1d,0xa10b54cb,
47 0x55359d9d,0x35a3422a,0x58d1b551,0x0fd4de20,0x199eb3f4,0x167e09e2,0x3ee6a956,0x5371a7fa,
48 0xd424efda,0x74f521c5,0xcb899ff6,0x4a42e4f4,0x747917b6,0x4b08df0b,0x090c7a39,0x11e909e4,
49 0x258e2e32,0xd9fad92d,0x48fe5f69,0x0545cde6,0x55937b37,0x9b4ae4e4,0x1332b40e,0xc3792351,
50 0xaff982ef,0x4dba132a,0x38b81ef1,0x28e641bf,0x227208c1,0xec4bbe37,0xc4e1821c,0x512c9d09,
51 0xdaef1257,0xb63e7784,0x043e04d7,0x9c2cea47,0x45a0e59a,0x281315ca,0x849f0aac,0xa4071ed3,
52 0x0ef707b3,0xfe8dac02,0x12173864,0x471f6d46,0x24a53c0a,0x35ab9265,0xbbf77406,0xa2144e79,
53 0xb39a884a,0x0baf5b6d,0xcccee3dd,0x12c77584,0x2907325b,0xfd1adcd2,0xd16ee972,0x345ad6c1,
54 0x315ebe66,0xc7ad2b8d,0x99e82c8d,0xe52da8c8,0xba50f1d3,0x66689cd8,0x2e8e9138,0x43e15e74,
55 0xf1ced14d,0x188ec52a,0xe0ef3cbb,0xa958aedc,0x4107a1bc,0x5a9e7a3e,0x3bde939f,0xb5b28d5a,
56 0x596fe848,0xe85ad00c,0x0b6b3aae,0x44503086,0x25b5695c,0xc0c31dcd,0x5ee617f0,0x74d40c3a,
57 0xd2cb2b9f,0x1e19f5fa,0x81e24faf,0xa01ed68f,0xcee172fc,0x7fdf2e4d,0x002f4774,0x664f82dd,
58 0xc569c39a,0xa2d4dcbe,0xaadea306,0xa4c947bf,0xa413e4e3,0x81fb5486,0x8a404970,0x752c980c,
59 0x98d1d881,0x5c932c1e,0xeee65dfb,0x37592cdd,0x0fd4e65b,0xad1d383f,0x62a1452f,0x8872f68d,
60 0xb58c919b,0x345c8ee3,0xb583a6d6,0x43d72cb3,0x77aaa0aa,0xeb508242,0xf2db64f8,0x86294328,
61 0x82211731,0x1239a9d5,0x673ba5de,0xaf4af007,0x44203b19,0x2399d955,0xa175cd12,0x595928a7,
62 0x6918928b,0xde3126bb,0x6c99835c,0x63ba1fa2,0xdebbdff0,0x3d02e541,0xd6f7aac6,0xe80b4cd0,
63 0xd0fa29f1,0x804cac5e,0x2c226798,0x462f624c,0xad05b377,0x22924fcd,0xfbea205c,0x1b47586d
66static int s_PrimeC = 49;
120 vTies = Vec_IntAlloc( Gia_ManCandNum(
p) );
122 Vec_IntPush( vTies, i );
130 pObj->
Value = Gia_ObjIsAnd(pObj) ? 1 + Abc_MaxInt(Gia_ObjFanin0(pObj)->Value, Gia_ObjFanin1(pObj)->Value) : 0;
131 Gia_ManConst0(
p)->Value = s_256Primes[
ISO_MASK];
133 if ( Gia_ObjIsAnd(pObj) )
135 else if ( Gia_ObjIsPi(
p, pObj) )
137 else if ( Gia_ObjIsRo(
p, pObj) )
145 if ( Gia_ObjIsAnd(pObj) )
147 pObj->
Value += (Gia_ObjFaninC0(pObj) + s_PrimeC) * Gia_ObjFanin0(pObj)->Value + (Gia_ObjFaninC1(pObj) + s_PrimeC) * Gia_ObjFanin1(pObj)->Value;
148 if ( Gia_ObjFaninC0(pObj) == Gia_ObjFaninC1(pObj) && Gia_ObjFanin0(pObj)->Value == Gia_ObjFanin1(pObj)->Value )
151 else if ( Gia_ObjIsCo(pObj) )
152 pObj->
Value += (Gia_ObjFaninC0(pObj) + s_PrimeC) * Gia_ObjFanin0(pObj)->Value;
156 if ( pObjRo == Gia_ObjFanin0(pObj) )
177 if ( Gia_ObjIsTravIdCurrentId(
p, Id) )
179 Gia_ObjSetTravIdCurrentId(
p, Id);
180 pObj = Gia_ManObj(
p, Id );
181 if ( Gia_ObjIsAnd(pObj) )
183 if ( Gia_ObjIsPi(
p, pObj) )
185 if ( Gia_ObjIsRo(
p, pObj) )
187 assert( Gia_ObjIsConst0(pObj) );
219 p->nObjs = Gia_ManObjNum( pGia );
222 p->vUniques = Vec_IntStartFull(
p->nObjs );
224 p->vTable = Vec_IntStart( Abc_PrimeCudd(1*
p->nObjs) );
225 p->vPlaces = Vec_IntAlloc( 1000 );
226 p->vSingles = Vec_PtrAlloc( 1000 );
227 p->vVec0 = Vec_IntAlloc( 10000 );
228 p->vVec1 = Vec_IntAlloc( 10000 );
229 p->vMap0 = Vec_IntStart(
p->nObjs );
230 p->vMap1 = Vec_IntStart(
p->nObjs );
232 Vec_IntWriteEntry(
p->vUniques, 0,
p->nUniques++ );
237 Vec_IntFree(
p->vUniques );
238 Vec_IntFree(
p->vTied );
239 Vec_IntFree(
p->vTable );
240 Vec_IntFree(
p->vPlaces );
241 Vec_PtrFree(
p->vSingles );
242 Vec_IntFree(
p->vMap0 );
243 Vec_IntFree(
p->vMap1 );
244 Vec_IntFree(
p->vVec0 );
245 Vec_IntFree(
p->vVec1 );
252 printf(
"Iter %4d : ",
p->nIters++ );
253 printf(
"Entries =%8d. ", Vec_IntSize(
p->vTied) );
254 printf(
"Uniques =%8d. ",
p->nUniques );
255 printf(
"Singles =%8d. ", Vec_PtrSize(
p->vSingles) );
256 printf(
"%9.2f sec", (
float)(Time)/(
float)(CLOCKS_PER_SEC) );
280 int * pTable = Vec_IntArray(
p->vTable);
281 int i, k, nSize = Vec_IntSize(
p->vTable);
284 for ( k = 0; k < nSize; k++ )
293 printf(
"%3d : ", Gia_ObjId(
p->pGia, pObj) );
300 Vec_IntClear(
p->vPlaces );
303 for ( k = pObj->
Value % nSize; (pTemp = pTable[k] ? Gia_ManObj(
p->pGia, pTable[k]) : NULL); k = (k + 1) % nSize )
312 pTable[k] = Gia_ObjId(
p->pGia, pObj);
313 Vec_IntPush(
p->vPlaces, k );
320 Vec_PtrClear(
p->vSingles );
323 Vec_PtrPush(
p->vSingles, pObj );
327 Vec_IntWriteEntry(
p->vTied, k++, Gia_ObjId(
p->pGia, pObj) );
329 Vec_IntShrink(
p->vTied, k );
336 assert( Vec_IntEntry(
p->vUniques, Gia_ObjId(
p->pGia, pObj)) == -1 );
337 Vec_IntWriteEntry(
p->vUniques, Gia_ObjId(
p->pGia, pObj),
p->nUniques++ );
339 return Vec_PtrSize(
p->vSingles );
360 vValues = Vec_IntAlloc( Gia_ManPoNum(pGia) );
362 Vec_IntPush( vValues, pObj->
Value );
363 vMap = Hsh_IntManHashArray( vValues, 1 );
364 Vec_IntFree( vValues );
365 vEquivs = Vec_WecCreateClasses( vMap );
384 if ( Gia_ObjIsTravIdCurrentId(
p, Id) )
386 Gia_ObjSetTravIdCurrentId(
p, Id);
387 pObj = Gia_ManObj(
p, Id );
388 if ( Gia_ObjIsAnd(pObj) )
390 if ( Gia_ObjFanin0(pObj)->Value <= Gia_ObjFanin1(pObj)->Value )
401 else if ( Gia_ObjIsCo(pObj) )
405 else if ( Gia_ObjIsPi(
p, pObj) )
408 else assert( Gia_ObjIsConst0(pObj) );
409 Vec_IntPush( vVec, Id );
415 vVec = Vec_IntAlloc( 1000 );
417 for ( i = 0; i < nPos; i++ )
436 if ( Gia_ObjIsTravIdCurrentId(
p, Id) )
438 Gia_ObjSetTravIdCurrentId(
p, Id);
439 pObj = Gia_ManObj(
p, Id );
440 if ( Gia_ObjIsAnd(pObj) )
442 if ( Gia_ObjFanin0(pObj)->Value <= Gia_ObjFanin1(pObj)->Value )
453 else if ( Gia_ObjIsCo(pObj) )
457 else if ( Gia_ObjIsCi(pObj) )
459 if ( Gia_ObjIsRo(
p, pObj) )
460 Vec_IntPush( vRoots, Gia_ObjId(
p, Gia_ObjRoToRi(
p, pObj)) );
462 else assert( Gia_ObjIsConst0(pObj) );
463 Vec_IntWriteEntry( vMap, Id, Vec_IntSize(vVec) );
464 Vec_IntPush( vVec, Id );
469 Vec_IntClear( vRoots );
470 for ( i = 0; i < nPos; i++ )
471 Vec_IntPush( vRoots, Gia_ObjId(pGia, Gia_ManPo(pGia, pPos[i])) );
472 Vec_IntClear( vVec );
495 if ( iObj0 == iObj1 )
497 pObj0 = Gia_ManObj(
p, iObj0);
498 pObj1 = Gia_ManObj(
p, iObj1);
502 if ( !Gia_ObjIsAnd(pObj0) )
504 if ( Gia_ObjFanin0(pObj0)->Value <= Gia_ObjFanin1(pObj0)->Value )
506 if ( Gia_ObjFanin0(pObj1)->Value <= Gia_ObjFanin1(pObj1)->Value )
508 if ( Gia_ObjFaninC0(pObj0) != Gia_ObjFaninC0(pObj1) || Gia_ObjFaninC1(pObj0) != Gia_ObjFaninC1(pObj1) ||
509 Vec_IntEntry(vMap0, Gia_ObjFaninId0p(
p, pObj0)) != Vec_IntEntry( vMap1, Gia_ObjFaninId0p(
p, pObj1)) ||
510 Vec_IntEntry(vMap0, Gia_ObjFaninId1p(
p, pObj0)) != Vec_IntEntry( vMap1, Gia_ObjFaninId1p(
p, pObj1)) )
515 if ( Gia_ObjFaninC0(pObj0) != Gia_ObjFaninC1(pObj1) || Gia_ObjFaninC1(pObj0) != Gia_ObjFaninC0(pObj1) ||
516 Vec_IntEntry(vMap0, Gia_ObjFaninId0p(
p, pObj0)) != Vec_IntEntry( vMap1, Gia_ObjFaninId1p(
p, pObj1)) ||
517 Vec_IntEntry(vMap0, Gia_ObjFaninId1p(
p, pObj0)) != Vec_IntEntry( vMap1, Gia_ObjFaninId0p(
p, pObj1)) )
523 if ( Gia_ObjFanin0(pObj1)->Value <= Gia_ObjFanin1(pObj1)->Value )
525 if ( Gia_ObjFaninC1(pObj0) != Gia_ObjFaninC0(pObj1) || Gia_ObjFaninC0(pObj0) != Gia_ObjFaninC1(pObj1) ||
526 Vec_IntEntry(vMap0, Gia_ObjFaninId1p(
p, pObj0)) != Vec_IntEntry( vMap1, Gia_ObjFaninId0p(
p, pObj1)) ||
527 Vec_IntEntry(vMap0, Gia_ObjFaninId0p(
p, pObj0)) != Vec_IntEntry( vMap1, Gia_ObjFaninId1p(
p, pObj1)) )
532 if ( Gia_ObjFaninC1(pObj0) != Gia_ObjFaninC1(pObj1) || Gia_ObjFaninC0(pObj0) != Gia_ObjFaninC0(pObj1) ||
533 Vec_IntEntry(vMap0, Gia_ObjFaninId1p(
p, pObj0)) != Vec_IntEntry( vMap1, Gia_ObjFaninId1p(
p, pObj1)) ||
534 Vec_IntEntry(vMap0, Gia_ObjFaninId0p(
p, pObj0)) != Vec_IntEntry( vMap1, Gia_ObjFaninId0p(
p, pObj1)) )
556 assert( Vec_IntSize(vClass) > 1 );
557 iPo = Vec_IntEntry( vClass, 0 );
562 if ( Vec_IntSize(vVec0) != Vec_IntSize(vVec1) )
572 Vec_Int_t * vRoots = Vec_IntAlloc( 10000 );
573 Vec_Int_t * vVec0 = Vec_IntAlloc( 10000 );
574 Vec_Int_t * vVec1 = Vec_IntAlloc( 10000 );
575 Vec_Int_t * vMap0 = Vec_IntStart( Gia_ManObjNum(
p) );
576 Vec_Int_t * vMap1 = Vec_IntStart( Gia_ManObjNum(
p) );
578 int i, k, Entry, Counter = 0;
579 vEquivs2 = Vec_WecAlloc( 2 * Vec_WecSize(vEquivs) );
583 printf(
"Finished %8d outputs (out of %8d)...\r", Counter, Gia_ManPoNum(
p) ), fflush(stdout);
584 Counter += Vec_IntSize(vClass);
587 vClass2 = Vec_WecPushLevel( vEquivs2 );
589 vClass->pArray = NULL;
590 vClass->nSize = vClass->nCap = 0;
596 vClass2 = Vec_WecPushLevel( vEquivs2 );
597 Vec_IntPush( vClass2, Entry );
601 Vec_IntFree( vRoots );
602 Vec_IntFree( vVec0 );
603 Vec_IntFree( vVec1 );
604 Vec_IntFree( vMap0 );
605 Vec_IntFree( vMap1 );
612 Vec_IntClear( vNewClass );
613 if ( Vec_IntSize(vClass) <= 1 )
615 assert( Vec_IntSize(vClass) > 1 );
616 iPo = Vec_IntEntry( vClass, 0 );
622 Vec_IntWriteEntry( vClass, k++, iPo );
624 Vec_IntPush( vNewClass, iPo );
626 Vec_IntShrink( vClass, k );
631 Vec_Int_t * vRoots = Vec_IntAlloc( 10000 );
632 Vec_Int_t * vVec0 = Vec_IntAlloc( 10000 );
633 Vec_Int_t * vVec1 = Vec_IntAlloc( 10000 );
634 Vec_Int_t * vMap0 = Vec_IntStart( Gia_ManObjNum(
p) );
635 Vec_Int_t * vMap1 = Vec_IntStart( Gia_ManObjNum(
p) );
636 Vec_Int_t * vClass, * vClass2, * vNewClass;
638 vNewClass = Vec_IntAlloc( 100 );
639 vEquivs2 = Vec_WecAlloc( 2 * Vec_WecSize(vEquivs) );
643 printf(
"Finished %8d outputs (out of %8d)...\r", Counter, Gia_ManPoNum(
p) ), fflush(stdout);
646 Counter += Vec_IntSize(vClass);
648 vClass2 = Vec_WecPushLevel( vEquivs2 );
650 vClass->pArray = NULL;
651 vClass->nSize = vClass->nCap = 0;
653 if ( Vec_IntSize(vNewClass) == 0 )
655 vClass = Vec_WecPushLevel( vEquivs );
656 Vec_IntAppend( vClass, vNewClass );
658 Vec_IntFree( vNewClass );
659 Vec_IntFree( vRoots );
660 Vec_IntFree( vVec0 );
661 Vec_IntFree( vVec1 );
662 Vec_IntFree( vMap0 );
663 Vec_IntFree( vMap1 );
723 int nClasses, nUsedPos;
727 nClasses = Vec_WecCountNonTrivial( vEquivs, &nUsedPos );
728 printf(
"Reduced %d outputs to %d candidate classes (%d outputs are in %d non-trivial classes). ",
729 Gia_ManPoNum(pGia), Vec_WecSize(vEquivs), nUsedPos, nClasses );
730 Abc_PrintTime( 1,
"Time", Abc_Clock() - clk );
733 Vec_WecFree( vEquivs );
741 Vec_WecFree( vEquivs );
744 Vec_WecSortByFirstInt( vEquivs, 0 );
746 vRemains = Vec_WecCollectFirsts( vEquivs );
748 pPart =
Gia_ManDupCones( pGia, Vec_IntArray(vRemains), Vec_IntSize(vRemains), 0 );
749 Vec_IntFree( vRemains );
751 nClasses = Vec_WecCountNonTrivial( vEquivs, &nUsedPos );
752 printf(
"Reduced %d outputs to %d equivalence classes (%d outputs are in %d non-trivial classes). ",
753 Gia_ManPoNum(pGia), Vec_WecSize(vEquivs), nUsedPos, nClasses );
754 Abc_PrintTime( 1,
"Time", Abc_Clock() - clk );
757 printf(
"Nontrivial classes:\n" );
758 Vec_WecPrint( vEquivs, 1 );
763 *pvPosEquivs = Vec_WecConvertToVecPtr( vEquivs );
764 Vec_WecFree( vEquivs );
#define ABC_CALLOC(type, num)
#define ABC_NAMESPACE_IMPL_START
#define ABC_NAMESPACE_IMPL_END
typedefABC_NAMESPACE_IMPL_START struct Vec_Int_t_ Vec_Int_t
DECLARATIONS ///.
Vec_Int_t * Gia_Iso2ManCollectTies(Gia_Man_t *p)
FUNCTION DEFINITIONS ///.
struct Gia_Iso2Man_t_ Gia_Iso2Man_t
DECLARATIONS ///.
int Gia_Iso2ManCheckIsoPair(Gia_Man_t *p, Vec_Int_t *vVec0, Vec_Int_t *vVec1, Vec_Int_t *vMap0, Vec_Int_t *vMap1)
void Gia_Iso2ManPrepare(Gia_Man_t *p)
Gia_Man_t * Gia_ManIsoReduce2(Gia_Man_t *pGia, Vec_Ptr_t **pvPosEquivs, Vec_Ptr_t **pvPiPerms, int fEstimate, int fBetterQual, int fDualOut, int fVerbose, int fVeryVerbose)
void Gia_Iso2ManCollectOrder2_rec(Gia_Man_t *p, int Id, Vec_Int_t *vVec)
unsigned Gia_Iso2ManCone(Gia_Man_t *p, int Id, int Level)
int Gia_Iso2ManUniqify(Gia_Iso2Man_t *p)
void Gia_Iso2ManCollectOrder(Gia_Man_t *pGia, int *pPos, int nPos, Vec_Int_t *vRoots, Vec_Int_t *vVec, Vec_Int_t *vMap)
Vec_Wec_t * Gia_Iso2ManPerform(Gia_Man_t *pGia, int fVerbose)
Gia_Iso2Man_t * Gia_Iso2ManStart(Gia_Man_t *pGia)
Vec_Wec_t * Gia_Iso2ManDerivePoClasses(Gia_Man_t *pGia)
void Gia_Iso2ManPropagate(Gia_Man_t *p)
void Gia_Iso2ManUpdate(Gia_Iso2Man_t *p, int Level)
unsigned Gia_Iso2ManCone_rec(Gia_Man_t *p, int Id, int Level)
void Gia_Iso2ManPrint(Gia_Iso2Man_t *p, abctime Time, int fVerbose)
void Gia_Iso2ManCheckIsoClassOne(Gia_Man_t *p, Vec_Int_t *vClass, Vec_Int_t *vRoots, Vec_Int_t *vVec0, Vec_Int_t *vVec1, Vec_Int_t *vMap0, Vec_Int_t *vMap1, Vec_Int_t *vNewClass)
int Gia_ObjCompareByValue2(Gia_Obj_t **pp1, Gia_Obj_t **pp2)
Vec_Wec_t * Gia_Iso2ManCheckIsoClassesSkip(Gia_Man_t *p, Vec_Wec_t *vEquivs)
void Gia_Iso2ManCollectOrder_rec(Gia_Man_t *p, int Id, Vec_Int_t *vRoots, Vec_Int_t *vVec, Vec_Int_t *vMap)
Vec_Wec_t * Gia_Iso2ManCheckIsoClasses(Gia_Man_t *p, Vec_Wec_t *vEquivs)
void Gia_Iso2ManStop(Gia_Iso2Man_t *p)
Vec_Int_t * Gia_Iso2ManCollectOrder2(Gia_Man_t *pGia, int *pPos, int nPos)
int Gia_Iso2ManCheckIsoClassOneSkip(Gia_Man_t *p, Vec_Int_t *vClass, Vec_Int_t *vRoots, Vec_Int_t *vVec0, Vec_Int_t *vVec1, Vec_Int_t *vMap0, Vec_Int_t *vMap1)
Gia_Man_t * Gia_ManDup(Gia_Man_t *p)
#define Gia_ManForEachPo(p, pObj, i)
#define Gia_ManForEachCand(p, pObj, i)
struct Gia_Obj_t_ Gia_Obj_t
struct Gia_Man_t_ Gia_Man_t
#define Gia_ManForEachObj1(p, pObj, i)
#define Gia_ManForEachObjVec(vVec, p, pObj, i)
Gia_Man_t * Gia_ManDupCones(Gia_Man_t *p, int *pPos, int nPos, int fTrimPis)
void Gia_ManIncrementTravId(Gia_Man_t *p)
#define Gia_ManForEachObj(p, pObj, i)
MACRO DEFINITIONS ///.
#define Gia_ManForEachRiRo(p, pObjRi, pObjRo, i)
void Extra_PrintBinary(FILE *pFile, unsigned Sign[], int nBits)
#define Vec_IntForEachEntry(vVec, Entry, i)
MACRO DEFINITIONS ///.
#define Vec_IntForEachEntryTwo(vVec1, vVec2, Entry1, Entry2, i)
#define Vec_IntForEachEntryStart(vVec, Entry, i, Start)
typedefABC_NAMESPACE_HEADER_START struct Vec_Ptr_t_ Vec_Ptr_t
INCLUDES ///.
#define Vec_PtrForEachEntry(Type, vVec, pEntry, i)
MACRO DEFINITIONS ///.
#define Vec_WecForEachLevel(vGlob, vVec, i)
MACRO DEFINITIONS ///.
typedefABC_NAMESPACE_HEADER_START struct Vec_Wec_t_ Vec_Wec_t
INCLUDES ///.