48static unsigned Abc_SclHashString(
char * pName,
int TableSize )
50 static int s_Primes[10] = { 1291, 1699, 2357, 4177, 5147, 5647, 6343, 7103, 7873, 8147 };
52 for ( i = 0; pName[i] !=
'\0'; i++ )
53 Key += s_Primes[i%10]*pName[i]*pName[i];
54 return Key % TableSize;
59 for ( i = Abc_SclHashString(pName,
p->nBins); i < p->nBins; i = (i + 1) %
p->nBins )
60 if (
p->pBins[i] == -1 || !
strcmp(pName, SC_LibCell(
p,
p->pBins[i])->pName) )
70 p->nBins = Abc_PrimeCudd( 5 * SC_LibCellNum(
p) );
75 if ( *pPlace != -1 && pCell->
pName )
76 printf(
"There are two standard cells with the same name (%s).\n", pCell->
pName );
84 return pPlace ? *pPlace : -1;
115static inline int Abc_SclIsChar(
char c )
117 return (c >=
'a' && c <=
'z') || (c >=
'A' && c <=
'Z') || c ==
'_';
119static inline int Abc_SclIsName(
char c )
121 return Abc_SclIsChar(c) || (c >=
'0' && c <=
'9');
123static inline char * Abc_SclFindLimit(
char * pName )
125 assert( Abc_SclIsChar(*pName) );
126 while ( Abc_SclIsName(*pName) )
130static inline int Abc_SclAreEqual(
char * pBase,
char * pName,
char * pLimit )
132 return !
strncmp( pBase, pName, pLimit - pName );
137 char * pTemp, * pLimit;
138 for ( pTemp = pForm; *pTemp; )
140 if ( !Abc_SclIsChar(*pTemp) )
142 *pBuffer++ = *pTemp++;
145 pLimit = Abc_SclFindLimit( pTemp );
147 if ( Abc_SclAreEqual( pPin->
pName, pTemp, pLimit ) )
149 *pBuffer++ =
'a' + i;
152 assert( i < pCell->n_inputs );
157static inline void Abc_SclTimingUpdate(
SC_Cell * pCell,
SC_Timing *
p,
char * Buffer )
161 if (
p->related_pin && !
strcmp(
p->related_pin, pPin->
pName) )
164 sprintf( Buffer,
"%c",
'a'+i );
165 p->related_pin = Abc_UtilStrsav( Buffer );
168static inline void Abc_SclTimingsUpdate(
SC_Cell * pCell,
SC_Timings *
p,
char * Buffer )
172 Abc_SclTimingUpdate( pCell, pTemp, Buffer );
174static inline void Abc_SclPinUpdate(
SC_Cell * pCell,
SC_Pin *
p,
char * Buffer )
181 Abc_SclTimingsUpdate( pCell, pTemp, Buffer );
186 sprintf( Buffer,
"%c",
'a'+k );
187 pTemp->
pName = Abc_UtilStrsav( Buffer );
193 p->func_text = Abc_UtilStrsav( Buffer );
200 unsigned char nDigits = (
unsigned char)Abc_Base10Log( nClasses );
208 sprintf( Buffer,
"g%0*d_%0*d", nDigits, i, nDigits2, k );
209 pCell->
pName = Abc_UtilStrsav( Buffer );
212 Abc_SclPinUpdate( pCell, pPin, Buffer );
217 sprintf( Buffer,
"%c", (
char)(
'a'+n) );
218 pPin->
pName = Abc_UtilStrsav( Buffer );
224 pPin->
pName = Abc_UtilStrsav( Buffer );
232 printf(
"Renaming library \"%s\" into \"%s%d\".\n",
p->pName,
"lib", SC_LibCellNum(
p) );
234 sprintf( Buffer,
"lib%d", SC_LibCellNum(
p) );
235 p->pName = Abc_UtilStrsav( Buffer );
250 if ( (*pp1)->n_inputs < (*pp2)->n_inputs )
252 if ( (*pp1)->n_inputs > (*pp2)->n_inputs )
258 if ( SC_CellPinCapAve(*pp1) < SC_CellPinCapAve(*pp2) )
260 if ( SC_CellPinCapAve(*pp1) > SC_CellPinCapAve(*pp2) )
262 return strcmp( (*pp1)->pName, (*pp2)->pName );
267 SC_Cell * pCell, * pRepr = NULL;
269 assert( Vec_PtrSize(&
p->vCellClasses) == 0 );
276 Vec_WrdEqual(SC_CellFunc(pCell), SC_CellFunc(pRepr)) )
278 if ( k == Vec_PtrSize(&
p->vCellClasses) )
280 Vec_PtrPush( &
p->vCellClasses, pCell );
289 qsort( (
void *)Vec_PtrArray(&
p->vCellClasses), Vec_PtrSize(&
p->vCellClasses),
sizeof(
void *), (
int(*)(
const void *,
const void *))Abc_SclCompareCells );
291 vList = Vec_PtrAlloc( 100 );
294 Vec_PtrClear( vList );
296 Vec_PtrPush( vList, pCell );
297 qsort( (
void *)Vec_PtrArray(vList), (
size_t)Vec_PtrSize(vList),
sizeof(
void *), (
int(*)(
const void *,
const void *))Abc_SclCompareCells );
299 pRepr = (
SC_Cell *)Vec_PtrEntry( vList, 0 );
301 pRepr->
pRepr = pRepr;
302 pRepr->
pAve = (
SC_Cell *)Vec_PtrEntry( vList, Vec_PtrSize(vList)/2 );
304 pRepr->
nGates = Vec_PtrSize(vList);
310 pCell->
pRepr = pRepr;
311 pCell->
pAve = (
SC_Cell *)Vec_PtrEntry( vList, Vec_PtrSize(vList)/2 );
313 pCell->
nGates = Vec_PtrSize(vList);
316 Vec_PtrWriteEntry( &
p->vCellClasses, k, pRepr );
318 Vec_PtrFree( vList );
338 if ( pCell->
n_inputs == 1 && Vec_WrdEntry(&SC_CellPin(pCell, 1)->vFunc, 0) == Truth )
341 return pCell ? pCell->
pRepr : NULL;
348 if ( SC_CellPinCapAve(pRes) > CinMin )
351 return p->pRepr->pPrev;
370 assert( pWLoadUsed != NULL );
374 if ( i == Vec_PtrSize(&
p->vWireLoads) )
376 Abc_Print( -1,
"Cannot find wire load model \"%s\".\n", pWLoadUsed );
384 char * pWLoadUsed = NULL;
386 if (
p->default_wire_load_sel &&
strlen(
p->default_wire_load_sel) )
392 if ( i == Vec_PtrSize(&
p->vWireLoadSels) )
394 Abc_Print( -1,
"Cannot find wire load selection model \"%s\".\n",
p->default_wire_load_sel );
397 for ( i = 0; i < Vec_FltSize(&pWLS->
vAreaFrom); i++)
398 if ( Area >= Vec_FltEntry(&pWLS->
vAreaFrom, i) && Area < Vec_FltEntry(&pWLS->
vAreaTo, i) )
403 if ( i == Vec_FltSize(&pWLS->
vAreaFrom) )
406 else if (
p->default_wire_load &&
strlen(
p->default_wire_load) )
407 pWLoadUsed =
p->default_wire_load;
435 pTime = Scl_CellPinTime( pCell, 0 );
460 pTime = Scl_CellPinTime( pCell, 0 );
464 return Vec_FltEntry( vIndex, Vec_FltSize(vIndex)/3 );
482 SC_Pair SlewIn = { Slew, Slew };
483 SC_Pair ArrOut0 = { 0.0, 0.0 };
484 SC_Pair ArrOut1 = { 0.0, 0.0 };
485 SC_Pair ArrOut2 = { 0.0, 0.0 };
486 SC_Pair SlewOut = { 0.0, 0.0 };
487 SC_Timing * pTime = Scl_CellPinTime( pCell, iPin );
489 if ( vIndex == NULL )
492 if ( Vec_FltSize(vIndex) == 1 )
500 Load1.
rise = Load1.
fall = Vec_FltEntry( vIndex, 0 );
501 Load2.
rise = Load2.
fall = Vec_FltEntry( vIndex, Vec_FltSize(vIndex) - 2 );
503 Scl_LibPinArrival( pTime, &ArrIn, &SlewIn, &Load0, &ArrOut0, &SlewOut );
504 Scl_LibPinArrival( pTime, &ArrIn, &SlewIn, &Load1, &ArrOut1, &SlewOut );
505 Scl_LibPinArrival( pTime, &ArrIn, &SlewIn, &Load2, &ArrOut2, &SlewOut );
510 *pLD = (ArrOut2.
rise - ArrOut1.
rise) / ((Load2.
rise - Load1.
rise) / SC_CellPinCap(pCell, iPin));
518 float LD, PD, ld, pd;
520 LD = PD = ld = pd = 0;
527 *pLD = LD / Abc_MaxInt(1, pCell->
n_inputs);
528 *pPD = PD / Abc_MaxInt(1, pCell->
n_inputs);
534 float LD, PD, ld, pd;
536 LD = PD = ld = pd = 0;
543 *pLD = LD / Abc_MaxInt(1, Count);
544 *pPD = PD / Abc_MaxInt(1, Count);
549 float LD, PD, ld, pd;
551 LD = PD = ld = pd = 0;
558 *pLD = LD / Abc_MaxInt(1, Count);
559 *pPD = PD / Abc_MaxInt(1, Count);
563 float LD = 0, PD = 0;
565 return 0.01 * LD * Gain + PD;
581 return Delay / Abc_MaxInt(1, Count);
595 return Area / Abc_MaxInt(1, Count);
612 char Buffer[1000], * pName;
615 int CellId, nSkipped = 0;
616 sprintf( FileName,
"%s.skip",
p->pName );
617 pFile = fopen( FileName,
"rb" );
620 while ( fgets( Buffer, 999, pFile ) != NULL )
622 pName =
strtok( Buffer,
"\r\n\t " );
628 printf(
"Cannot find cell \"%s\" in the library \"%s\".\n", pName,
p->pName );
631 pCell = SC_LibCell(
p, CellId );
636 printf(
"Marked %d cells for skipping in the library \"%s\".\n", nSkipped,
p->pName );
642 int i, j, k, nLength = 0;
644 float LD = 0, PD = 0;
645 assert( Vec_PtrSize(&
p->vCellClasses) > 0 );
646 printf(
"Library \"%s\" ",
p->pName );
647 printf(
"has %d cells in %d classes. ",
648 Vec_PtrSize(&
p->vCells), Vec_PtrSize(&
p->vCellClasses) );
650 printf(
"Delay estimate is based on slew %.2f ps and gain %.2f.", Slew, Gain );
656 nLength = Abc_MaxInt( nLength,
strlen(pRepr->
pName) );
660 if ( fInvOnly && pRepr->
n_inputs != 1 )
666 printf(
"Class%4d : ", k );
668 printf(
"Ins =%2d ", pRepr->
n_inputs );
669 printf(
"Outs =%2d ", pRepr->
n_outputs );
682 printf(
" %3d ", j+1 );
683 printf(
"%s", pCell->
fSkip ?
"s" :
" " );
685 printf(
"%-*s ", nLength, pCell->
pName );
687 printf(
"A =%8.2f ", pCell->
area );
688 printf(
"L =%8.2f ", pCell->
leakage );
693 printf(
"D =%6.1f ps ", 0.01 * Gain * LD + PD );
694 printf(
"LD =%6.1f ps ", LD );
695 printf(
"PD =%6.1f ps ", PD );
696 printf(
"C =%5.1f ff ", SC_CellPinCapAve(pCell) );
697 printf(
"Cm =%5.0f ff ", SC_CellPin(pCell, pCell->
n_inputs)->max_out_cap );
698 printf(
"Sm =%5.1f ps ", SC_CellPin(pCell, pCell->
n_inputs)->max_out_slew );
741 int i, k;
float Entry;
743 Vec_FltWriteEntry( &
p->vIndex0, i, Time * Entry );
745 Vec_FltWriteEntry( &
p->vIndex1, i, Load * Entry );
748 Vec_FltWriteEntry( vArray, i, Time * Entry );
758 float Time = 1.0 * pow(10.0, 12 -
p->unit_time);
759 float Load =
p->unit_cap_fst * pow(10.0, 15 -
p->unit_cap_snd);
760 if ( Time == 1 && Load == 1 )
764 p->unit_cap_snd = 15;
765 p->default_max_out_slew *= Time;
804 int i, j, k, Count = 2;
807 vStr = Vec_StrAlloc( 1000 );
808 Vec_StrPrintStr( vStr,
"GATE _const0_ 0.00 z=CONST0;\n" );
809 Vec_StrPrintStr( vStr,
"GATE _const1_ 0.00 z=CONST1;\n" );
817 Vec_StrPrintStr( vStr,
"GATE " );
819 Vec_StrPrintStr( vStr, Buffer );
820 Vec_StrPrintStr( vStr,
" " );
822 Vec_StrPrintStr( vStr, Buffer );
823 Vec_StrPrintStr( vStr,
" " );
824 Vec_StrPrintStr( vStr, pPinOut->
pName );
825 Vec_StrPrintStr( vStr,
"=" );
827 Vec_StrPrintStr( vStr,
";\n" );
830 Vec_StrPrintStr( vStr,
" PIN " );
832 Vec_StrPrintStr( vStr, Buffer );
833 sprintf( Buffer,
" UNKNOWN 1 999 1.00 0.00 1.00 0.00\n" );
834 Vec_StrPrintStr( vStr, Buffer );
839 Vec_StrPrintStr( vStr,
"\n.end\n" );
840 Vec_StrPush( vStr,
'\0' );
852 printf(
"Derived GENLIB library \"%s\" with %d gates.\n",
p->pName, SC_LibCellNum(
p) );
854 printf(
"Reading library has filed.\n" );
876 int i, j, k, Count = 2, nClassMax = 0;
882 if ( nGatesMin && nGatesMin >= nClassMax )
886 vStr = Vec_StrAlloc( 1000 );
887 Vec_StrPrintStr( vStr,
"GATE _const0_ 0.00 z=CONST0;\n" );
888 Vec_StrPrintStr( vStr,
"GATE _const1_ 0.00 z=CONST1;\n" );
905 printf(
"Cell %s cannot be used because delay of a pin is <= 0.\n", pRepr->
pName );
909 if ( k < pRepr->n_inputs )
912 if ( j < pRepr->n_outputs )
917 Vec_StrPrintStr( vStr,
"GATE " );
919 Vec_StrPrintStr( vStr, Buffer );
920 Vec_StrPrintStr( vStr,
" " );
923 Vec_StrPrintStr( vStr, Buffer );
924 Vec_StrPrintStr( vStr,
" " );
925 Vec_StrPrintStr( vStr, SC_CellPinName(pRepr, j) );
926 Vec_StrPrintStr( vStr,
"=" );
927 Vec_StrPrintStr( vStr, SC_CellPinOutFunc(pRepr, j-pRepr->
n_inputs) ? SC_CellPinOutFunc(pRepr, j-pRepr->
n_inputs) :
"?" );
928 Vec_StrPrintStr( vStr,
";\n" );
933 Vec_StrPrintStr( vStr,
" PIN " );
935 Vec_StrPrintStr( vStr, Buffer );
936 sprintf( Buffer,
" UNKNOWN 1 999 %7.2f 0.00 %7.2f 0.00\n", Delay, Delay );
937 Vec_StrPrintStr( vStr, Buffer );
954 Vec_StrPrintStr( vStr,
"GATE " );
956 Vec_StrPrintStr( vStr, Buffer );
957 Vec_StrPrintStr( vStr,
" " );
960 Vec_StrPrintStr( vStr, Buffer );
961 Vec_StrPrintStr( vStr,
" " );
962 Vec_StrPrintStr( vStr, SC_CellPinName(pRepr, pRepr->
n_inputs) );
963 Vec_StrPrintStr( vStr,
"=" );
964 Vec_StrPrintStr( vStr, SC_CellPinOutFunc(pRepr, 0) ? SC_CellPinOutFunc(pRepr, 0) :
"?" );
965 Vec_StrPrintStr( vStr,
";\n" );
970 Vec_StrPrintStr( vStr,
" PIN " );
972 Vec_StrPrintStr( vStr, Buffer );
973 sprintf( Buffer,
" UNKNOWN 1 999 %7.2f 0.00 %7.2f 0.00\n", Delay, Delay );
974 Vec_StrPrintStr( vStr, Buffer );
979 Vec_StrPrintStr( vStr,
"\n.end\n" );
980 Vec_StrPush( vStr,
'\0' );
984 *pnCellCount = Count;
993 int i, k, Count = 2, nClassMax = 0;
999 if ( nGatesMin && nGatesMin >= nClassMax )
1003 vStr = Vec_StrAlloc( 1000 );
1004 Vec_StrPrintStr( vStr,
"GATE _const0_ 0.00 z=CONST0;\n" );
1005 Vec_StrPrintStr( vStr,
"GATE _const1_ 0.00 z=CONST1;\n" );
1023 Vec_StrPrintStr( vStr,
"GATE " );
1025 Vec_StrPrintStr( vStr, Buffer );
1026 Vec_StrPrintStr( vStr,
" " );
1029 Vec_StrPrintStr( vStr, Buffer );
1030 Vec_StrPrintStr( vStr,
" " );
1031 Vec_StrPrintStr( vStr, SC_CellPinName(pRepr, pRepr->
n_inputs) );
1032 Vec_StrPrintStr( vStr,
"=" );
1033 Vec_StrPrintStr( vStr, SC_CellPinOutFunc(pRepr, 0) ? SC_CellPinOutFunc(pRepr, 0) :
"?" );
1034 Vec_StrPrintStr( vStr,
";\n" );
1039 Vec_StrPrintStr( vStr,
" PIN " );
1041 Vec_StrPrintStr( vStr, Buffer );
1042 sprintf( Buffer,
" UNKNOWN 1 999 %7.2f 0.00 %7.2f 0.00\n", Delay, Delay );
1043 Vec_StrPrintStr( vStr, Buffer );
1047 Vec_StrPrintStr( vStr,
"\n.end\n" );
1048 Vec_StrPush( vStr,
'\0' );
1052 *pnCellCount = Count;
1058 char FileName[1000];
1062 if ( pFileName == NULL )
1063 sprintf( FileName,
"%s_s%03d_g%03d_m%d.genlib",
p->pName, (
int)Slew, (
int)Gain, nGatesMin );
1065 sprintf( FileName,
"%s", pFileName );
1066 pFile = fopen( FileName,
"wb" );
1067 if ( pFile == NULL )
1069 printf(
"Cannot open file \"%s\" for writing.\n", FileName );
1073 fprintf( pFile,
"%s", Vec_StrArray(vStr) );
1074 Vec_StrFree( vStr );
1076 printf(
"Written GENLIB library with %d gates into file \"%s\".\n", nCellCount, FileName );
1090 Vec_StrFree( vStr );
1092 printf(
"Reading library has filed.\n" );
1093 else if ( fVerbose )
1094 printf(
"Derived GENLIB library \"%s\" with %d gates using slew %.2f ps and gain %.2f.\n",
p->pName, nCellCount, Slew, Gain );
1114 int RetValue, nGateCount = SC_LibCellNum(
p);
1119 vStr2 = Vec_StrDup( vStr );
1121 Vec_StrFree( vStr );
1122 Vec_StrFree( vStr2 );
1124 printf(
"Reading library has filed.\n" );
1125 else if ( Gain != 0 )
1126 printf(
"Derived GENLIB library \"%s\" with %d gates using slew %.2f ps and gain %.2f.\n",
p->pName, nGateCount, Slew, Gain );
#define ABC_FALLOC(type, num)
#define ABC_CONST(number)
PARAMETERS ///.
#define ABC_NAMESPACE_IMPL_START
#define ABC_NAMESPACE_IMPL_END
struct Vec_Str_t_ Vec_Str_t
unsigned __int64 word
DECLARATIONS ///.
void Kit_DsdPrintFromTruth(unsigned *pTruth, int nVars)
int Mio_UpdateGenlib2(Vec_Str_t *vStr, Vec_Str_t *vStr2, char *pFileName, int fVerbose)
struct Mio_LibraryStruct_t_ Mio_Library_t
int Mio_GateReadProfile(Mio_Gate_t *pGate)
Mio_Gate_t * Mio_LibraryReadGateByName(Mio_Library_t *pLib, char *pName, char *pOutName)
Mio_Library_t * Mio_LibraryRead(char *FileName, char *pBuffer, char *ExcludeFile, int nFaninLimit, int fVerbose)
struct Mio_GateStruct_t_ Mio_Gate_t
void Abc_SclShortFormula(SC_Cell *pCell, char *pForm, char *pBuffer)
Mio_Library_t * Abc_SclDeriveGenlibSimple(void *pScl)
void Abc_SclPrintCells(SC_Lib *p, float SlewInit, float Gain, int fInvOnly, int fShort)
void Abc_SclComputeParametersClassPin(SC_Lib *p, SC_Cell *pRepr, int iPin, float Slew, float *pLD, float *pPD)
int Abc_SclLibClassNum(SC_Lib *pLib)
int Abc_SclClassCellNum(SC_Cell *pClass)
Vec_Str_t * Abc_SclProduceGenlibStrSimple(SC_Lib *p)
SC_WireLoad * Abc_SclFindWireLoadModel(SC_Lib *p, float Area)
Vec_Str_t * Abc_SclProduceGenlibStr(SC_Lib *p, float Slew, float Gain, int nGatesMin, int fUseAll, int *pnCellCount)
void Abc_SclMarkSkippedCells(SC_Lib *p)
SC_WireLoad * Abc_SclFetchWireLoadModel(SC_Lib *p, char *pWLoadUsed)
float Abc_SclComputeDelayCellPin(SC_Lib *p, SC_Cell *pCell, int iPin, float Slew, float Gain)
void Abc_SclShortNames(SC_Lib *p)
void Abc_SclConvertLeakageIntoArea(SC_Lib *p, float A, float B)
SC_Cell * Abc_SclFindInvertor(SC_Lib *p, int fFindBuff)
void Abc_SclLibNormalize(SC_Lib *p)
int * Abc_SclHashLookup(SC_Lib *p, char *pName)
int Abc_SclComputeParametersCell(SC_Lib *p, SC_Cell *pCell, float Slew, float *pLD, float *pPD)
void Abc_SclComputeParametersClass(SC_Lib *p, SC_Cell *pRepr, float Slew, float *pLD, float *pPD)
float Abc_SclComputeDelayClassPin(SC_Lib *p, SC_Cell *pRepr, int iPin, float Slew, float Gain)
SC_Cell * Abc_SclFindSmallestGate(SC_Cell *p, float CinMin)
void Abc_SclHashCells(SC_Lib *p)
void Abc_SclLinkCells(SC_Lib *p)
Mio_Library_t * Abc_SclDeriveGenlib(void *pScl, void *pMio, float SlewInit, float Gain, int nGatesMin, int fVerbose)
int Abc_SclComputeParametersPin(SC_Lib *p, SC_Cell *pCell, int iPin, float Slew, float *pLD, float *pPD)
void Abc_SclLibNormalizeSurface(SC_Surface *p, float Time, float Load)
float Abc_SclComputeAverageSlew(SC_Lib *p)
void Abc_SclInstallGenlib(void *pScl, float SlewInit, float Gain, int fUseAll, int nGatesMin)
float Abc_SclComputeAreaClass(SC_Cell *pRepr)
void Abc_SclDumpGenlib(char *pFileName, SC_Lib *p, float SlewInit, float Gain, int nGatesMin)
int Abc_SclHasDelayInfo(void *pScl)
Vec_Str_t * Abc_SclProduceGenlibStrProfile(SC_Lib *p, Mio_Library_t *pLib, float Slew, float Gain, int nGatesMin, int *pnCellCount)
int Abc_SclCellFind(SC_Lib *p, char *pName)
#define SC_CellForEachPin(p, pPin, i)
#define SC_CellForEachPinIn(p, pPin, i)
#define SC_PinForEachRTiming(p, pRTime, i)
struct SC_Timing_ SC_Timing
#define SC_LibForEachCell(p, pCell, i)
int Abc_SclClassCellNum(SC_Cell *pClass)
#define SC_CellForEachPinOut(p, pPin, i)
struct SC_WireLoadSel_ SC_WireLoadSel
#define SC_RingForEachCell(pRing, pCell, i)
#define SC_LibForEachWireLoadSel(p, pWLS, i)
struct SC_Timings_ SC_Timings
#define SC_LibForEachWireLoad(p, pWL, i)
struct SC_Surface_ SC_Surface
struct SC_WireLoad_ SC_WireLoad
STRUCTURE DEFINITIONS ///.
#define SC_LibForEachCellClass(p, pCell, i)
#define Vec_FltForEachEntry(vVec, Entry, i)
MACRO DEFINITIONS ///.
typedefABC_NAMESPACE_HEADER_START struct Vec_Flt_t_ Vec_Flt_t
INCLUDES ///.
#define Vec_PtrForEachEntryStart(Type, vVec, pEntry, i, Start)
typedefABC_NAMESPACE_HEADER_START struct Vec_Ptr_t_ Vec_Ptr_t
INCLUDES ///.
#define Vec_PtrForEachEntry(Type, vVec, pEntry, i)
MACRO DEFINITIONS ///.