ST_STORE::StCompactRegions
__int64 __fastcall ST_STORE::StCompactRegions(
__int64 a1,
__int64 a2,
unsigned int a3,
__int64 a4,
unsigned int a5,
int a6){
__int64 v7;
__int64 v8;
_WORD *v9;
int v10;
_QWORD *v11;
int v12;
__int64 *v13;
int v14;
unsigned __int64 v15;
__int64 v16;
__int64 v17;
struct B_TREE_NODE_HDR *LeafSibling;
unsigned int v19;
__int64 v20;
__int64 v21;
__int64 v22;
int v23;
__int64 v24;
int *v25;
int v26;
int v27;
int v28;
unsigned int v29;
UINT64 v30;
__int64 v31;
__int64 v32;
__int64 v33;
int v34;
int v35;
int *v36;
int v37;
int v38;
int v39;
int v40;
int v41;
int v43;
int v44;
int v45;
unsigned int v46;
int v47;
int v48;
__int128 v49;
unsigned int v50;
__int64 v51;
_WORD *v52;
__int64 v53;
int *v54;
_WORD *v55;
__int64 *v56;
INT64 result[3];
int v58;
int v59;
__int64 v60;
char v61;
v7 = a3;
v53 = a2;
v50 = a3;
v46 = a5;
v51 = a4;
memset((INT64)result, 0i64);
v8 = *(_QWORD *)(a1 + 1032);
v44 = 0;
v49 = 0i64;
v9 = (_WORD *)(v8 + 2i64 * a5);
v55 = (_WORD *)(v8 + 2 * v7);
v52 = v9;
if( v55 == v9 )
v10 = 0;
else
v10 = *v9 & 0x1FFF;
v43 = v10;
ST_STORE::StDmPageRecordUnprotect(a1, *(_QWORD *)(a1 + 760));
v11 = (_QWORD *)(a1 + 88);
v12 = *(_DWORD *)(a1 + 120);
v13 = (__int64 *)(a1 + 64);
v56 = (__int64 *)(a1 + 64);
if( (v12 & 1) != 0 )
{
B_TREE::_ST_REGION_ENTRY,4096,NP_CONTEXT,ST_STORE::ST_REGION_ENTRY_COMPARATOR>::BTreeSearchResultDeref(
(__int64 *)(a1 + 64),
a1 + 88);
v12 = *(_DWORD *)(a1 + 120);
}
*(_DWORD *)(a1 + 120) = v12 & 0xFFFFFFFE;
**(_DWORD **)(a1 + 760) = (_DWORD)v7 << *(_DWORD *)(a1 + 812);
v14 = B_TREE::_ST_REGION_ENTRY,4096,NP_CONTEXT,ST_STORE::ST_REGION_ENTRY_COMPARATOR>::BTreeSearchKey(
a1 + 64,
*(_DWORD *)(a1 + 768),
a1 + 88);
if( v14 != -1073741818 )
{
B_TREE::_ST_REGION_ENTRY,4096,NP_CONTEXT,ST_STORE::ST_REGION_ENTRY_COMPARATOR>::BTreeIteratorFromSearchResult(
a1 + 64,
(__int64)&v49,
a1 + 88);
v15 = *((_QWORD *)&v49 + 1);
v16 = v49;
while( 1 )
{
if( v44 )
{
**(_DWORD **)(a1 + 760) = v50 << *(_DWORD *)(a1 + 812);
v14 = B_TREE::_ST_REGION_ENTRY,4096,NP_CONTEXT,ST_STORE::ST_REGION_ENTRY_COMPARATOR>::BTreeSearchKey(
(__int64)v13,
*(_DWORD *)(a1 + 768),
a1 + 88);
if( v14 == -1073741818 )
break;
B_TREE::_ST_REGION_ENTRY,4096,NP_CONTEXT,ST_STORE::ST_REGION_ENTRY_COMPARATOR>::BTreeIteratorCleanup(
(__int64 *)&v49,
v13);
B_TREE::_ST_REGION_ENTRY,4096,NP_CONTEXT,ST_STORE::ST_REGION_ENTRY_COMPARATOR>::BTreeIteratorFromSearchResult(
(__int64)v13,
(__int64)&v49,
a1 + 88);
v15 = *((_QWORD *)&v49 + 1);
v16 = v49;
}
if( !v16 )
{
LABEL_51:
v14 = 0;
break;
}
v15 += 4i64;
v17 = (unsigned __int16)*(_DWORD *)v16 + 4i64;
*((_QWORD *)&v49 + 1) = v15;
if( v15 < v16 + 4 * v17 )
goto LABEL_12;
if( **(_DWORD **)((unsigned __int64)(v13 + 2) & -(__int64)(v13 != 0i64)) == -1 )
{
LeafSibling = *(struct B_TREE_NODE_HDR **)(v16 + 8);
}
else
{
LeafSibling = B_TREE::_ST_REGION_ENTRY,4096,NP_CONTEXT,ST_STORE::ST_REGION_ENTRY_COMPARATOR>::BTreeFindLeafSibling(
(__int64)v13,
v16);
if( LeafSibling == (struct B_TREE_NODE_HDR *)-1i64 )
goto LABEL_13;
}
if( LeafSibling )
{
v15 = (unsigned __int64)LeafSibling + 16;
*(_QWORD *)&v49 = LeafSibling;
*((_QWORD *)&v49 + 1) = (char *)LeafSibling + 16;
v16 = (__int64)LeafSibling;
LABEL_12:
LeafSibling = (struct B_TREE_NODE_HDR *)v15;
}
LABEL_13:
if( LeafSibling == (struct B_TREE_NODE_HDR *)-1i64 )
goto LABEL_66;
if( !LeafSibling )
goto LABEL_51;
v19 = *(_DWORD *)LeafSibling;
v20 = (unsigned int)(*(_DWORD *)(a1 + 464) * (*(_DWORD *)LeafSibling & *(_DWORD *)(a1 + 460)));
v21 = v19 >> *(_DWORD *)(a1 + 456);
_BitScanReverse((unsigned int *)&v22, v21);
v48 = v19;
v23 = *(_DWORD *)(a1 + 808);
v24 = *(_QWORD *)(*(_QWORD *)(a1 + 8 * v22 + 192) + 16 * (v21 ^ (unsigned int)(1 << v22)));
LODWORD(v22) = *(_DWORD *)(a1 + 812);
v25 = (int *)(*(unsigned int *)(a1 + 472) + v20 + v24);
v54 = v25;
v26 = *v25 & v23;
if( (unsigned int)*v25 >> v22 != v50 )
goto LABEL_51;
v27 = 4096;
v28 = *(_DWORD *)(a1 + 824);
v29 = v46;
if( (v25[1] & 0xFFF) != 0 )
v27 = v25[1] & 0xFFF;
v47 = (unsigned int)(v27 + v28 + 15) >> 4;
v30 = (-*(_DWORD *)(*(_QWORD *)(a1 + 1016) + 8i64) & (unsigned int)(v27
+ *(_DWORD *)(*(_QWORD *)(a1 + 1016) + 8i64)
- 1))
+ v28;
if( v46 == v50 || v47 + (*v52 & 0x1FFFu) <= *(_DWORD *)(a1 + 816) )
{
v31 = v51;
}
else
{
v10 = 0;
v31 = v53;
v29 = v50;
v44 = 0;
v52 = v55;
v51 = v53;
v43 = 0;
v46 = v50;
}
if( v26 != v10 || v50 != v29 )
{
if( !v31 )
{
v14 = -1073741802;
break;
}
memmove((UINT8 *)(v31 + (unsigned int)(16 * v10)), (UINT8 *)(v53 + (unsigned int)(16 * v26)), v30);
ST_STORE::StDmPageRecordUnprotect(a1, (__int64)v25);
v32 = a1 + 96;
v33 = a1 + 96;
v34 = *(_DWORD *)(a1 + 112);
v35 = v10 | (v46 << *(_DWORD *)(a1 + 812));
v45 = v35;
if( v34 != -1 && v34 )
v33 = *v11 + 16i64 * (unsigned int)(v34 - 1);
if( *(_QWORD *)v33 == v16 )
{
*(_QWORD *)(v33 + 8) = v15;
}
else
{
B_TREE::_ST_REGION_ENTRY,4096,NP_CONTEXT,ST_STORE::ST_REGION_ENTRY_COMPARATOR>::BTreeSearchResultDeref(
(__int64 *)(a1 + 64),
a1 + 88);
if( *(_DWORD *)(a1 + 112) == -1 )
{
*(_OWORD *)v33 = v49;
}
else
{
B_TREE::_ST_REGION_ENTRY,4096,NP_CONTEXT,ST_STORE::ST_REGION_ENTRY_COMPARATOR>::BTreeSearchKey(
a1 + 64,
*(_DWORD *)(v16 + 16),
a1 + 88);
v41 = *(_DWORD *)(a1 + 112);
if( v41 != -1 && v41 )
v32 = *v11 + 16i64 * (unsigned int)(v41 - 1);
*(_QWORD *)(v32 + 8) = v15;
}
v35 = v45;
}
if( v44 )
{
LABEL_27:
v36 = v54;
**(_DWORD **)(a1 + 760) = *v54;
B_TREE::_ST_REGION_ENTRY,4096,NP_CONTEXT,ST_STORE::ST_REGION_ENTRY_COMPARATOR>::BTreeChangeKey(
(_DWORD *)(a1 + 64),
a1 + 88,
*(_DWORD *)(a1 + 768));
B_TREE::_ST_REGION_ENTRY,4096,NP_CONTEXT,ST_STORE::ST_REGION_ENTRY_COMPARATOR>::BTreeIteratorCleanup(
(__int64 *)&v49,
(__int64 *)(a1 + 64));
v37 = v48;
*v36 = v45;
v48 = v37;
result[0] = (INT64)&v61;
v49 = 0i64;
result[1] = 0i64;
result[2] = 0i64;
v60 = 0i64;
v58 = 0;
v59 = 8;
v14 = B_TREE::_ST_REGION_ENTRY,4096,NP_CONTEXT,ST_STORE::ST_REGION_ENTRY_COMPARATOR>::BTreeInsert(
(char **)(a1 + 64),
&v48,
(__int64)result);
B_TREE::_ST_REGION_ENTRY,4096,NP_CONTEXT,ST_STORE::ST_REGION_ENTRY_COMPARATOR>::BTreeSearchResultCleanup(
(__int64 *)(a1 + 64),
(__int64)result,
1);
if( v14 < 0 )
{
*v36 = **(_DWORD **)(a1 + 760);
B_TREE::_ST_REGION_ENTRY,4096,NP_CONTEXT,ST_STORE::ST_REGION_ENTRY_COMPARATOR>::BTreeChangeKey(
(_DWORD *)(a1 + 64),
a1 + 88,
v37);
break;
}
v38 = B_TREE::_ST_REGION_ENTRY,4096,NP_CONTEXT,ST_STORE::ST_REGION_ENTRY_COMPARATOR>::BTreeDelete(
a1 + 64,
*(_DWORD *)(a1 + 768),
a1 + 88);
v14 = v38;
if( v38 < 0 )
{
if( v38 == -1073741818 )
break;
__int2c();
}
v15 = *((_QWORD *)&v49 + 1);
v16 = v49;
}
else
{
**(_DWORD **)(a1 + 760) = v35;
v39 = B_TREE::_ST_REGION_ENTRY,4096,NP_CONTEXT,ST_STORE::ST_REGION_ENTRY_COMPARATOR>::BTreeChangeKey(
(_DWORD *)(a1 + 64),
a1 + 88,
*(_DWORD *)(a1 + 768));
if( !v39 )
{
v44 = 1;
goto LABEL_27;
}
if( v39 == -1 )
{
LABEL_66:
v14 = -1073741818;
break;
}
v40 = v48;
*v54 = v45;
B_TREE::_ST_REGION_ENTRY,4096,NP_CONTEXT,ST_STORE::ST_REGION_ENTRY_COMPARATOR>::BTreeChangeKey(
(_DWORD *)(a1 + 64),
a1 + 88,
v40);
}
if( v50 != v46 )
{
ST_STORE::StDmpUpdateRegionState(a1, v50, -v47, 1);
ST_STORE::StDmpUpdateRegionState(a1, v46, v47, 0);
}
v10 = v43;
v13 = (__int64 *)(a1 + 64);
}
v10 += v47;
v43 = v10;
if( a6 && (unsigned int)ST_STORE::StDmCheckForCompaction(a1, 0) != 2 )
{
v14 = -2147483634;
break;
}
}
}
B_TREE::_ST_REGION_ENTRY,4096,NP_CONTEXT,ST_STORE::ST_REGION_ENTRY_COMPARATOR>::BTreeIteratorCleanup(
(__int64 *)&v49,
v56);
return(unsigned int)v14;
}
Referenced by:
No references.