69 vCopy = Vec_IntAlloc( If_ManObjNum(pIfMan) );
71 Vec_IntPush( vCopy, 1 );
73 Vec_IntPush( vCopy, Gia_ManAppendCi(pNew) );
77 int iLit0 = Abc_LitNotCond( Vec_IntEntry(vCopy, If_ObjFanin0(pIfObj)->Id), If_ObjFaninC0(pIfObj) );
78 int iLit1 = Abc_LitNotCond( Vec_IntEntry(vCopy, If_ObjFanin1(pIfObj)->Id), If_ObjFaninC1(pIfObj) );
79 Vec_IntPush( vCopy, Gia_ManAppendAnd(pNew, iLit0, iLit1) );
84 int iLit0 = Abc_LitNotCond( Vec_IntEntry(vCopy, If_ObjFanin0(pIfObj)->Id), If_ObjFaninC0(pIfObj) );
85 Vec_IntPush( vCopy, Gia_ManAppendCo(pNew, iLit0) );
87 assert( Vec_IntSize(vCopy) == If_ManObjNum(pIfMan) );
93 Abc_PrintTime( 1,
"Computing switching activity", Abc_Clock() - clk );
112 assert( Abc_NtkIsStrash(pNtk) );
129 printf(
"The AIG-node delay is not set. Assuming unit-delay.\n" );
132 for ( c = 0; c < Abc_NtkCiNum(pNtk); c++ )
134 for ( c = 0; c < Abc_NtkCoNum(pNtk); c++ )
142 for ( c = 0; c < Abc_NtkPiNum(pNtk); c++ )
148 if ( pIfMan == NULL )
172 pNtkNew = Abc_NtkFromIf( pIfMan, pNtk );
173 if ( pNtkNew == NULL )
190 printf(
"Abc_NtkIf: The network check has failed.\n" );
217 assert( Abc_NtkIsStrash(pNtk) );
221 pIfMan->
pName = Abc_UtilStrsav( Abc_NtkName(pNtk) );
224 if ( 1.0 * Abc_NtkObjNum(pNtk) * pIfMan->
nObjBytes / (1<<30) > 1.0 )
225 printf(
"Warning: The mapper will allocate %.1f GB for to represent the subject graph with %d AIG nodes.\n",
226 1.0 * Abc_NtkObjNum(pNtk) * pIfMan->
nObjBytes / (1<<30), Abc_NtkObjNum(pNtk) );
247 Extra_ProgressBarUpdate( pProgress, i,
"Initial" );
250 If_NotCond( Abc_ObjIfCopy(Abc_ObjFanin0(pNode)), Abc_ObjFaninC0(pNode) ),
251 If_NotCond( Abc_ObjIfCopy(Abc_ObjFanin1(pNode)), Abc_ObjFaninC1(pNode) ) );
253 if ( Abc_AigNodeIsChoice( pNode ) )
257 assert( If_ObjId(Abc_ObjIfCopy(pNode)) > If_ObjId(Abc_ObjIfCopy(Abc_ObjEquiv(pNode))) );
258 for ( pPrev = pNode, pEquiv = Abc_ObjEquiv(pPrev); pEquiv; pPrev = pEquiv, pEquiv = Abc_ObjEquiv(pPrev) )
259 If_ObjSetChoice( Abc_ObjIfCopy(pPrev), Abc_ObjIfCopy(pEquiv) );
265 Vec_PtrFree( vNodes );
288 pNode = (
Abc_Obj_t *)Vec_PtrEntry(vDrivers, Id+2);
289 Vec_IntWriteEntry( vMapIn, Abc_ObjId(Abc_ObjFanin0(pNode)), Id );
290 pNode = (
Abc_Obj_t *)Vec_PtrEntry(vDrivers, Id+4);
291 Vec_IntWriteEntry( vMapOut, Abc_ObjId(Abc_ObjFanin0(pNode)), Id );
296 return Vec_IntEntry( vMapIn, Abc_ObjId(Abc_ObjFanin0(pNode)) );
301 return Vec_IntEntry( vMapOut, Abc_ObjId(Abc_ObjFanin0(pNode)) );
335 If_ObjSetCopy( If_ManCi(pIfMan, i), pNode->
pCopy );
338 vCover = Vec_IntAlloc( 1 << 16 );
342 Extra_ProgressBarUpdate( pProgress, i,
"Final" );
343 pNodeNew =
Abc_NodeFromIf_rec( pNtkNew, pIfMan, If_ObjFanin0(If_ManCo(pIfMan, i)), vCover );
344 pNodeNew = Abc_ObjNotCond( pNodeNew, If_ObjFaninC0(If_ManCo(pIfMan, i)) );
348 Vec_IntFree( vCover );
351 pNodeNew = (
Abc_Obj_t *)If_ObjCopy( If_ManConst1(pIfMan) );
352 if ( Abc_ObjFanoutNum(pNodeNew) == 0 && !Abc_ObjIsNone(pNodeNew) )
364 printf(
"Added %d buffers/inverters to decouple the CO drivers.\n", nDupGates );
366 printf(
"Duplicated %d gates to decouple the CO drivers.\n", nDupGates );
384 assert( Vec_IntSize(vAig) > 0 );
385 assert( Vec_IntEntryLast(vAig) < 2 );
386 if ( Vec_IntSize(vAig) == 1 )
389 return Hop_NotCond( Hop_ManConst0(pMan), Vec_IntEntry(vAig, 0) );
391 if ( Vec_IntSize(vAig) == 2 )
393 assert( Vec_IntEntry(vAig, 0) == 0 );
395 return Hop_NotCond(
Hop_IthVar(pMan, 0), Vec_IntEntry(vAig, 1) );
399 int i, iVar0, iVar1, iLit0, iLit1;
400 Hop_Obj_t * piLit0, * piLit1, * piLit = NULL;
401 assert( Vec_IntSize(vAig) & 1 );
404 iVar0 = Abc_Lit2Var( iLit0 );
405 iVar1 = Abc_Lit2Var( iLit1 );
406 piLit0 = Hop_NotCond( iVar0 < nLeaves ?
Hop_IthVar(pMan, iVar0) : (
Hop_Obj_t *)Vec_PtrEntry((
Vec_Ptr_t *)vAig, iVar0 - nLeaves), Abc_LitIsCompl(iLit0) );
407 piLit1 = Hop_NotCond( iVar1 < nLeaves ?
Hop_IthVar(pMan, iVar1) : (
Hop_Obj_t *)Vec_PtrEntry((
Vec_Ptr_t *)vAig, iVar1 - nLeaves), Abc_LitIsCompl(iLit1) );
408 piLit =
Hop_And( pMan, piLit0, piLit1 );
410 Vec_PtrWriteEntry( (
Vec_Ptr_t *)vAig, Abc_Lit2Var(i), piLit );
412 assert( i == Vec_IntSize(vAig) - 1 );
413 piLit = Hop_NotCond( piLit, Vec_IntEntry(vAig, i) );
414 Vec_IntClear( vAig );
442 word * pTruth = If_CutTruthW(pIfMan, pCutBest);
459 unsigned delayProfile = pCutBest->
decDelay;
462 unsigned char decompArray[92];
479 unsigned char bytes_check = decompArray[0];
480 assert( bytes_check <= 92 );
483 unsigned char i, j, k, num_fanins, num_words, num_bytes;
489 assert( decompArray[1] <= 6 );
491 for ( i = 0; i < decompArray[1]; ++i )
493 if ( i < decompArray[1] - 1 )
495 pNewNodes[i] = Abc_NtkCreateNode( pNtkNew );
499 pNewNodes[i] = pNodeTop;
501 num_fanins = decompArray[byte_p++];
503 for ( j = 0; j < num_fanins; ++j )
505 fanin = (int)decompArray[byte_p++];
506 if ( fanin < If_CutLeaveNum(pCutBest) )
508 pFanin = (
Abc_Obj_t *)If_ObjCopy( If_CutLeaf(pIfMan, pCutBest, fanin) );
512 assert( fanin - If_CutLeaveNum(pCutBest) < i );
513 pFanin = pNewNodes[fanin - If_CutLeaveNum(pCutBest)];
516 level = Abc_MaxInt( level, Abc_ObjLevel(pFanin) );
519 pNewNodes[i]->
Level = level + (int)(Abc_ObjFaninNum(pNewNodes[i]) > 0);
523 num_words = ( num_fanins <= 6 ) ? 1 : ( 1 << ( num_fanins - 6 ) );
524 num_bytes = ( num_fanins <= 3 ) ? 1 : ( 1 << ( Abc_MinInt( (
int)num_fanins, 6 ) - 3 ) );
525 for ( j = 0; j < num_words; ++j )
528 for ( k = 0; k < num_bytes; ++k )
530 tt[j] |= ( (
word)(decompArray[byte_p++]) ) << ( k << 3 );
535 assert( num_fanins != 1 );
536 if ( num_fanins == 2 )
540 while ( num_bytes < 4 )
542 tt[0] |= tt[0] << ( num_bytes << 3 );
551 assert( byte_p == decompArray[0] );
572 pNodeNew = (
Abc_Obj_t *)If_ObjCopy( pIfObj );
577 pCutBest = If_ObjCutBest( pIfObj );
585 If_ObjSetCopy( pIfObj, pNodeNew );
589 pNodeNew = Abc_NtkCreateNode( pNtkNew );
619 pNodeNew->
pData = Kit_TruthToBdd( (DdManager *)pNtkNew->
pManFunc, If_CutTruth(pIfMan, pCutBest), If_CutLeaveNum(pCutBest), 0 ); Cudd_Ref((DdNode *)pNodeNew->
pData);
626 pNodeNew->
pData = Kit_TruthToBdd( (DdManager *)pNtkNew->
pManFunc, If_CutTruth(pIfMan, pCutBest), If_CutLeaveNum(pCutBest), 1 ); Cudd_Ref((DdNode *)pNodeNew->
pData);
632 int RetValue =
Kit_TruthIsop( If_CutTruth(pIfMan, pCutBest), If_CutLeaveNum(pCutBest), vCover, 1 );
633 assert( RetValue == 0 || RetValue == 1 );
635 if ( Vec_IntSize(vCover) == 0 || (Vec_IntSize(vCover) == 1 && Vec_IntEntry(vCover,0) == 0) )
666 word * pTruth = If_CutTruthW(pIfMan, pCutBest);
668 for ( i = 0; i < (int)pCutBest->
nLeaves; i++ )
669 if ( If_CutLeafBit(pCutBest, i) )
670 Abc_TtFlip( pTruth, Abc_TtWordNum(pCutBest->
nLeaves), i );
683 If_ObjSetCopy( pIfObj, pNodeNew );
703 pCut = If_ObjCutBest(pIfObj);
705 if ( If_CutData(pCut) )
711 gFunc =
Hop_And( pHopMan, Hop_NotCond(gFunc0, pIfObj->
fCompl0), Hop_NotCond(gFunc1, pIfObj->
fCompl1) );
712 assert( If_CutData(pCut) == NULL );
713 If_CutSetData( pCut, gFunc );
715 Vec_PtrPush( vVisited, pCut );
737 pCut = If_ObjCutBest(pIfObj);
739 if ( If_CutData(pCut) )
742 Vec_PtrPush( vVisited, pCut );
744 If_CutSetData( pCut, (
void *)1 );
746 if ( If_ObjIsCi(pIfObj) )
749 for ( pTemp = pIfObj; pTemp; pTemp = pTemp->
pEquiv )
752 if ( gFunc0 == (
void *)1 )
755 if ( gFunc1 == (
void *)1 )
758 gFunc =
Hop_And( pHopMan, Hop_NotCond(gFunc0, pTemp->
fCompl0), Hop_NotCond(gFunc1, pTemp->
fCompl1) );
760 gFunc = Hop_Not(gFunc);
761 If_CutSetData( pCut, gFunc );
785 pCut = If_ObjCutBest(pIfObj);
789 If_CutSetData( If_ObjCutBest(pLeaf),
Hop_IthVar(pHopMan, i) );
791 Vec_PtrClear( pIfMan->
vTemp );
793 if ( gFunc == (
void *)1 )
795 printf(
"Abc_NodeIfToHop(): Computing local AIG has failed.\n" );
800 If_CutSetData( If_ObjCutBest(pLeaf), NULL );
802 If_CutSetData( pCut, NULL );
820 float Flow0 = Abc_Int2Float((
int)(ABC_PTRINT_T)(*ppNode0)->pCopy);
821 float Flow1 = Abc_Int2Float((
int)(ABC_PTRINT_T)(*ppNode1)->pCopy);
842 if ( !Abc_ObjIsNode(pNode) )
844 assert( Abc_ObjIsNode( pNode ) );
846 if ( Abc_NodeIsTravIdCurrent( pNode ) )
849 Abc_NodeSetTravIdCurrent( pNode );
854 Vec_PtrPush( vNodes, pNode );
882 pFanin0 = Abc_ObjFanin0(pNode);
883 pFanin1 = Abc_ObjFanin1(pNode);
884 Flow0 = Abc_Int2Float((
int)(ABC_PTRINT_T)pFanin0->
pCopy)/Abc_ObjFanoutNum(pFanin0);
885 Flow1 = Abc_Int2Float((
int)(ABC_PTRINT_T)pFanin1->
pCopy)/Abc_ObjFanoutNum(pFanin1);
886 pNode->
pCopy = (
Abc_Obj_t *)(ABC_PTRINT_T)Abc_Float2Int(Flow0 + Flow1+(
float)1.0);
889 vCos = Vec_PtrAlloc( Abc_NtkCoNum(pNtk) );
894 Vec_PtrPush( vCos, pNode );
898 qsort( (
Abc_Obj_t **)Vec_PtrArray(vCos), (
size_t)Abc_NtkCoNum(pNtk),
901 pFanin0 = (
Abc_Obj_t *)Vec_PtrEntry(vCos, 0);
902 pFanin1 = (
Abc_Obj_t *)Vec_PtrEntryLast(vCos);
903 assert( Abc_Int2Float((
int)(ABC_PTRINT_T)pFanin0->
pCopy) >= Abc_Int2Float((
int)(ABC_PTRINT_T)pFanin1->
pCopy) );
906 Abc_NtkIncrementTravId( pNtk );
907 vNodes = Vec_PtrAlloc( 100 );
933 if ( pDriver == NULL )
940 pIfObj = If_Regular( (
If_Obj_t *)Abc_ObjFanin0(pDriver)->pCopy );
941 if ( If_ObjIsAnd(pIfObj) )
943 pIfObj = If_Regular( (
If_Obj_t *)Abc_ObjFanin1(pDriver)->pCopy );
944 if ( If_ObjIsAnd(pIfObj) )
947 pIfObj = If_Regular( (
If_Obj_t *)Abc_ObjRegular(pNodeC)->pCopy );
948 if ( If_ObjIsAnd(pIfObj) )
959 *ppNode1 = Abc_ObjRegular(pNodeC);
960 *ppNode2 = Abc_ObjRegular(pNodeT);
Abc_Obj_t * Abc_NodeFromIf_rec(Abc_Ntk_t *pNtkNew, If_Man_t *pIfMan, If_Obj_t *pIfObj, Vec_Int_t *vCover)
Hop_Obj_t * Abc_NodeBuildFromMini(Hop_Man_t *pMan, If_Man_t *p, If_Cut_t *pCut, int fUseDsd)
Hop_Obj_t * Abc_NodeBuildFromMiniInt(Hop_Man_t *pMan, Vec_Int_t *vAig, int nLeaves)
ABC_NAMESPACE_IMPL_START If_Man_t * Abc_NtkToIf(Abc_Ntk_t *pNtk, If_Par_t *pPars)
DECLARATIONS ///.
void Abc_NtkFindGoodOrder_rec(Abc_Obj_t *pNode, Vec_Ptr_t *vNodes)
Hop_Obj_t * Abc_NodeIfToHop2_rec(Hop_Man_t *pHopMan, If_Man_t *pIfMan, If_Obj_t *pIfObj, Vec_Ptr_t *vVisited)
void If_ManComputeSwitching(If_Man_t *pIfMan)
FUNCTION DEFINITIONS ///.
void Abc_NtkBidecResyn(Abc_Ntk_t *pNtk, int fVerbose)
Hop_Obj_t * Abc_NodeIfToHop_rec(Hop_Man_t *pHopMan, If_Man_t *pIfMan, If_Obj_t *pIfObj, Vec_Ptr_t *vVisited)
void Abc_NtkBddReorder(Abc_Ntk_t *pNtk, int fVerbose)
DECLARATIONS ///.
void Abc_NtkMarkMux(Abc_Obj_t *pDriver, Abc_Obj_t **ppNode1, Abc_Obj_t **ppNode2)
void Abc_DecRecordToHop(Abc_Ntk_t *pNtkNew, If_Man_t *pIfMan, If_Cut_t *pCutBest, If_Obj_t *pIfObj, Vec_Int_t *vCover, Abc_Obj_t *pNodeTop)
Abc_Ntk_t * Abc_NtkIf(Abc_Ntk_t *pNtk, If_Par_t *pPars)
int Abc_ObjCompareFlow(Abc_Obj_t **ppNode0, Abc_Obj_t **ppNode1)
Hop_Obj_t * Abc_RecToHop3(Hop_Man_t *pMan, If_Man_t *pIfMan, If_Cut_t *pCut, If_Obj_t *pIfObj)
ABC_DLL int Abc_NtkSweep(Abc_Ntk_t *pNtk, int fVerbose)
struct Abc_Obj_t_ Abc_Obj_t
#define Abc_NtkForEachCo(pNtk, pCo, i)
ABC_DLL Vec_Ptr_t * Abc_AigDfs(Abc_Ntk_t *pNtk, int fCollectAll, int fCollectCos)
ABC_DLL void Abc_ObjAddFanin(Abc_Obj_t *pObj, Abc_Obj_t *pFanin)
ABC_DLL void Abc_NtkDeleteObj(Abc_Obj_t *pObj)
ABC_DLL Abc_Obj_t * Abc_NtkCreateNodeConst1(Abc_Ntk_t *pNtk)
#define Abc_AigForEachAnd(pNtk, pNode, i)
ABC_DLL int Abc_NtkCheck(Abc_Ntk_t *pNtk)
FUNCTION DEFINITIONS ///.
ABC_DLL Abc_Obj_t * Abc_NtkCreateNodeConst0(Abc_Ntk_t *pNtk)
ABC_DLL void Abc_SopComplement(char *pSop)
ABC_DLL void Abc_NodeComplement(Abc_Obj_t *pNode)
struct Abc_Ntk_t_ Abc_Ntk_t
ABC_DLL char * Abc_SopCreateAnd(Mem_Flex_t *pMan, int nVars, int *pfCompl)
ABC_DLL float * Abc_NtkGetCoRequiredFloats(Abc_Ntk_t *pNtk)
ABC_DLL Abc_Obj_t * Abc_ExactBuildNode(word *pTruth, int nVars, int *pArrTimeProfile, Abc_Obj_t **pFanins, Abc_Ntk_t *pNtk)
ABC_DLL int Abc_NtkLogicMakeSimpleCos(Abc_Ntk_t *pNtk, int fDuplicate)
ABC_DLL Abc_Ntk_t * Abc_NtkStrash(Abc_Ntk_t *pNtk, int fAllNodes, int fCleanup, int fRecord)
ABC_DLL char * Abc_SopCreateFromIsop(Mem_Flex_t *pMan, int nVars, Vec_Int_t *vCover)
#define Abc_NtkForEachCi(pNtk, pCi, i)
ABC_DLL void Abc_NtkDelete(Abc_Ntk_t *pNtk)
ABC_DLL void Abc_NtkCleanCopy(Abc_Ntk_t *pNtk)
ABC_DLL int Abc_NodeIsMuxType(Abc_Obj_t *pNode)
ABC_DLL int Abc_ObjLevelNew(Abc_Obj_t *pObj)
ABC_DLL Abc_Obj_t * Abc_NodeRecognizeMux(Abc_Obj_t *pNode, Abc_Obj_t **ppNodeT, Abc_Obj_t **ppNodeE)
ABC_DLL Abc_Ntk_t * Abc_NtkStartFrom(Abc_Ntk_t *pNtk, Abc_NtkType_t Type, Abc_NtkFunc_t Func)
ABC_DLL Abc_Ntk_t * Abc_NtkDup(Abc_Ntk_t *pNtk)
ABC_DLL Abc_Obj_t * Abc_AigConst1(Abc_Ntk_t *pNtk)
ABC_DLL float * Abc_NtkGetCiArrivalFloats(Abc_Ntk_t *pNtk)
#define ABC_INFINITY
MACRO DEFINITIONS ///.
#define ABC_NAMESPACE_IMPL_START
#define ABC_NAMESPACE_IMPL_END
int acd_decompose(word *pTruth, unsigned nVars, int lutSize, unsigned *pdelay, unsigned char *decomposition)
int acdXX_decompose(word *pTruth, unsigned lutSize, unsigned nVars, unsigned char *decomposition)
int acd2_decompose(word *pTruth, unsigned nVars, int lutSize, unsigned *pdelay, unsigned char *decomposition)
ABC_DLL char * Abc_FrameReadFlag(char *pFlag)
ABC_DLL void * Abc_FrameReadLibGen()
ABC_DLL void * Abc_FrameReadManDsd()
typedefABC_NAMESPACE_IMPL_START struct Vec_Int_t_ Vec_Int_t
DECLARATIONS ///.
ABC_NAMESPACE_IMPL_START typedef char ProgressBar
void Gia_ManStop(Gia_Man_t *p)
Gia_Man_t * Gia_ManStart(int nObjsMax)
FUNCTION DEFINITIONS ///.
struct Gia_Man_t_ Gia_Man_t
Vec_Int_t * Gia_ManComputeSwitchProbs(Gia_Man_t *pGia, int nFrames, int nPref, int fProbOne)
typedefABC_NAMESPACE_HEADER_START struct Hop_Man_t_ Hop_Man_t
INCLUDES ///.
Hop_Obj_t * Hop_IthVar(Hop_Man_t *p, int i)
FUNCTION DEFINITIONS ///.
Hop_Obj_t * Hop_And(Hop_Man_t *p, Hop_Obj_t *p0, Hop_Obj_t *p1)
struct Hop_Obj_t_ Hop_Obj_t
void If_ManCleanCutData(If_Man_t *p)
void If_ManCreateChoice(If_Man_t *p, If_Obj_t *pRepr)
If_Obj_t * If_ManCreateCo(If_Man_t *p, If_Obj_t *pDriver)
struct If_Par_t_ If_Par_t
int If_DsdManLutSize(If_DsdMan_t *p)
struct If_Cut_t_ If_Cut_t
#define If_ManForEachCo(p, pObj, i)
#define If_CutForEachLeafReverse(p, pCut, pLeaf, i)
void If_CutRotatePins(If_Man_t *p, If_Cut_t *pCut)
int If_DsdManVarNum(If_DsdMan_t *p)
int If_CutDsdBalanceEval(If_Man_t *p, If_Cut_t *pCut, Vec_Int_t *vAig)
void If_DsdManAllocIsops(If_DsdMan_t *p, int nLutSize)
struct If_DsdMan_t_ If_DsdMan_t
int * If_CutArrTimeProfile(If_Man_t *p, If_Cut_t *pCut)
If_Obj_t * If_ManCreateAnd(If_Man_t *p, If_Obj_t *pFan0, If_Obj_t *pFan1)
#define If_CutForEachLeaf(p, pCut, pLeaf, i)
void If_ManStop(If_Man_t *p)
int If_ManPerformMapping(If_Man_t *p)
#define If_ManForEachCi(p, pObj, i)
#define IF_MAX_FUNC_LUTSIZE
struct If_Man_t_ If_Man_t
BASIC TYPES ///.
#define If_ManForEachNode(p, pObj, i)
If_Man_t * If_ManStart(If_Par_t *pPars)
FUNCTION DEFINITIONS ///.
If_Obj_t * If_ManCreateCi(If_Man_t *p)
int If_CutSopBalanceEval(If_Man_t *p, If_Cut_t *pCut, Vec_Int_t *vAig)
struct If_Obj_t_ If_Obj_t
void If_ManCleanNodeCopy(If_Man_t *p)
DECLARATIONS ///.
Hop_Obj_t * Kit_TruthToHop(Hop_Man_t *pMan, unsigned *pTruth, int nVars, Vec_Int_t *vMemory)
unsigned __int64 word
DECLARATIONS ///.
int Kit_TruthIsop(unsigned *puTruth, int nVars, Vec_Int_t *vMemory, int fTryBoth)
struct Mio_LibraryStruct_t_ Mio_Library_t
float Mio_LibraryReadDelayAigNode(Mio_Library_t *pLib)
struct Mem_Flex_t_ Mem_Flex_t
#define Vec_IntForEachEntryDouble(vVec, Entry1, Entry2, i)
typedefABC_NAMESPACE_HEADER_START struct Vec_Ptr_t_ Vec_Ptr_t
INCLUDES ///.
#define Vec_PtrForEachEntry(Type, vVec, pEntry, i)
MACRO DEFINITIONS ///.