long,ST_STORE::_ST_REGION_ENTRY,4096,NP_CONTEXT,ST_STORE::ST_REGION_ENTRY_COMPARATOR>::BTreeInsertEx

__int64 __fastcall B_TREE::_ST_REGION_ENTRY,4096,NP_CONTEXT,ST_STORE::ST_REGION_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; 
  char *v24; 
  int v25; 
  __int64 v26; 
  void **v27; 
  __int64 v28; 
  unsigned __int64 v29; 
  void **v30; 
  bool v31; 
  struct NP_CONTEXT::NP_CTX *v32; 
  char *v33; 
  __int64 v34; 
  void **v35; 
  unsigned __int64 v36; 
  void **v37; 
  struct NP_CONTEXT::NP_CTX *v38; 
  char *v39; 
  int 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
  {
    v33 = 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 = v33;
    if( !v33 )
      return(unsigned int)-1073741670;
    v10 = *(char ***)a2;
    *v10 = v33;
    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_REGION_ENTRY,4096,NP_CONTEXT,ST_STORE::ST_REGION_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 )
      {
        v24 = (char *)(v22 & 0xFFFFFFFFFFFFFFFEui64);
        v25 = v18 + (unsigned __int16)v13 - v14;
        if( v11[3] )
        {
          if( v25 > 0 )
            goto LABEL_19;
        }
        else
        {
          if( v25 >= 0 )
            goto LABEL_19;
          ++v25;
        }
        v11 = v24;
        v25 += (unsigned __int16)*(_DWORD *)v24;
LABEL_19:
        if( v11 == v24 )
          *(v10 - 1) = v23;
        else
          v21 = v23;
        goto LABEL_21;
      }
      if( (int)v18 > (unsigned __int16)v13 )
      {
        v42 = v11[3];
        v41 = v18 - (unsigned __int16)v13;
        v11 = (char *)v22;
        *(v10 - 1) = v23;
LABEL_40:
        v25 = v41 - 1;
        if( v42 )
          v25 = v41;
        goto LABEL_21;
      }
      v21 = v23;
      goto LABEL_48;
    }
    if( v22 && v11[3] )
    {
      v34 = (__int64)*(v10 - 2);
      v35 = (void **)(v23 - 8);
      v36 = v34 + 16;
      v37 = (void **)(v34 + 8);
      v31 = (unsigned __int64)v23 <= v36;
      v38 = (struct NP_CONTEXT::NP_CTX *)(a1 + 2);
      if( v31 )
        v35 = v37;
      if( **(_DWORD **)v38 != -1 )
        NP_CONTEXT::NpLeafDerefInternal(v38, v35);
    }
    v39 = B_TREE::_ST_REGION_ENTRY,4096,NP_CONTEXT,ST_STORE::ST_REGION_ENTRY_COMPARATOR>::BTreeSplitChild(
            (__int64)a1,
            a2);
    if( v39 )
    {
      v10 = (char **)(*(_QWORD *)a2 + 16i64 * (unsigned int)(*(_DWORD *)(a2 + 24) - 1));
      v40 = (unsigned __int16)*(_DWORD *)v11;
      v21 = *(v10 - 1);
      if( (int)v18 > v40 )
      {
        v41 = v18 - v40;
        v42 = v11[3];
        v11 = v39;
        *(v10 - 1) = v21 + 16;
        goto LABEL_40;
      }
      v21 += 16;
LABEL_48:
      v25 = v18;
LABEL_21:
      *v10 = v11;
      v26 = v25;
      if( v11[3] )
      {
        v27 = (void **)(v21 - 8);
        v10[1] = &v11[4 * v26 + 16];
        v28 = (__int64)*(v10 - 2);
        v29 = v28 + 16;
        v30 = (void **)(v28 + 8);
        v31 = (unsigned __int64)v21 <= v29;
        v32 = (struct NP_CONTEXT::NP_CTX *)(a1 + 2);
        if( v31 )
          v27 = v30;
        if( **(_DWORD **)v32 != -1 )
          NP_CONTEXT::NpLeafDerefInternal(v32, v27);
      }
      else
      {
        v10[1] = &v11[16 * v25 + 16];
      }
      v13 = *(_DWORD *)v11;
      v12 = v11[3];
      goto LABEL_7;
    }
    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.