long,ST_STORE::_ST_HASH_ENTRY,4096,NP_CONTEXT,ST_STORE::ST_HASH_ENTRY_COMPARATOR>::BTreeSplitChild
char *__fastcall B_TREE::_ST_HASH_ENTRY,4096,NP_CONTEXT,ST_STORE::ST_HASH_ENTRY_COMPARATOR>::BTreeSplitChild(
__int64 a1,
__int64 a2){
__int64 v3;
unsigned __int8 *v4;
__int64 v5;
char *v6;
char *v7;
__int64 v8;
UINT8 *v9;
int v10;
UINT8 *v11;
unsigned int v12;
_DWORD *v13;
bool v14;
__int64 v15;
_QWORD *v16;
int v17;
int v18;
char v19;
struct NP_CONTEXT::NP_CTX *v20;
__int64 v21;
char *v23;
struct NP_CONTEXT::NP_CTX *v24;
union _NP_LEAF_PTR *v25;
int v26;
char *v27;
__int128 v28;
char *v30;
v30 = 0i64;
v3 = *(_QWORD *)a2 + 16i64 * (unsigned int)(*(_DWORD *)(a2 + 24) - 1);
v4 = 0i64;
v5 = *(_QWORD *)v3;
v6 = B_TREE<_SM_PAGE_KEY,ST_STORE::_ST_PAGE_ENTRY,4096,NP_CONTEXT,B_TREE_KEY_COMPARATOR<_SM_PAGE_KEY>>::BTreeNewNode(
a1,
*(unsigned __int8 *)(*(_QWORD *)v3 + 3i64),
*(_BYTE *)(*(_QWORD *)v3 + 2i64));
v7 = v6;
if( !v6 )
return v30;
DWORD1(v28) = 0;
*((_QWORD *)&v28 + 1) = v6;
v8 = (*(_DWORD *)v5 >> 1) & 0x7FFF;
if( *(_BYTE *)(v5 + 3) )
{
v9 = (UINT8 *)(v5 + 16 + 4 * v8);
if( (*(_DWORD *)v5 & 1) != 0 && (unsigned __int64)(v9 + 4) < *(_QWORD *)(v3 + 8) )
{
v9 += 4;
LODWORD(v8) = v8 + 1;
}
v10 = *(_DWORD *)v9;
v11 = 0i64;
}
else
{
v9 = 0i64;
v11 = (UINT8 *)(v5 + 16 * (((*(_DWORD *)v5 >> 1) & 0x7FFF) + 1i64));
v10 = *(_DWORD *)v11;
}
LODWORD(v28) = v10;
v12 = (unsigned __int16)*(_DWORD *)v5 - (_DWORD)v8;
if( *(_BYTE *)(v5 + 3) )
{
v13 = *(_DWORD **)((a1 + 16) & -(__int64)(a1 != 0));
v14 = *v13 == -1;
if( *v13 == -1 )
v15 = *(_QWORD *)(v5 + 8);
else
v15 = 3358i64;
if( v14 )
*((_QWORD *)v7 + 1) = v15;
memmove((UINT8 *)v7 + 16, v9, 4i64 * v12);
}
else
{
memmove((UINT8 *)v7 + 16, v11 + 16, 16i64 * --v12);
*((_QWORD *)v7 + 1) = *((_QWORD *)v11 + 1);
}
*(_WORD *)v7 = v12;
if( *(_QWORD *)a1 == v5 )
{
v23 = B_TREE<_SM_PAGE_KEY,ST_STORE::_ST_PAGE_ENTRY,4096,NP_CONTEXT,B_TREE_KEY_COMPARATOR<_SM_PAGE_KEY>>::BTreeNewNode(
a1,
0i64,
*(_BYTE *)(v5 + 2) + 1);
v4 = (unsigned __int8 *)v23;
if( v23 )
{
v25 = (union _NP_LEAF_PTR *)(v23 + 8);
v26 = 1;
*((_QWORD *)v23 + 1) = v5;
v27 = v23 + 16;
*((_OWORD *)v23 + 1) = v28;
*(_WORD *)v23 = 1;
*(_QWORD *)a1 = v23;
if( *(_BYTE *)(v5 + 3) && **(_DWORD **)(a1 + 16) != -1 )
{
*(_DWORD *)v25 |= 1u;
NP_CONTEXT::NpGetResidentLeaf(v24, v25);
}
v16 = (_QWORD *)a2;
memmove((UINT8 *)(v3 + 16), (UINT8 *)v3, 16i64 * (unsigned int)(*(_DWORD *)(a2 + 28) - v26));
*(_QWORD *)v3 = v4;
*(_QWORD *)(v3 + 8) = v27;
v18 = ++*(_DWORD *)(a2 + 24);
goto LABEL_13;
}
}
else
{
v16 = (_QWORD *)a2;
--*(_DWORD *)(a2 + 24);
v17 = B_TREE::_ST_HASH_ENTRY,4096,NP_CONTEXT,ST_STORE::ST_HASH_ENTRY_COMPARATOR>::BTreeInsertEx(
(char **)a1,
a2,
&v28);
v18 = ++*(_DWORD *)(a2 + 24);
if( v17 >= 0 )
{
LABEL_13:
v19 = *(_BYTE *)(v5 + 3);
if( v19 )
{
v20 = (struct NP_CONTEXT::NP_CTX *)(2i64 * (unsigned int)(v18 - 2));
v21 = *(_QWORD *)(*v16 + 8i64 * (_QWORD)v20 + 8);
if( **(_DWORD **)(a1 + 16) != -1 )
{
*(_DWORD *)(v21 + 8) |= 1u;
NP_CONTEXT::NpGetResidentLeaf(v20, (union _NP_LEAF_PTR *)(v21 + 8));
v19 = *(_BYTE *)(v5 + 3);
}
}
*(_WORD *)v5 = v8;
if( v19 && **(_DWORD **)(a1 + 16) == -1 )
*(_QWORD *)(v5 + 8) = v7;
v30 = v7;
v7 = 0i64;
v4 = 0i64;
}
}
if( v7 )
B_TREE<_SM_PAGE_KEY,ST_STORE::_ST_PAGE_ENTRY,4096,NP_CONTEXT,B_TREE_KEY_COMPARATOR<_SM_PAGE_KEY>>::BTreeDeleteNode(
a1,
(unsigned __int8 *)v7);
if( v4 )
B_TREE<_SM_PAGE_KEY,ST_STORE::_ST_PAGE_ENTRY,4096,NP_CONTEXT,B_TREE_KEY_COMPARATOR<_SM_PAGE_KEY>>::BTreeDeleteNode(
a1,
v4);
return v30;
}
Referenced by:
No references.