long,ST_STORE::_ST_HASH_ENTRY,4096,NP_CONTEXT,ST_STORE::ST_HASH_ENTRY_COMPARATOR>::BTreeRedistribute
unsigned __int64 __fastcall B_TREE::_ST_HASH_ENTRY,4096,NP_CONTEXT,ST_STORE::ST_HASH_ENTRY_COMPARATOR>::BTreeRedistribute(
__int64 a1,
__int64 a2){
__int64 v2;
__int64 v3;
__int64 v4;
__int64 v5;
_DWORD *v6;
unsigned int v7;
void **v8;
void **p_Size;
unsigned __int64 v10;
_DWORD *v11;
unsigned __int64 v12;
_DWORD *v13;
unsigned int v14;
unsigned int v15;
unsigned int v16;
unsigned int v17;
__int64 v18;
unsigned int v19;
_DWORD *v20;
char v21;
__int64 v22;
unsigned int v23;
__int64 v24;
unsigned int v25;
__int64 v26;
__int64 v27;
unsigned int v28;
char *v29;
char *v30;
char v31;
size_t v32;
struct NP_CONTEXT::NP_CTX *v34;
int v35;
unsigned int v36;
__int64 v37;
__int64 v38;
__int64 v39;
__int64 v40;
__int64 v41;
_DWORD *v42;
__int64 Size;
_DWORD *v44;
VOID *v45;
Size = 0i64;
v42 = 0i64;
v2 = 1i64;
v3 = *(_QWORD *)a2 + 16i64 * (unsigned int)(*(_DWORD *)(a2 + 24) - 1);
v4 = 16i64;
v5 = *(_QWORD *)(v3 - 16);
v6 = *(_DWORD **)(v3 - 8);
v7 = *(_BYTE *)(*(_QWORD *)v3 + 3i64) != 0 ? 1020 : 255;
if( v6 == (_DWORD *)(v5 + 16 * ((unsigned __int16)*(_DWORD *)v5 + 1i64)) )
{
v6 -= 4;
v42 = *(_DWORD **)v3;
p_Size = (void **)&Size;
v8 = (void **)(v6 - 2);
if( (unsigned __int64)v6 <= v5 + 16 )
v8 = (void **)(v5 + 8);
}
else
{
Size = *(_QWORD *)v3;
v8 = (void **)(v6 + 2);
p_Size = (void **)&v42;
v2 = 0i64;
}
if( **(_DWORD **)((a1 + 16) & -(__int64)(a1 != 0)) == -1 || *(_BYTE *)(v5 + 2) != 2 )
{
v10 = (unsigned __int64)*v8;
*p_Size = *v8;
}
else
{
v34 = (struct NP_CONTEXT::NP_CTX *)((a1 + 16) & -(__int64)(a1 != 0));
if( **(_DWORD **)v34 == -1 )
v10 = (unsigned __int64)*v8;
else
v10 = (unsigned __int64)NP_CONTEXT::NpLeafRefInternal(v34, v8, 0);
*p_Size = (void *)v10;
if( !v10 )
return 0i64;
}
v11 = v42;
v12 = v10 | v2;
v13 = (_DWORD *)Size;
v14 = (unsigned __int16)*v42;
v15 = (unsigned __int16)*(_DWORD *)Size;
v16 = v15 + v14;
if( v15 + v14 >= v7 && v16 < 2 * v7 - 1 )
{
v17 = v16 >> 1;
if( v15 <= v14 )
{
v18 = (__int64)v42;
v19 = v17 - v15;
v20 = (_DWORD *)Size;
}
else
{
v18 = Size;
v19 = v15 - v17;
v20 = (_DWORD *)Size;
v13 = v42;
}
v21 = *(_BYTE *)(v18 + 3);
v44 = v20;
LOBYTE(v42) = v21;
v22 = v14 < v15 ? v17 : 0;
v23 = 0;
v40 = v22;
if( v15 <= v14 )
v23 = v15;
v24 = v23;
v41 = v23;
if( v21 )
{
v25 = 4;
v4 = 4i64;
v26 = 4i64;
}
else
{
v25 = 16;
v26 = 16i64;
}
v27 = v26 * v23;
v28 = v25 * v19;
v29 = (char *)v13 + v27 + 16;
v30 = (char *)(v18 + v22 * v4 + 16);
v45 = v29;
LODWORD(Size) = v25 * v19;
if( (_DWORD *)v18 == v20 )
{
memmove(&v29[v28], v29, v25 * (unsigned __int16)*v13);
v31 = *(_BYTE *)(v18 + 3);
v28 = Size;
v29 = (char *)v45;
v20 = v44;
v22 = v40;
v24 = v41;
}
else
{
v31 = (char)v42;
LODWORD(Size) = v25 * v19;
}
if( v31 )
{
v32 = v28;
}
else
{
v35 = *v6;
v36 = v19 - 1;
if( (_DWORD *)v18 == v20 )
{
v37 = 2i64 * v36;
v13[4 * v36 + 4] = v35;
v38 = *((_QWORD *)v13 + 1);
}
else
{
v37 = 2 * v24;
v29 += v25;
v13[2 * v37 + 4] = v35;
v38 = *(_QWORD *)(v18 + 8);
}
*(_QWORD *)&v13[2 * v37 + 6] = v38;
if( (_DWORD *)v18 == v20 )
{
v39 = 2 * v22;
v30 += v25;
*v6 = *(_DWORD *)(v18 + 8 * v39 + 16);
*((_QWORD *)v13 + 1) = *(_QWORD *)(v18 + 8 * v39 + 24);
}
else
{
v36 = v19 - 1;
*v6 = *(_DWORD *)(v18 + 16i64 * (v19 - 1) + 16);
*(_QWORD *)(v18 + 8) = *(_QWORD *)(v18 + 16i64 * (v19 - 1) + 24);
}
v32 = v25 * v36;
}
memmove(v29, v30, v32);
*(_WORD *)v13 += v19;
*(_WORD *)v18 -= v19;
if( (_DWORD *)v18 == v11 )
memmove(v30, &v30[(unsigned int)Size], v25 * (unsigned __int16)*(_DWORD *)v18);
if( *((_BYTE *)v11 + 3) )
*v6 = v11[4];
}
return v12;
}
Referenced by:
No references.