BoxedPrimitives
using System.Runtime.CompilerServices;
namespace Newtonsoft.Json.Utilities
{
    [System.Runtime.CompilerServices.NullableContext(1)]
    [System.Runtime.CompilerServices.Nullable(0)]
    internal static class BoxedPrimitives
    {
        internal static readonly object BooleanTrue = true;
        internal static readonly object BooleanFalse = false;
        internal static readonly object Int32_M1 = -1;
        internal static readonly object Int32_0 = 0;
        internal static readonly object Int32_1 = 1;
        internal static readonly object Int32_2 = 2;
        internal static readonly object Int32_3 = 3;
        internal static readonly object Int32_4 = 4;
        internal static readonly object Int32_5 = 5;
        internal static readonly object Int32_6 = 6;
        internal static readonly object Int32_7 = 7;
        internal static readonly object Int32_8 = 8;
        internal static readonly object Int64_M1 = -1;
        internal static readonly object Int64_0 = 0;
        internal static readonly object Int64_1 = 1;
        internal static readonly object Int64_2 = 2;
        internal static readonly object Int64_3 = 3;
        internal static readonly object Int64_4 = 4;
        internal static readonly object Int64_5 = 5;
        internal static readonly object Int64_6 = 6;
        internal static readonly object Int64_7 = 7;
        internal static readonly object Int64_8 = 8;
        private static readonly object DecimalZero = decimal.Zero;
        internal static readonly object DoubleNaN = NaN;
        internal static readonly object DoublePositiveInfinity = Infinity;
        internal static readonly object DoubleNegativeInfinity = -Infinity;
        internal static readonly object DoubleZero = 0;
        internal static object Get(bool value)
        {
            if (!value)
                return BooleanFalse;
            return BooleanTrue;
        }
        internal static object Get(int value)
        {
            switch (value) {
            case -1:
                return Int32_M1;
            case 0:
                return Int32_0;
            case 1:
                return Int32_1;
            case 2:
                return Int32_2;
            case 3:
                return Int32_3;
            case 4:
                return Int32_4;
            case 5:
                return Int32_5;
            case 6:
                return Int32_6;
            case 7:
                return Int32_7;
            case 8:
                return Int32_8;
            default:
                return value;
            }
        }
        internal static object Get(long value)
        {
            long num = value - -1;
            if ((ulong)num <= 9) {
                switch (num) {
                case 0:
                    return Int64_M1;
                case 1:
                    return Int64_0;
                case 2:
                    return Int64_1;
                case 3:
                    return Int64_2;
                case 4:
                    return Int64_3;
                case 5:
                    return Int64_4;
                case 6:
                    return Int64_5;
                case 7:
                    return Int64_6;
                case 8:
                    return Int64_7;
                case 9:
                    return Int64_8;
                }
            }
            return value;
        }
        internal static object Get(decimal value)
        {
            if (!(value == decimal.Zero))
                return value;
            return DecimalZero;
        }
        internal static object Get(double value)
        {
            if (value == 0)
                return DoubleZero;
            if (double.IsInfinity(value)) {
                if (!double.IsPositiveInfinity(value))
                    return DoubleNegativeInfinity;
                return DoublePositiveInfinity;
            }
            if (double.IsNaN(value))
                return DoubleNaN;
            return value;
        }
    }
}