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

__int64 __fastcall B_TREE::_ST_REGION_ENTRY,4096,NP_CONTEXT,ST_STORE::ST_REGION_ENTRY_COMPARATOR>::BTreeDeleteEx(
        __int64 a1,
        __int64 a2){
  unsigned int v2; 
  unsigned __int64 *v4; 
  _DWORD *v6; 
  __int64 v7; 
  char *v8; 
  const VOID *v9; 
  unsigned int v10; 
  __int64 v11; 
  __int64 v12; 
  char *v13; 
  unsigned __int64 v14; 
  _DWORD *v15; 
  _DWORD **v17; 
  unsigned __int64 v18; 
  unsigned int v19; 
  __int64 v20; 
  unsigned __int64 v21; 
  __int64 v22; 
  void **v23; 
  unsigned __int64 v24; 
  void **v25; 
  bool v26; 
  struct NP_CONTEXT::NP_CTX *v27; 
  unsigned __int64 v28; 
  __int64 v29; 
  unsigned __int64 v30; 
  unsigned __int64 v31; 
  __int64 v32; 
  __int64 v33; 
  __int128 v34; 

  v2 = 0;
  v4 = (unsigned __int64 *)(*(_QWORD *)a2 + 16i64 * (unsigned int)(*(_DWORD *)(a2 + 24) - 1));
  v34 = 0i64;
  v6 = (_DWORD *)*v4;
  v7 = (unsigned __int16)*(_DWORD *)*v4;
  v8 = (char *)v4[1];
  if( *(_BYTE *)(*v4 + 3) )
  {
    v9 = v8 + 4;
    v10 = 510;
    v11 = 4 * v7 + 12;
  }
  else
  {
    v9 = v8 + 16;
    v11 = 16 * v7;
    v10 = 127;
  }
  v12 = v11 - (_QWORD)v8;
  v13 = (char *)v6 + v12;
  if( (_DWORD *)((char *)v6 + v12) )
    memmove(v8, v9, (_DWORD)v6 + v12);
  --*(_WORD *)v6;
  if( *((_BYTE *)v6 + 3) )
    --*(_QWORD *)(a1 + 8);
  if( *(_DWORD **)a1 == v6 )
  {
    if( !(unsigned __int16)*v6 && !*((_BYTE *)v6 + 3) )
    {
      memmove(v4, v4 + 2, 16 * (*(_DWORD *)(a2 + 28) - 1));
      v17 = (_DWORD **)(a1 + 16);
      --*(_DWORD *)(a2 + 24);
      if( **(_DWORD **)(a1 + 16) == -1 || *((_BYTE *)v6 + 2) != 2 )
      {
        *(_QWORD *)a1 = *((_QWORD *)v6 + 1);
      }
      else
      {
        *(_QWORD *)a1 = NP_CONTEXT::NpLeafRefInternal((struct NP_CONTEXT::NP_CTX *)(a1 + 16), (void **)v6 + 1, 1);
        if( **v17 != -1 )
        {
          NP_CONTEXT::NpLeafDerefInternal((struct NP_CONTEXT::NP_CTX *)(a1 + 16), (void **)v6 + 1);
          if( **v17 != -1 )
          {
            NP_CONTEXT::NpLeafDerefInternal((struct NP_CONTEXT::NP_CTX *)(a1 + 16), (void **)v6 + 1);
            if( **v17 != -1 )
              NP_CONTEXT::NpLeafRemoveInternal((struct NP_CONTEXT::NP_CTX *)(a1 + 16), (void **)v6 + 1);
          }
        }
      }
      B_TREE<_SM_PAGE_KEY,ST_STORE::_ST_PAGE_ENTRY,4096,NP_CONTEXT,B_TREE_KEY_COMPARATOR<_SM_PAGE_KEY>>::BTreeDeleteNode(
        a1,
        (unsigned __int8 *)v6);
    }
  }
  else
  {
    if( (unsigned __int16)*v6 < v10 )
    {
      v18 = B_TREE::_ST_REGION_ENTRY,4096,NP_CONTEXT,ST_STORE::ST_REGION_ENTRY_COMPARATOR>::BTreeRedistribute(
              a1,
              a2);
      if( !v18 )
        return(unsigned int)-1073741818;
      v19 = (unsigned __int16)*v6;
      if( v19 < v10 )
      {
        B_TREE::_ST_REGION_ENTRY,4096,NP_CONTEXT,ST_STORE::ST_REGION_ENTRY_COMPARATOR>::BTreeMergeNodes(
          a1,
          a2,
          v18);
        v4 = (unsigned __int64 *)(*(_QWORD *)a2 + 16i64 * (unsigned int)(*(_DWORD *)(a2 + 24) - 1));
        if( (v18 & 1) != 0 )
        {
          v31 = v18 & 0xFFFFFFFFFFFFFFFEui64;
          *v4 = v31;
          v32 = (unsigned __int16)*(_DWORD *)v31;
          if( *(_BYTE *)(v31 + 3) )
            v33 = 4 * v32 + 16;
          else
            v33 = 16 * (v32 + 1);
          v4[1] = v31 + v33 - (_QWORD)v13;
        }
      }
      else
      {
        if( (v18 & 1) != 0 )
        {
          v28 = v4[1];
          v29 = v19 - v10 + 1;
          if( *((_BYTE *)v6 + 3) )
            v30 = v28 + 4 * v29;
          else
            v30 = v28 + 16 * v29;
          v4[1] = v30;
        }
        if( *((_BYTE *)v6 + 3) )
        {
          v20 = *(v4 - 1);
          v21 = v20 + 16;
          if( (v18 & 1) != 0 )
            v21 = v20 - 16;
          v22 = *(v4 - 2);
          v23 = (void **)(v21 - 8);
          v24 = v22 + 16;
          v25 = (void **)(v22 + 8);
          v26 = v21 <= v24;
          v27 = (struct NP_CONTEXT::NP_CTX *)(a1 + 16);
          if( v26 )
            v23 = v25;
          if( **(_DWORD **)v27 != -1 )
            NP_CONTEXT::NpLeafDerefInternal(v27, v23);
        }
      }
    }
    v14 = *v4;
    v15 = (_DWORD *)v4[1];
    if( v15 == (_DWORD *)(v14 + 16)
      && *(_BYTE *)(v14 + 3)
      && (unsigned int)B_TREE::_ST_REGION_ENTRY,4096,NP_CONTEXT,ST_STORE::ST_REGION_ENTRY_COMPARATOR>::BTreeFindSeperatorIndexEntry(
                         a2,
                         0,
                         (__int64)&v34) )
    {
      **((_DWORD **)&v34 + 1) = *v15;
    }
  }
  return v2;
}

Referenced by:

No references.