EtwpFillPerfectHashTable
INT64 __fastcall EtwpFillPerfectHashTable(_WORD *a1, UINT16 a2, CHAR a3, UINT16 a4, INT64 a5, UINT16 *a6){
__int64 v6;
int v7;
INT64 v10;
__int64 v11;
unsigned __int16 v12;
unsigned __int16 v13;
__int16 v14;
UINT16 v15;
unsigned __int16 v16;
unsigned int v17;
unsigned __int16 v18;
unsigned __int16 i;
unsigned __int16 j;
__int64 v22;
unsigned __int16 v23;
__int64 v24;
unsigned __int16 v25;
unsigned __int16 v26;
LOWORD(v6) = 0;
v7 = a4;
v10 = a5;
*a6 = 0;
v11 = 128i64;
v12 = a4 + 1;
v26 = a4 + 1;
v13 = a4 + 1;
do
{
*(_WORD *)(v10 + 2) = -1;
*(_BYTE *)v10 = -1;
v10 += 4i64;
--v11;
}
while( v11 );
if( a2 )
{
v6 = a2;
do
{
v14 = *a1;
v15 = 0;
v16 = v7 & __ROR2__(*a1, a3);
while( *(_WORD *)(a5 + 4i64 * v16 + 2) != 0xFFFF )
{
v22 = v16;
if( *(_WORD *)(a5 + 4i64 * v16 + 2) == v14 )
break;
v16 = *(unsigned __int8 *)(a5 + 4i64 * v16);
++v15;
if( v16 == 255 )
{
v16 = v13++;
*(_BYTE *)(a5 + 4 * v22) = v16;
}
if( v15 > *a6 )
*a6 = v15;
}
++a1;
*(_WORD *)(a5 + 4i64 * v16 + 2) = v14;
--v6;
}
while( v6 );
v12 = v26;
}
v17 = v7 + 1;
v18 = v13 - 1;
for( i = v6; v18 > v17 && i < (unsigned __int16)v7; ++i )
{
if( *(_BYTE *)(a5 + 4i64 * v18) == 0xFF )
{
do
{
if( *(_WORD *)(a5 + 4i64 * i + 2) == 0xFFFF )
break;
++i;
}
while( i < (unsigned __int16)v7 );
if( i >= (unsigned __int16)v7 )
break;
*(_WORD *)(a5 + 4i64 * i + 2) = *(_WORD *)(a5 + 4i64 * v18 + 2);
v23 = v6;
if( (unsigned __int16)v6 < v13 )
{
while( *(unsigned __int8 *)(a5 + 4i64 * v23) != v18 )
{
if( ++v23 >= v13 )
goto LABEL_30;
}
*(_BYTE *)(a5 + 4i64 * v23) = i;
LABEL_30:
LOWORD(v6) = 0;
}
*(_WORD *)(a5 + 4i64 * v18 + 2) = -1;
if( v18 == v13 - 1 )
--v13;
}
--v18;
}
for( j = v13 - 1; j > v17; ++v12 )
{
if( v12 >= j )
break;
do
{
if( *(_WORD *)(a5 + 4i64 * v12 + 2) == 0xFFFF )
break;
++v12;
}
while( v12 < j );
if( v12 >= j )
break;
v24 = j;
v25 = 0;
*(_WORD *)(a5 + 4i64 * v12 + 2) = *(_WORD *)(a5 + 4i64 * j + 2);
if( v13 )
{
while( *(unsigned __int8 *)(a5 + 4i64 * v25) != j )
{
if( ++v25 >= v13 )
goto LABEL_43;
}
*(_BYTE *)(a5 + 4i64 * v25) = v12;
}
LABEL_43:
--j;
*(_BYTE *)(a5 + 4i64 * v12) = *(_BYTE *)(a5 + 4 * v24);
--v13;
}
return v13;
}Referenced by:
EtwpCreatePerfectHashFunction