Normalization__CanCombinableCharactersCombine
NTSTATUS __stdcall Normalization__CanCombinableCharactersCombine(
_RTL_NORMALIZATION *pNormalization,
INT64 cFirst,
INT64 cSecond){
unsigned int v3;
_RTL_NORMALIZATION v5;
__int64 v6;
__int64 v7;
unsigned __int16 v8;
unsigned __int16 v9;
__int64 v10;
unsigned int v11;
v3 = cSecond;
if( ((cFirst & 0x1F0000) == 0) != ((cSecond & 0x1F0000) == 0) )
return 0;
v5 = pNormalization[22];
if( !v5 )
return 0;
v6 = *((_QWORD *)pNormalization + 12);
v7 = (unsigned __int16)((int)(cFirst + 12541 * v3) % v5);
v8 = *(_WORD *)(v6 + 2 * v7);
v9 = *(_WORD *)(v6 + 2 * v7 + 2);
if( v8 >= v9 )
return 0;
v10 = *((_QWORD *)pNormalization + 13);
while( 1 )
{
v11 = *(unsigned __int16 *)(v10 + 2i64 * v8);
if( __PAIR64__(v3, cFirst) == __PAIR64__(*(unsigned __int16 *)(v10 + 2i64 * v8 + 2), v11) )
return *(unsigned __int16 *)(v10 + 2i64 * v8 + 4);
if( (unsigned __int16)(v11 + 10240) <= 0x7FFu )
break;
LABEL_13:
v8 += 3;
if( v8 >= v9 )
return 0;
}
if( (int)cFirst <= 0xFFFF
|| (_WORD)v11 != (unsigned __int16)(((int)cFirst - 0x10000) / 1024) - 10240
|| *(_DWORD *)(v10 + 2i64 * v8 + 2) != __PAIR32__(
(int)(v3 - 0x10000) / 1024 - 10240,
((int)cFirst - 0x10000) % 1024 - 9216)
|| *(_WORD *)(v10 + 2i64 * v8 + 6) != (unsigned __int16)((int)(v3 - 0x10000) % 1024) - 9216 )
{
v8 += 3;
goto LABEL_13;
}
return *(unsigned __int16 *)(v10 + 2i64 * v8 + 10) + ((*(unsigned __int16 *)(v10 + 2i64 * v8 + 8) - 55287) << 10);
}Referenced by:
NormBuffer__LastStartBasePair
NormBuffer__RecheckStartCombinations
Normalization__CanCombineWithStartBase
Normalization__CanCombineWithStartFirstPair
Normalization__IsNormalized
Normalization__NormalizeCharacter