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.