Utf16Utility
using System.Runtime.CompilerServices;
namespace System.Text.Unicode
{
internal static class Utf16Utility
{
[MethodImpl(MethodImplOptions.AggressiveInlining)]
internal static bool AllCharsInUInt32AreAscii(uint value)
{
return ((int)value & -8323200) == 0;
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
internal static bool AllCharsInUInt64AreAscii(ulong value)
{
return ((long)value & -35747867511423104) == 0;
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
internal static uint ConvertAllAsciiCharsInUInt32ToLowercase(uint value)
{
uint num = value + 8388736 - 4259905;
uint num2 = value + 8388736 - 5963867;
uint num3 = ((num ^ num2) & 8388736) >> 2;
return value ^ num3;
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
internal static uint ConvertAllAsciiCharsInUInt32ToUppercase(uint value)
{
uint num = value + 8388736 - 6357089;
uint num2 = value + 8388736 - 8061051;
uint num3 = ((num ^ num2) & 8388736) >> 2;
return value ^ num3;
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
internal static ulong ConvertAllAsciiCharsInUInt64ToUppercase(ulong value)
{
ulong num = value + 36029346783166592 - 27303489359118433;
ulong num2 = value + 36029346783166592 - 34621950424449147;
ulong num3 = ((num ^ num2) & 36029346783166592) >> 2;
return value ^ num3;
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
internal static ulong ConvertAllAsciiCharsInUInt64ToLowercase(ulong value)
{
ulong num = value + 36029346783166592 - 18296152663326785;
ulong num2 = value + 36029346783166592 - 25614613728657499;
ulong num3 = ((num ^ num2) & 36029346783166592) >> 2;
return value ^ num3;
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
internal static bool UInt32ContainsAnyLowercaseAsciiChar(uint value)
{
uint num = value + 8388736 - 6357089;
uint num2 = value + 8388736 - 8061051;
return ((num ^ num2) & 8388736) != 0;
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
internal static bool UInt32ContainsAnyUppercaseAsciiChar(uint value)
{
uint num = value + 8388736 - 4259905;
uint num2 = value + 8388736 - 5963867;
return ((num ^ num2) & 8388736) != 0;
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
internal static bool UInt32OrdinalIgnoreCaseAscii(uint valueA, uint valueB)
{
uint num = (valueA ^ valueB) << 2;
uint num2 = valueA + 327685;
num2 |= 10485920;
num2 += 1703962;
num2 = (uint)((int)num2 | -8388737);
return (num & num2) == 0;
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
internal static bool UInt64OrdinalIgnoreCaseAscii(ulong valueA, ulong valueB)
{
ulong num = (valueA ^ valueB) << 2;
ulong num2 = valueA + 1407396358717445;
num2 |= 45036683478958240;
num2 += 7318461065330714;
num2 = (ulong)((long)num2 | -36029346783166593);
return (num & num2) == 0;
}
}
}