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.