B_TREE<_SM_PAGE_KEY,SMKM_STORE_MGR::SMKM_FRONTEND_ENTRY,4096,B_TREE_DUMMY_NODE_POOL,B_TREE_KEY_COMPARATOR<_SM_PAGE_KEY>>::BTreeMergeNodes
__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>>::BTreeMergeNodes(
__int64 a1,
__int64 a2,
unsigned __int64 a3){
unsigned __int64 v3;
void **v4;
_DWORD *v7;
unsigned __int64 v8;
__int64 v9;
unsigned __int64 v10;
UINT64 v11;
UINT8 *v12;
__int64 result;
__int64 v14;
v3 = a3;
v4 = (void **)(*(_QWORD *)a2 + 16i64 * (unsigned int)(*(_DWORD *)(a2 + 24) - 1));
v7 = *(v4 - 1);
if( (a3 & 1) != 0 )
v3 = (unsigned __int64)*v4;
v8 = a3 & 0xFFFFFFFFFFFFFFFEui64;
if( (a3 & 1) == 0 )
v8 = (unsigned __int64)*v4;
v9 = (unsigned __int16)*(_DWORD *)v8;
v10 = a3 & 0xFFFFFFFFFFFFFFFEui64;
if( (a3 & 1) == 0 )
v10 = a3;
if( v8 == v10 )
{
v7 -= 4;
*(v4 - 1) = v7;
}
if( *(_BYTE *)(v8 + 3) )
{
*(_QWORD *)(v8 + 8) = *(_QWORD *)(v3 + 8);
v11 = 8i64 * (unsigned __int16)*(_DWORD *)v3;
v12 = (UINT8 *)(v8 + 8 * (v9 + 2));
}
else
{
v14 = 2 * v9;
LODWORD(v9) = v9 + 1;
*(_DWORD *)(v8 + 8 * v14 + 16) = *v7;
*(_QWORD *)(v8 + 8 * v14 + 24) = *(_QWORD *)(v3 + 8);
v11 = 16i64 * (unsigned __int16)*(_DWORD *)v3;
v12 = (UINT8 *)(v8 + 16 * ((unsigned int)v9 + 1i64));
}
memmove(v12, (UINT8 *)(v3 + 16), v11);
*(_WORD *)v8 = v9 + *(_WORD *)v3;
ExFreePoolWithTag((PVOID)v3, 0);
--*(_DWORD *)(a2 + 24);
result = B_TREE<_SM_PAGE_KEY,SMKM_STORE_MGR::SMKM_FRONTEND_ENTRY,4096,B_TREE_DUMMY_NODE_POOL,B_TREE_KEY_COMPARATOR<_SM_PAGE_KEY>>::BTreeDeleteEx(
(_QWORD *)a1,
a2);
++*(_DWORD *)(a2 + 24);
return result;
}
Referenced by:
No references.