long,ST_STORE::_ST_HASH_ENTRY,4096,NP_CONTEXT,ST_STORE::ST_HASH_ENTRY_COMPARATOR>::BTreeInsertEx
__int64 __fastcall B_TREE::_ST_HASH_ENTRY,4096,NP_CONTEXT,ST_STORE::ST_HASH_ENTRY_COMPARATOR>::BTreeInsertEx(
char **a1,
__int64 a2,
_DWORD *a3){
char *v3;
unsigned int v4;
UINT64 v8;
int v9;
char **v10;
char *v11;
char v12;
int v13;
unsigned int v14;
UINT8 *v15;
__int64 v17;
__int64 v18;
__int64 v19;
unsigned __int64 v20;
char *v21;
unsigned __int64 v22;
char *v23;
int v24;
__int64 v25;
void **v26;
__int64 v27;
unsigned __int64 v28;
void **v29;
bool v30;
struct NP_CONTEXT::NP_CTX *v31;
char *v32;
__int64 v33;
void **v34;
unsigned __int64 v35;
void **v36;
struct NP_CONTEXT::NP_CTX *v37;
char *v38;
int v39;
char *v40;
int v41;
char v42;
v3 = *a1;
v4 = 0;
v8 = 0i64;
if( v3 )
v8 = (unsigned __int8)v3[2];
v9 = *(_DWORD *)(a2 + 24);
if( *(_DWORD *)(a2 + 28) <= (unsigned int)v8 && !(unsigned int)SmArrayGrow(v8, a2, (UINT64 *)(a2 + 28), (PVOID *)a2) )
return(unsigned int)-1073741670;
if( v9 )
{
v10 = (char **)(*(_QWORD *)a2 + 16i64 * (unsigned int)(v9 - 1));
}
else
{
v32 = B_TREE<_SM_PAGE_KEY,ST_STORE::_ST_PAGE_ENTRY,4096,NP_CONTEXT,B_TREE_KEY_COMPARATOR<_SM_PAGE_KEY>>::BTreeNewNode(
(__int64)a1,
1i64,
1);
*a1 = v32;
if( !v32 )
return(unsigned int)-1073741670;
v10 = *(char ***)a2;
*v10 = v32;
v10[1] = *a1 + 16;
++*(_DWORD *)(a2 + 24);
}
v11 = *v10;
v12 = (*v10)[3];
v13 = *(_DWORD *)*v10;
v14 = v12 != 0 ? 1020 : 255;
if( (unsigned __int16)v13 >= v14 )
{
v17 = v10[1] - v11 - 16;
v18 = v17 >> 2;
v19 = v17 >> 4;
if( !v12 )
LODWORD(v18) = v19;
if( v11 == *a1 )
{
v23 = 0i64;
v22 = 0i64;
v21 = 0i64;
}
else
{
v20 = B_TREE::_ST_HASH_ENTRY,4096,NP_CONTEXT,ST_STORE::ST_HASH_ENTRY_COMPARATOR>::BTreeRedistribute(
(__int64)a1,
a2);
v21 = *(v10 - 1);
v13 = *(_DWORD *)v11;
v22 = v20;
v23 = &v21[32 * ((v20 & 1) == 0) - 16];
}
if( (unsigned __int16)v13 < v14 )
{
if( (v22 & 1) == 0 )
{
if( (int)v18 <= (unsigned __int16)v13 )
{
v21 = v23;
LABEL_19:
v24 = v18;
LABEL_20:
*v10 = v11;
v25 = v24;
if( v11[3] )
{
v26 = (void **)(v21 - 8);
v10[1] = &v11[4 * v25 + 16];
v27 = (__int64)*(v10 - 2);
v28 = v27 + 16;
v29 = (void **)(v27 + 8);
v30 = (unsigned __int64)v21 <= v28;
v31 = (struct NP_CONTEXT::NP_CTX *)(a1 + 2);
if( v30 )
v26 = v29;
if( **(_DWORD **)v31 != -1 )
NP_CONTEXT::NpLeafDerefInternal(v31, v26);
}
else
{
v10[1] = &v11[16 * v24 + 16];
}
v13 = *(_DWORD *)v11;
v12 = v11[3];
goto LABEL_7;
}
v42 = v11[3];
v41 = v18 - (unsigned __int16)v13;
v11 = (char *)v22;
*(v10 - 1) = v23;
goto LABEL_45;
}
v40 = (char *)(v22 & 0xFFFFFFFFFFFFFFFEui64);
v24 = v18 + (unsigned __int16)v13 - v14;
if( v11[3] )
{
if( v24 > 0 )
goto LABEL_42;
}
else
{
if( v24 >= 0 )
goto LABEL_42;
++v24;
}
v11 = v40;
v24 += (unsigned __int16)*(_DWORD *)v40;
LABEL_42:
if( v11 == v40 )
*(v10 - 1) = v23;
else
v21 = v23;
goto LABEL_20;
}
if( v22 && v11[3] )
{
v33 = (__int64)*(v10 - 2);
v34 = (void **)(v23 - 8);
v35 = v33 + 16;
v36 = (void **)(v33 + 8);
v30 = (unsigned __int64)v23 <= v35;
v37 = (struct NP_CONTEXT::NP_CTX *)(a1 + 2);
if( v30 )
v34 = v36;
if( **(_DWORD **)v37 != -1 )
NP_CONTEXT::NpLeafDerefInternal(v37, v34);
}
v38 = B_TREE::_ST_HASH_ENTRY,4096,NP_CONTEXT,ST_STORE::ST_HASH_ENTRY_COMPARATOR>::BTreeSplitChild(
(__int64)a1,
a2);
if( v38 )
{
v10 = (char **)(*(_QWORD *)a2 + 16i64 * (unsigned int)(*(_DWORD *)(a2 + 24) - 1));
v39 = (unsigned __int16)*(_DWORD *)v11;
v21 = *(v10 - 1);
if( (int)v18 <= v39 )
{
v21 += 16;
goto LABEL_19;
}
v41 = v18 - v39;
v42 = v11[3];
v11 = v38;
*(v10 - 1) = v21 + 16;
LABEL_45:
v24 = v41 - 1;
if( v42 )
v24 = v41;
goto LABEL_20;
}
return(unsigned int)-1073741670;
}
LABEL_7:
v15 = (UINT8 *)v10[1];
if( v12 )
{
memmove(v15 + 4, v15, (UINT64)&v11[4i64 * (unsigned __int16)v13 + 16 - (_QWORD)v15]);
*(_DWORD *)v15 = *a3;
++a1[1];
}
else
{
memmove(v15 + 16, v15, (UINT64)&v11[16 * ((unsigned __int16)v13 + 1i64) - (_QWORD)v15]);
*(_OWORD *)v15 = *(_OWORD *)a3;
}
++*(_WORD *)v11;
return v4;
}
Referenced by:
No references.