// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System.Diagnostics; using System.Runtime.CompilerServices; using System.Text; namespace System.Globalization { internal static class SurrogateCasing { [MethodImpl(MethodImplOptions.AggressiveInlining)] internal static void ToUpper(char h, char l, out char hr, out char lr) { Debug.Assert(char.IsHighSurrogate(h)); Debug.Assert(char.IsLowSurrogate(l)); UnicodeUtility.GetUtf16SurrogatesFromSupplementaryPlaneScalar(CharUnicodeInfo.ToUpper(UnicodeUtility.GetScalarFromUtf16SurrogatePair(h, l)), out hr, out lr); Debug.Assert(char.IsHighSurrogate(hr)); Debug.Assert(char.IsLowSurrogate(lr)); } [MethodImpl(MethodImplOptions.AggressiveInlining)] internal static void ToLower(char h, char l, out char hr, out char lr) { Debug.Assert(char.IsHighSurrogate(h)); Debug.Assert(char.IsLowSurrogate(l)); UnicodeUtility.GetUtf16SurrogatesFromSupplementaryPlaneScalar(CharUnicodeInfo.ToLower(UnicodeUtility.GetScalarFromUtf16SurrogatePair(h, l)), out hr, out lr); Debug.Assert(char.IsHighSurrogate(hr)); Debug.Assert(char.IsLowSurrogate(lr)); } [MethodImpl(MethodImplOptions.AggressiveInlining)] internal static bool Equal(char h1, char l1, char h2, char l2) { ToUpper(h1, l1, out char hr1, out char lr1); ToUpper(h2, l2, out char hr2, out char lr2); return hr1 == hr2 && lr1 == lr2; } } }