B_TREE<_SM_PAGE_KEY,SMKM_STORE_MGR::SMKM_FRONTEND_ENTRY,4096,B_TREE_DUMMY_NODE_POOL,B_TREE_KEY_COMPARATOR<_SM_PAGE_KEY>>::BTreeRedistribute
__int64 __fastcall B_TREE<_SM_PAGE_KEY,SMKM_STORE_MGR::SMKM_FRONTEND_ENTRY,4096,B_TREE_DUMMY_NODE_POOL,B_TREE_KEY_COMPARATOR<_SM_PAGE_KEY>>::BTreeRedistribute(
_DWORD *a1,
__int64 a2){
__int64 v2;
__int64 v3;
_DWORD *v4;
_DWORD *v5;
unsigned int v6;
__int64 *v7;
bool v8;
__int64 *v9;
__int64 *v10;
__int64 v11;
__int64 v12;
_DWORD *v13;
_DWORD *v14;
unsigned int v15;
unsigned int v16;
unsigned int v17;
unsigned int v18;
__int64 v19;
unsigned int v20;
_DWORD *v21;
char v22;
__int64 v23;
unsigned int v24;
unsigned __int64 v25;
unsigned int v26;
UINT8 *v27;
unsigned int v28;
UINT8 *v29;
UINT64 v30;
int v32;
unsigned int v33;
__int64 v34;
__int64 v35;
__int64 v36;
__int64 v37;
__int64 v38;
_DWORD *v39;
_DWORD *v40;
__int64 v41;
v38 = (__int64)a1;
v2 = 1i64;
v3 = *(_QWORD *)a2 + 16i64 * (unsigned int)(*(_DWORD *)(a2 + 24) - 1);
v4 = *(_DWORD **)(v3 - 16);
v5 = *(_DWORD **)(v3 - 8);
v6 = (unsigned __int8)-(*(_BYTE *)(*(_QWORD *)v3 + 3i64) != 0) + 255;
if( v5 == &v4[4 * (unsigned __int16)*v4 + 4] )
{
v38 = *(_QWORD *)v3;
v5 -= 4;
v7 = (__int64 *)(v4 + 2);
v8 = v5 <= v4 + 4;
v9 = (__int64 *)&v39;
v10 = (__int64 *)(v5 - 2);
if( v8 )
v10 = v7;
}
else
{
v39 = *(_DWORD **)v3;
v10 = (__int64 *)(v5 + 2);
v9 = &v38;
v2 = 0i64;
}
v11 = *v10;
*v9 = *v10;
v12 = v11 | v2;
v13 = (_DWORD *)v38;
v14 = v39;
v15 = (unsigned __int16)*(_DWORD *)v38;
v16 = (unsigned __int16)*v39;
v17 = v16 + v15;
if( v16 + v15 >= v6 && v17 < 2 * v6 - 1 )
{
v18 = v17 >> 1;
if( v16 > v15 )
{
v19 = (__int64)v39;
v20 = v16 - v18;
v21 = v39;
v14 = (_DWORD *)v38;
}
else
{
v19 = v38;
v20 = v18 - v16;
v21 = v39;
}
v22 = *(_BYTE *)(v19 + 3);
v40 = v21;
v23 = v15 < v16 ? v18 : 0;
v24 = 0;
v41 = v23;
if( v16 <= v15 )
v24 = v16;
v37 = v24;
v25 = (-(__int64)(v22 != 0) & 0xFFFFFFFFFFFFFFF8ui64) + 16;
v26 = v22 != 0 ? 8 : 16;
v27 = (UINT8 *)v14 + v25 * v24 + 16;
LODWORD(v39) = v26;
v28 = v20 * v26;
v29 = (UINT8 *)(v19 + v25 * v23 + 16);
LODWORD(v38) = v20 * v26;
if( (_DWORD *)v19 == v21 )
{
memmove(&v27[v28], v27, v26 * (unsigned __int16)*v14);
v22 = *(_BYTE *)(v19 + 3);
v28 = v38;
v26 = (unsigned int)v39;
v21 = v40;
v23 = v41;
}
else
{
LODWORD(v38) = v20 * v26;
}
if( v22 )
{
v30 = v28;
}
else
{
v32 = *v5;
v33 = v20 - 1;
if( (_DWORD *)v19 == v21 )
{
v34 = 2i64 * v33;
v14[4 * v33 + 4] = v32;
v35 = *((_QWORD *)v14 + 1);
}
else
{
v34 = 2 * v37;
v27 += v26;
v14[4 * v37 + 4] = v32;
v35 = *(_QWORD *)(v19 + 8);
}
*(_QWORD *)&v14[2 * v34 + 6] = v35;
if( (_DWORD *)v19 == v21 )
{
v36 = 2 * v23;
v29 += v26;
*v5 = *(_DWORD *)(v19 + 8 * v36 + 16);
*((_QWORD *)v14 + 1) = *(_QWORD *)(v19 + 8 * v36 + 24);
}
else
{
v33 = v20 - 1;
*v5 = *(_DWORD *)(v19 + 16i64 * (v20 - 1) + 16);
*(_QWORD *)(v19 + 8) = *(_QWORD *)(v19 + 16i64 * (v20 - 1) + 24);
}
v30 = v26 * v33;
}
memmove(v27, v29, v30);
*(_WORD *)v14 += v20;
*(_WORD *)v19 -= v20;
if( (_DWORD *)v19 == v13 )
memmove(v29, &v29[(unsigned int)v38], (unsigned int)v39 * (unsigned __int16)*(_DWORD *)v19);
if( *((_BYTE *)v13 + 3) )
*v5 = v13[4];
}
return v12;
}
Referenced by:
No references.