long,ST_STORE::_ST_HASH_ENTRY,4096,NP_CONTEXT,ST_STORE::ST_HASH_ENTRY_COMPARATOR>::BTreeSplitChild

char *__fastcall B_TREE::_ST_HASH_ENTRY,4096,NP_CONTEXT,ST_STORE::ST_HASH_ENTRY_COMPARATOR>::BTreeSplitChild(
        __int64 a1,
        __int64 a2){
  __int64 v3; 
  unsigned __int8 *v4; 
  __int64 v5; 
  char *v6; 
  char *v7; 
  __int64 v8; 
  UINT8 *v9; 
  int v10; 
  UINT8 *v11; 
  unsigned int v12; 
  _DWORD *v13; 
  bool v14; 
  __int64 v15; 
  _QWORD *v16; 
  int v17; 
  int v18; 
  char 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 = *(_QWORD *)a2 + 16i64 * (unsigned int)(*(_DWORD *)(a2 + 24) - 1);
  v4 = 0i64;
  v5 = *(_QWORD *)v3;
  v6 = B_TREE<_SM_PAGE_KEY,ST_STORE::_ST_PAGE_ENTRY,4096,NP_CONTEXT,B_TREE_KEY_COMPARATOR<_SM_PAGE_KEY>>::BTreeNewNode(
         a1,
         *(unsigned __int8 *)(*(_QWORD *)v3 + 3i64),
         *(_BYTE *)(*(_QWORD *)v3 + 2i64));
  v7 = v6;
  if( !v6 )
    return v30;
  DWORD1(v28) = 0;
  *((_QWORD *)&v28 + 1) = v6;
  v8 = (*(_DWORD *)v5 >> 1) & 0x7FFF;
  if( *(_BYTE *)(v5 + 3) )
  {
    v9 = (UINT8 *)(v5 + 16 + 4 * v8);
    if( (*(_DWORD *)v5 & 1) != 0 && (unsigned __int64)(v9 + 4) < *(_QWORD *)(v3 + 8) )
    {
      v9 += 4;
      LODWORD(v8) = v8 + 1;
    }
    v10 = *(_DWORD *)v9;
    v11 = 0i64;
  }
  else
  {
    v9 = 0i64;
    v11 = (UINT8 *)(v5 + 16 * (((*(_DWORD *)v5 >> 1) & 0x7FFF) + 1i64));
    v10 = *(_DWORD *)v11;
  }
  LODWORD(v28) = v10;
  v12 = (unsigned __int16)*(_DWORD *)v5 - (_DWORD)v8;
  if( *(_BYTE *)(v5 + 3) )
  {
    v13 = *(_DWORD **)((a1 + 16) & -(__int64)(a1 != 0));
    v14 = *v13 == -1;
    if( *v13 == -1 )
      v15 = *(_QWORD *)(v5 + 8);
    else
      v15 = 3358i64;
    if( v14 )
      *((_QWORD *)v7 + 1) = v15;
    memmove((UINT8 *)v7 + 16, v9, 4i64 * v12);
  }
  else
  {
    memmove((UINT8 *)v7 + 16, v11 + 16, 16i64 * --v12);
    *((_QWORD *)v7 + 1) = *((_QWORD *)v11 + 1);
  }
  *(_WORD *)v7 = v12;
  if( *(_QWORD *)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,
            *(_BYTE *)(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( *(_BYTE *)(v5 + 3) && **(_DWORD **)(a1 + 16) != -1 )
      {
        *(_DWORD *)v25 |= 1u;
        NP_CONTEXT::NpGetResidentLeaf(v24, v25);
      }
      v16 = (_QWORD *)a2;
      memmove((UINT8 *)(v3 + 16), (UINT8 *)v3, 16i64 * (unsigned int)(*(_DWORD *)(a2 + 28) - v26));
      *(_QWORD *)v3 = v4;
      *(_QWORD *)(v3 + 8) = v27;
      v18 = ++*(_DWORD *)(a2 + 24);
      goto LABEL_13;
    }
  }
  else
  {
    v16 = (_QWORD *)a2;
    --*(_DWORD *)(a2 + 24);
    v17 = B_TREE::_ST_HASH_ENTRY,4096,NP_CONTEXT,ST_STORE::ST_HASH_ENTRY_COMPARATOR>::BTreeInsertEx(
            (char **)a1,
            a2,
            &v28);
    v18 = ++*(_DWORD *)(a2 + 24);
    if( v17 >= 0 )
    {
LABEL_13:
      v19 = *(_BYTE *)(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 = *(_BYTE *)(v5 + 3);
        }
      }
      *(_WORD *)v5 = v8;
      if( v19 && **(_DWORD **)(a1 + 16) == -1 )
        *(_QWORD *)(v5 + 8) = 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.