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;
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 readonly object DoubleNegativeZero = -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)
{
return value;
}
internal static object Get(double value)
{
if (value == 0) {
if (!double.IsNegativeInfinity(1 / value))
return DoubleZero;
return DoubleNegativeZero;
}
if (double.IsInfinity(value)) {
if (!double.IsPositiveInfinity(value))
return DoubleNegativeInfinity;
return DoublePositiveInfinity;
}
if (double.IsNaN(value))
return DoubleNaN;
return value;
}
}
}