File: src\Workspaces\SharedUtilitiesAndExtensions\Workspace\Core\CodeGeneration\LiteralSpecialValues.cs
Web Access
Project: src\src\Workspaces\Core\Portable\Microsoft.CodeAnalysis.Workspaces.csproj (Microsoft.CodeAnalysis.Workspaces)
// 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.Collections.Generic;
 
namespace Microsoft.CodeAnalysis.CodeGeneration;
 
/// <summary>
/// When we are generating literals, we sometimes want to emit code vs. the numeric literal. This class
/// gives the constants for all ones we want to convert
/// </summary>
internal static class LiteralSpecialValues
{
    // Keep in sync with special values below.
    public static bool HasSpecialValues(SpecialType specialType)
    {
        switch (specialType)
        {
            case SpecialType.System_SByte:
            case SpecialType.System_Int16:
            case SpecialType.System_UInt16:
            case SpecialType.System_Int32:
            case SpecialType.System_UInt32:
            case SpecialType.System_Int64:
            case SpecialType.System_UInt64:
            case SpecialType.System_Single:
            case SpecialType.System_Double:
            case SpecialType.System_Decimal:
                return true;
            default:
                return false;
        }
    }
 
    // Let's not have special values for byte. byte.MaxValue seems overkill versus 255.
    public static readonly IEnumerable<KeyValuePair<byte, string>> ByteSpecialValues = [];
 
    public static readonly IEnumerable<KeyValuePair<sbyte, string>> SByteSpecialValues = new Dictionary<sbyte, string>()
    {
        { sbyte.MinValue, nameof(sbyte.MinValue) },
        { sbyte.MaxValue, nameof(sbyte.MaxValue) },
    };
 
    public static readonly IEnumerable<KeyValuePair<short, string>> Int16SpecialValues = new Dictionary<short, string>()
    {
        { short.MinValue, nameof(short.MinValue) },
        { short.MaxValue, nameof(short.MaxValue) },
    };
 
    public static readonly IEnumerable<KeyValuePair<ushort, string>> UInt16SpecialValues = new Dictionary<ushort, string>()
    {
        { ushort.MaxValue, nameof(ushort.MaxValue) },
    };
 
    public static readonly IEnumerable<KeyValuePair<int, string>> Int32SpecialValues = new Dictionary<int, string>()
    {
        { int.MinValue, nameof(int.MinValue) },
        { int.MaxValue, nameof(int.MaxValue) },
    };
 
    public static readonly IEnumerable<KeyValuePair<uint, string>> UInt32SpecialValues = new Dictionary<uint, string>()
    {
        { uint.MaxValue, nameof(uint.MaxValue) },
    };
 
    public static readonly IEnumerable<KeyValuePair<long, string>> Int64SpecialValues = new Dictionary<long, string>()
    {
        { long.MinValue, nameof(long.MinValue) },
        { long.MaxValue, nameof(long.MaxValue) },
    };
 
    public static readonly IEnumerable<KeyValuePair<ulong, string>> UInt64SpecialValues = new Dictionary<ulong, string>()
    {
        { ulong.MaxValue, nameof(ulong.MaxValue) },
    };
 
    public static readonly IEnumerable<KeyValuePair<float, string>> SingleSpecialValues = new Dictionary<float, string>()
    {
        { float.MinValue, nameof(float.MinValue) },
        { float.MaxValue, nameof(float.MaxValue) },
        { float.Epsilon, nameof(float.Epsilon) },
        { float.NaN, nameof(float.NaN) },
        { float.NegativeInfinity, nameof(float.NegativeInfinity) },
        { float.PositiveInfinity, nameof(float.PositiveInfinity) },
    };
 
    public static readonly IEnumerable<KeyValuePair<double, string>> DoubleSpecialValues = new Dictionary<double, string>()
    {
        { double.MinValue, nameof(double.MinValue) },
        { double.MaxValue, nameof(double.MaxValue) },
        { double.Epsilon, nameof(double.Epsilon) },
        { double.NaN, nameof(double.NaN) },
        { double.NegativeInfinity, nameof(double.NegativeInfinity) },
        { double.PositiveInfinity, nameof(double.PositiveInfinity) },
    };
 
    public static readonly IEnumerable<KeyValuePair<decimal, string>> DecimalSpecialValues = new Dictionary<decimal, string>()
    {
        { decimal.MinValue, nameof(decimal.MinValue) },
        { decimal.MaxValue, nameof(decimal.MaxValue) },
    };
}