B_TREE<_SM_PAGE_KEY,SMKM_STORE_MGR::SMKM_FRONTEND_ENTRY,4096,B_TREE_DUMMY_NODE_POOL,B_TREE_KEY_COMPARATOR<_SM_PAGE_KEY>>::BTreeSplitChild
char *__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>>::BTreeSplitChild(
_QWORD *a1,
__int64 a2){
int v2;
__int64 v4;
void *v5;
__int64 v6;
char *v7;
char *v8;
__int64 v9;
UINT8 *v10;
int v11;
UINT8 *v12;
UINT8 *v13;
unsigned int v14;
__int64 v15;
int v16;
bool v17;
_BYTE *v19;
_BYTE *v20;
__int128 v21;
char *v23;
v2 = *(_DWORD *)(a2 + 24);
DWORD1(v21) = 0;
v4 = *(_QWORD *)a2 + 16i64 * (unsigned int)(v2 - 1);
v5 = 0i64;
v23 = 0i64;
v6 = *(_QWORD *)v4;
v7 = B_TREE<_SM_PAGE_KEY,SMKM_STORE_MGR::SMKM_FRONTEND_ENTRY,4096,B_TREE_DUMMY_NODE_POOL,B_TREE_KEY_COMPARATOR<_SM_PAGE_KEY>>::BTreeNewNode(
(__int64)a1,
*(_BYTE *)(*(_QWORD *)v4 + 3i64),
*(_BYTE *)(*(_QWORD *)v4 + 2i64));
v8 = v7;
if( !v7 )
return v23;
DWORD1(v21) = 0;
*((_QWORD *)&v21 + 1) = v7;
v9 = (*(_DWORD *)v6 >> 1) & 0x7FFF;
if( *(_BYTE *)(v6 + 3) )
{
v10 = (UINT8 *)(v6 + 16 + 8 * v9);
if( (*(_DWORD *)v6 & 1) != 0 && (unsigned __int64)(v10 + 8) < *(_QWORD *)(v4 + 8) )
{
v10 += 8;
LODWORD(v9) = v9 + 1;
}
v11 = *(_DWORD *)v10;
v12 = 0i64;
}
else
{
v10 = 0i64;
v12 = (UINT8 *)(v6 + 16 * (((*(_DWORD *)v6 >> 1) & 0x7FFF) + 1i64));
v11 = *(_DWORD *)v12;
}
LODWORD(v21) = v11;
v13 = (UINT8 *)(v8 + 16);
v14 = (unsigned __int16)*(_DWORD *)v6 - (_DWORD)v9;
if( *(_BYTE *)(v6 + 3) )
{
*((_QWORD *)v8 + 1) = *(_QWORD *)(v6 + 8);
memmove(v13, v10, 8i64 * v14);
}
else
{
memmove(v13, v12 + 16, 16i64 * --v14);
*((_QWORD *)v8 + 1) = *((_QWORD *)v12 + 1);
}
*(_WORD *)v8 = v14;
if( *a1 == v6 )
{
v19 = B_TREE<_SM_PAGE_KEY,SMKM_STORE_MGR::SMKM_FRONTEND_ENTRY,4096,B_TREE_DUMMY_NODE_POOL,B_TREE_KEY_COMPARATOR<_SM_PAGE_KEY>>::BTreeNewNode(
v15,
0,
*(_BYTE *)(v6 + 2) + 1);
v5 = v19;
if( v19 )
{
*((_QWORD *)v19 + 1) = v6;
v20 = v19 + 16;
*((_OWORD *)v19 + 1) = v21;
*(_WORD *)v19 = 1;
*a1 = v19;
memmove((UINT8 *)(v4 + 16), (UINT8 *)v4, 16i64 * (unsigned int)(*(_DWORD *)(a2 + 28) - 1));
*(_QWORD *)v4 = v5;
*(_QWORD *)(v4 + 8) = v20;
++*(_DWORD *)(a2 + 24);
goto LABEL_9;
}
}
else
{
--*(_DWORD *)(a2 + 24);
v16 = B_TREE<_SM_PAGE_KEY,SMKM_STORE_MGR::SMKM_FRONTEND_ENTRY,4096,B_TREE_DUMMY_NODE_POOL,B_TREE_KEY_COMPARATOR<_SM_PAGE_KEY>>::BTreeInsertEx(
(int **)a1,
a2,
&v21);
++*(_DWORD *)(a2 + 24);
if( v16 >= 0 )
{
LABEL_9:
v17 = *(_BYTE *)(v6 + 3) == 0;
*(_WORD *)v6 = v9;
if( !v17 )
*(_QWORD *)(v6 + 8) = v8;
v23 = v8;
v8 = 0i64;
v5 = 0i64;
}
}
if( v8 )
ExFreePoolWithTag(v8, 0);
if( v5 )
ExFreePoolWithTag(v5, 0);
return v23;
}
Referenced by:
No references.