| File: src\Shared\NumericExtensions\NumericExtensions.cs | Web Access |
| Project: src\test\Generators\Microsoft.Gen.Logging\Generated\Microsoft.Gen.Logging.Generated.Tests.csproj (Microsoft.Gen.Logging.Generated.Tests) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System.Globalization; #pragma warning disable CA1716 namespace Microsoft.Shared.Text; #pragma warning restore CA1716 #pragma warning disable LA0002 // this is the implementation of ToInvariantString, so this warning doesn't make sense here /// <summary> /// Utilities to augment the basic numeric types. /// </summary> #if !SHARED_PROJECT [System.Diagnostics.CodeAnalysis.ExcludeFromCodeCoverage] #endif #if NET8_0_OR_GREATER internal static class NumericExtensions { /// <summary> /// Formats an integer as an invariant string. /// </summary> /// <param name="value">The value to format as a string.</param> /// <returns>The string representation of the integer value.</returns> /// <remarks> /// This works identically to <c>value.ToString(CultureInfo.InvariantCulture)</c> except that it is faster as it maintains /// preformatted strings for common integer values. /// </remarks> public static string ToInvariantString(this int value) => value.ToString(CultureInfo.InvariantCulture); /// <summary> /// Formats a 64-bit integer as an invariant string. /// </summary> /// <param name="value">The value to format as a string.</param> /// <returns>The string representation of the integer value.</returns> /// <remarks> /// This works identically to <c>value.ToString(CultureInfo.InvariantCulture)</c> except that it is faster as it maintains /// preformatted strings for common integer values. /// </remarks> public static string ToInvariantString(this long value) => value.ToString(CultureInfo.InvariantCulture); } #else internal static class NumericExtensions { private const int MinCachedValue = -1; private const int MaxCachedValue = 1024; private const int NumCachedValues = MaxCachedValue - MinCachedValue + 1; private static readonly string[] _cachedValues = MakeCachedValues(); /// <summary> /// Formats an integer as an invariant string. /// </summary> /// <param name="value">The value to format as a string.</param> /// <returns>The string representation of the integer value.</returns> /// <remarks> /// This works identically to <c>value.ToString(CultureInfo.InvariantCulture)</c> except that it is faster as it maintains /// preformatted strings for common integer values. /// </remarks> public static string ToInvariantString(this int value) { if (value >= MinCachedValue && value <= MaxCachedValue) { return _cachedValues[value - MinCachedValue]; } return value.ToString(CultureInfo.InvariantCulture); } /// <summary> /// Formats a 64-bit integer as an invariant string. /// </summary> /// <param name="value">The value to format as a string.</param> /// <returns>The string representation of the integer value.</returns> /// <remarks> /// This works identically to <c>value.ToString(CultureInfo.InvariantCulture)</c> except that it is faster as it maintains /// preformatted strings for common integer values. /// </remarks> public static string ToInvariantString(this long value) { if (value >= MinCachedValue && value <= MaxCachedValue) { return _cachedValues[value - MinCachedValue]; } return value.ToString(CultureInfo.InvariantCulture); } private static string[] MakeCachedValues() { var values = new string[NumCachedValues]; int index = 0; for (int i = MinCachedValue; i <= MaxCachedValue; i++) { values[index++] = i.ToString(CultureInfo.InvariantCulture); } return values; } } #endif