ST_STORE::StCompactionFindEmptiest
__int64 __fastcall ST_STORE::StCompactionFindEmptiest(
__int64 a1,
char *a2,
unsigned int a3,
unsigned int a4){
unsigned __int64 v5;
char *v8;
unsigned int v9;
__int64 v10;
unsigned __int16 *v11;
unsigned int v12;
unsigned int v13;
UINT8 *v14;
UINT8 *v15;
bool v16;
unsigned int v17;
__int16 v19;
unsigned int v20;
v20 = a3;
v5 = a3;
v19 = 0x1FFF;
v8 = &a2[8 * a3];
if( a2 > v8 )
v5 = 0i64;
if( v5 )
memset64(a2, (unsigned __int64)&v19, v5);
v9 = 0;
LODWORD(v10) = -1;
LABEL_6:
while( 1 )
{
v10 = (unsigned int)(v10 + 1);
if( (_DWORD)v10 == *(_DWORD *)(a1 + 788) )
return v9;
v11 = (unsigned __int16 *)(*(_QWORD *)(a1 + 1032) + 2 * v10);
v12 = *v11;
if( (v12 & 0x1FFF) != 0 && (v12 & 0x1FFF) <= a4 )
{
v13 = v12 >> 13;
if( *(_BYTE *)(a1 + 776) )
v13 = 0;
if( (_DWORD)v10 != *(_DWORD *)(a1 + 16 * (v13 + 78i64)) )
{
v14 = (UINT8 *)a2;
if( a2 < v8 )
{
while( 1 )
{
v15 = v14 + 8;
if( (unsigned __int16)(v12 & 0x1FFF) < (unsigned __int16)(**(_WORD **)v14 & 0x1FFF) )
break;
v14 += 8;
if( v15 >= (UINT8 *)v8 )
goto LABEL_6;
}
memmove(v14 + 8, v14, v8 - (char *)v14 - 8);
v16 = v9 < v20;
v17 = v9 + 1;
*(_QWORD *)v14 = v11;
if( !v16 )
v17 = v9;
v9 = v17;
if( v17 >= v20 )
a4 = (**((_WORD **)v8 - 1) & 0x1FFF) - 1;
}
}
}
}
}
Referenced by:
No references.