B_TREE<_SM_PAGE_KEY,SMKM_STORE_MGR::SMKM_FRONTEND_ENTRY,4096,B_TREE_DUMMY_NODE_POOL,B_TREE_KEY_COMPARATOR<_SM_PAGE_KEY>>::BTreeInsertEx

__int64 __fastcall B_TREE<_SM_PAGE_KEY,SMKM_STORE_MGR::SMKM_FRONTEND_ENTRY,4096,B_TREE_DUMMY_NODE_POOL,B_TREE_KEY_COMPARATOR<_SM_PAGE_KEY>>::BTreeInsertEx(
        int **a1,
        __int64 a2,
        _QWORD *a3){
  int *v3; 
  unsigned int v4; 
  UINT64 v8; 
  int v9; 
  int **v10; 
  char *v11; 
  int v12; 
  unsigned int v13; 
  UINT8 *v14; 
  __int64 v16; 
  __int64 v17; 
  __int64 v18; 
  __int64 v19; 
  __int64 v20; 
  __int64 v21; 
  int v22; 
  char *v23; 
  char *v24; 
  char *v25; 
  char v26; 
  int v27; 
  int v28; 
  int *v29; 
  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 = (int **)(*(_QWORD *)a2 + 16i64 * (unsigned int)(v9 - 1));
  }
  else
  {
    v29 = (int *)B_TREE<_SM_PAGE_KEY,SMKM_STORE_MGR::SMKM_FRONTEND_ENTRY,4096,B_TREE_DUMMY_NODE_POOL,B_TREE_KEY_COMPARATOR<_SM_PAGE_KEY>>::BTreeNewNode(
                   v8,
                   1,
                   1);
    *a1 = v29;
    if( !v29 )
      return(unsigned int)-1073741670;
    v10 = *(int ***)a2;
    *v10 = v29;
    v10[1] = *a1 + 4;
    ++*(_DWORD *)(a2 + 24);
  }
  v11 = (char *)*v10;
  LOBYTE(v8) = *((_BYTE *)*v10 + 3);
  v12 = **v10;
  v13 = (unsigned __int8)-((_BYTE)v8 != 0) + 255;
  if( (unsigned __int16)v12 >= v13 )
  {
    v16 = (char *)v10[1] - v11 - 16;
    v17 = v16 >> 3;
    v18 = v16 >> 4;
    if( !(_BYTE)v8 )
      LODWORD(v17) = v18;
    if( v11 == (char *)*a1 )
    {
      v21 = 0i64;
      v20 = 0i64;
    }
    else
    {
      v19 = B_TREE<_SM_PAGE_KEY,SMKM_STORE_MGR::SMKM_FRONTEND_ENTRY,4096,B_TREE_DUMMY_NODE_POOL,B_TREE_KEY_COMPARATOR<_SM_PAGE_KEY>>::BTreeRedistribute(
              (_DWORD *)v8,
              a2);
      v12 = *(_DWORD *)v11;
      v20 = v19;
      v21 = (__int64)&(*(v10 - 1))[8 * ((v19 & 1) == 0) - 4];
    }
    v22 = (unsigned __int16)v12;
    if( (unsigned __int16)v12 < v13 )
    {
      if( (v20 & 1) != 0 )
      {
        v23 = (char *)(v20 & 0xFFFFFFFFFFFFFFFEui64);
        LODWORD(v17) = (unsigned __int16)v12 + v17 - v13;
        if( v11[3] )
        {
          if( (int)v17 > 0 )
            goto LABEL_19;
        }
        else
        {
          if( (int)v17 >= 0 )
            goto LABEL_19;
          LODWORD(v17) = v17 + 1;
        }
        v11 = v23;
        LODWORD(v17) = (unsigned __int16)*(_DWORD *)v23 + (_DWORD)v17;
LABEL_19:
        if( v11 == v23 )
          *(v10 - 1) = (int *)v21;
        goto LABEL_21;
      }
      if( (int)v17 > (unsigned __int16)v12 )
      {
        v26 = v11[3];
        v11 = (char *)v20;
        *(v10 - 1) = (int *)v21;
        goto LABEL_27;
      }
      goto LABEL_21;
    }
    v25 = B_TREE<_SM_PAGE_KEY,SMKM_STORE_MGR::SMKM_FRONTEND_ENTRY,4096,B_TREE_DUMMY_NODE_POOL,B_TREE_KEY_COMPARATOR<_SM_PAGE_KEY>>::BTreeSplitChild(
            a1,
            a2);
    if( v25 )
    {
      v10 = (int **)(*(_QWORD *)a2 + 16i64 * (unsigned int)(*(_DWORD *)(a2 + 24) - 1));
      v22 = (unsigned __int16)*(_DWORD *)v11;
      if( (int)v17 > v22 )
      {
        v26 = v11[3];
        v11 = v25;
        *(v10 - 1) += 4;
LABEL_27:
        v27 = v17 - v22;
        v28 = v27 - 1;
        if( v26 )
          v28 = v27;
        LODWORD(v17) = v28;
      }
LABEL_21:
      *v10 = (int *)v11;
      if( v11[3] )
        v24 = &v11[8 * (int)v17 + 16];
      else
        v24 = &v11[16 * (int)v17 + 16];
      v10[1] = (int *)v24;
      LOBYTE(v8) = v11[3];
      v12 = *(_DWORD *)v11;
      goto LABEL_7;
    }
    return(unsigned int)-1073741670;
  }
LABEL_7:
  v14 = (UINT8 *)v10[1];
  if( (_BYTE)v8 )
  {
    memmove(v14 + 8, v14, (UINT64)&v11[8i64 * (unsigned __int16)v12 + 16 - (_QWORD)v14]);
    *(_QWORD *)v14 = *a3;
    a1[1] = (int *)((char *)a1[1] + 1);
  }
  else
  {
    memmove(v14 + 16, v14, (UINT64)&v11[16 * ((unsigned __int16)v12 + 1i64) - (_QWORD)v14]);
    *(_OWORD *)v14 = *(_OWORD *)a3;
  }
  ++*(_WORD *)v11;
  return v4;
}

Referenced by:

No references.