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.