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

char *__fastcall B_TREE::_ST_REGION_ENTRY,4096,NP_CONTEXT,ST_STORE::ST_REGION_ENTRY_COMPARATOR>::BTreeSplitChild(
        __int64 a1,
        __int64 a2){
  unsigned __int8 **v3; 
  unsigned __int8 *v4; 
  unsigned __int8 *v5; 
  char *v6; 
  char *v7; 
  __int64 v8; 
  unsigned __int8 *v9; 
  int v10; 
  unsigned __int8 *v11; 
  int v12; 
  _DWORD *v13; 
  bool v14; 
  __int64 v15; 
  _QWORD *v16; 
  int v17; 
  int v18; 
  unsigned __int8 v19; 
  struct NP_CONTEXT::NP_CTX *v20; 
  __int64 v21; 
  char *v23; 
  struct NP_CONTEXT::NP_CTX *v24; 
  union _NP_LEAF_PTR *v25; 
  int v26; 
  char *v27; 
  __int128 v28; 
  char *v30; 

  v30 = 0i64;
  v3 = (unsigned __int8 **)(*(_QWORD *)a2 + 16i64 * (unsigned int)(*(_DWORD *)(a2 + 24) - 1));
  v4 = 0i64;
  v5 = *v3;
  v6 = B_TREE<_SM_PAGE_KEY,ST_STORE::_ST_PAGE_ENTRY,4096,NP_CONTEXT,B_TREE_KEY_COMPARATOR<_SM_PAGE_KEY>>::BTreeNewNode(
         a1,
         (*v3)[3],
         (*v3)[2]);
  v7 = v6;
  if( !v6 )
    return v30;
  DWORD1(v28) = 0;
  *((_QWORD *)&v28 + 1) = v6;
  v8 = (*(_DWORD *)v5 >> 1) & 0x7FFF;
  if( v5[3] )
  {
    v9 = &v5[4 * v8 + 16];
    if( (*(_DWORD *)v5 & 1) != 0 && v9 + 4 < v3[1] )
    {
      v9 += 4;
      LODWORD(v8) = v8 + 1;
    }
    v10 = *(_DWORD *)v9;
    v11 = 0i64;
  }
  else
  {
    v9 = 0i64;
    v11 = &v5[16 * ((*(_DWORD *)v5 >> 1) & 0x7FFF) + 16];
    v10 = *(_DWORD *)v11;
  }
  LODWORD(v28) = v10;
  v12 = (unsigned __int16)*(_DWORD *)v5 - (_DWORD)v8;
  if( v5[3] )
  {
    v13 = *(_DWORD **)((a1 + 16) & -(__int64)(a1 != 0));
    v14 = *v13 == -1;
    if( *v13 == -1 )
      v15 = *((_QWORD *)v5 + 1);
    else
      v15 = 3358i64;
    if( v14 )
      *((_QWORD *)v7 + 1) = v15;
    memmove(v7 + 16, v9, 4 * v12);
  }
  else
  {
    --v12;
    memmove(v7 + 16, v11 + 16, 16 * v12);
    *((_QWORD *)v7 + 1) = *((_QWORD *)v11 + 1);
  }
  *(_WORD *)v7 = v12;
  if( *(unsigned __int8 **)a1 == v5 )
  {
    v23 = B_TREE<_SM_PAGE_KEY,ST_STORE::_ST_PAGE_ENTRY,4096,NP_CONTEXT,B_TREE_KEY_COMPARATOR<_SM_PAGE_KEY>>::BTreeNewNode(
            a1,
            0i64,
            v5[2] + 1);
    v4 = (unsigned __int8 *)v23;
    if( v23 )
    {
      v25 = (union _NP_LEAF_PTR *)(v23 + 8);
      v26 = 1;
      *((_QWORD *)v23 + 1) = v5;
      v27 = v23 + 16;
      *((_OWORD *)v23 + 1) = v28;
      *(_WORD *)v23 = 1;
      *(_QWORD *)a1 = v23;
      if( v5[3] && **(_DWORD **)(a1 + 16) != -1 )
      {
        *(_DWORD *)v25 |= 1u;
        NP_CONTEXT::NpGetResidentLeaf(v24, v25);
      }
      v16 = (_QWORD *)a2;
      memmove(v3 + 2, v3, 16 * (*(_DWORD *)(a2 + 28) - v26));
      *v3 = v4;
      v3[1] = (unsigned __int8 *)v27;
      v18 = ++*(_DWORD *)(a2 + 24);
      goto LABEL_13;
    }
  }
  else
  {
    v16 = (_QWORD *)a2;
    --*(_DWORD *)(a2 + 24);
    v17 = B_TREE::_ST_REGION_ENTRY,4096,NP_CONTEXT,ST_STORE::ST_REGION_ENTRY_COMPARATOR>::BTreeInsertEx(
            (char **)a1,
            a2,
            &v28);
    v18 = ++*(_DWORD *)(a2 + 24);
    if( v17 >= 0 )
    {
LABEL_13:
      v19 = v5[3];
      if( v19 )
      {
        v20 = (struct NP_CONTEXT::NP_CTX *)(2i64 * (unsigned int)(v18 - 2));
        v21 = *(_QWORD *)(*v16 + 8i64 * (_QWORD)v20 + 8);
        if( **(_DWORD **)(a1 + 16) != -1 )
        {
          *(_DWORD *)(v21 + 8) |= 1u;
          NP_CONTEXT::NpGetResidentLeaf(v20, (union _NP_LEAF_PTR *)(v21 + 8));
          v19 = v5[3];
        }
      }
      *(_WORD *)v5 = v8;
      if( v19 && **(_DWORD **)(a1 + 16) == -1 )
        *((_QWORD *)v5 + 1) = v7;
      v30 = v7;
      v7 = 0i64;
      v4 = 0i64;
    }
  }
  if( v7 )
    B_TREE<_SM_PAGE_KEY,ST_STORE::_ST_PAGE_ENTRY,4096,NP_CONTEXT,B_TREE_KEY_COMPARATOR<_SM_PAGE_KEY>>::BTreeDeleteNode(
      a1,
      (unsigned __int8 *)v7);
  if( v4 )
    B_TREE<_SM_PAGE_KEY,ST_STORE::_ST_PAGE_ENTRY,4096,NP_CONTEXT,B_TREE_KEY_COMPARATOR<_SM_PAGE_KEY>>::BTreeDeleteNode(
      a1,
      v4);
  return v30;
}

Referenced by:

No references.