| File: Utilities\CharUtils.cs | Web Access |
| Project: src\src\Microsoft.ML.Core\Microsoft.ML.Core.csproj (Microsoft.ML.Core) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. // See the LICENSE file in the project root for more information. using System.Runtime.CompilerServices; using System.Threading; namespace Microsoft.ML.Internal.Utilities { [BestFriend] internal static class CharUtils { private const int CharsCount = 0x10000; private static volatile char[] _lowerInvariantChars; private static volatile char[] _upperInvariantChars; private static char[] EnsureLowerInvariant() { var lower = new char[CharsCount]; for (int i = 0; i < lower.Length; i++) lower[i] = char.ToLowerInvariant((char)i); Interlocked.CompareExchange(ref _lowerInvariantChars, lower, null); return _lowerInvariantChars; } private static char[] EnsureUpperInvariant() { var upper = new char[CharsCount]; for (int i = 0; i < upper.Length; i++) upper[i] = char.ToUpperInvariant((char)i); Interlocked.CompareExchange(ref _upperInvariantChars, upper, null); return _upperInvariantChars; } [MethodImpl(MethodImplOptions.AggressiveInlining)] public static char ToLowerInvariant(char c) { var lower = _lowerInvariantChars ?? EnsureLowerInvariant(); return lower[c]; } [MethodImpl(MethodImplOptions.AggressiveInlining)] public static char ToUpperInvariant(char c) { var upper = _upperInvariantChars ?? EnsureUpperInvariant(); return upper[c]; } } }