long,ST_STORE::_ST_REGION_ENTRY,4096,NP_CONTEXT,ST_STORE::ST_REGION_ENTRY_COMPARATOR>::BTreeSearchKey
__int64 __fastcall B_TREE::_ST_REGION_ENTRY,4096,NP_CONTEXT,ST_STORE::ST_REGION_ENTRY_COMPARATOR>::BTreeSearchKey(
__int64 a1,
int a2,
__int64 a3){
UINT64 v6;
unsigned int v7;
int v8;
UINT64 v9;
struct B_TREE_NODE_HDR **v10;
struct B_TREE_NODE_HDR *v11;
unsigned int Key;
int *v13;
void **v15;
int v16;
int v17;
int v18;
int v19;
B_TREE::_ST_REGION_ENTRY,4096,NP_CONTEXT,ST_STORE::ST_REGION_ENTRY_COMPARATOR>::BTreeSearchResultDeref(
(__int64 *)a1,
a3);
v7 = 0;
if( *(_DWORD *)(a3 + 24) == -1 )
{
v8 = 0;
v10 = (struct B_TREE_NODE_HDR **)(a3 + 8);
}
else
{
v8 = 1;
v9 = 0i64;
if( *(_QWORD *)a1 )
v9 = *(unsigned __int8 *)(*(_QWORD *)a1 + 2i64);
if( *(_DWORD *)(a3 + 28) < (unsigned int)v9 && !(unsigned int)SmArrayGrow(v9, v6, (UINT64 *)(a3 + 28), (PVOID *)a3) )
return(unsigned int)-1073741670;
v10 = *(struct B_TREE_NODE_HDR ***)a3;
}
v11 = *(struct B_TREE_NODE_HDR **)a1;
if( !*(_QWORD *)a1 )
{
if( !v8 )
{
*v10 = 0i64;
v10[1] = 0i64;
}
return(unsigned int)-1073741275;
}
while( 1 )
{
Key = B_TREE::_ST_REGION_ENTRY,4096,NP_CONTEXT,ST_STORE::ST_REGION_ENTRY_COMPARATOR>::BTreeNodeFindKey(
(_DWORD *)a1,
(__int64)v11,
a2);
if( *((_BYTE *)v11 + 3) )
break;
if( v8 )
{
*v10 = v11;
v10[1] = (struct B_TREE_NODE_HDR *)((char *)v11 + 16 * Key + 16);
v10 += 2;
}
if( Key )
v15 = (void **)((char *)v11 + 16 * Key + 8);
else
v15 = (void **)((char *)v11 + 8);
if( **(_DWORD **)(a1 + 16) == -1 || *((_BYTE *)v11 + 2) != 2 )
{
v11 = (struct B_TREE_NODE_HDR *)*v15;
}
else
{
v11 = NP_CONTEXT::NpLeafRefInternal((struct NP_CONTEXT::NP_CTX *)(a1 + 16), v15, 2 * (*(_BYTE *)(a3 + 32) & 1u));
if( !v11 )
return(unsigned int)-1073741818;
}
}
*v10 = v11;
v13 = (int *)((char *)v11 + 4 * Key + 16);
v10[1] = (struct B_TREE_NODE_HDR *)v13;
if( v8 )
*(_DWORD *)(a3 + 24) = (((__int64)v10 - *(_QWORD *)a3) >> 4) + 1;
if( Key >= (unsigned __int16)*(_DWORD *)v11 )
return(unsigned int)-1073741275;
v16 = *v13;
v18 = a2;
v19 = v16;
LOBYTE(v17) = ST_STORE::ST_REGION_ENTRY_COMPARATOR::Compare((_DWORD *)a1, &v19, &v18);
if( v17 )
return(unsigned int)-1073741275;
return v7;
}
Referenced by:
No references.