canto/Assets/Scripts/System/Numerics/Saturating.cs
2025-08-14 19:11:32 -04:00

101 lines
2.4 KiB
C#

namespace KitsuneCafe.Sys.Numerics
{
public static class Saturating
{
public static sbyte Add(sbyte a, sbyte b)
{
sbyte value = unchecked((sbyte)(a + b));
return value < a ? sbyte.MaxValue : value;
}
public static byte Add(byte a, byte b)
{
byte value = unchecked((byte)(a + b));
return value < a ? byte.MaxValue : value;
}
public static short Add(short a, short b)
{
short value = unchecked((short)(a + b));
return value < a ? short.MaxValue : value;
}
public static ushort Add(ushort a, ushort b)
{
ushort value = unchecked((ushort)(a + b));
return value < a ? ushort.MaxValue : value;
}
public static int Add(int a, int b)
{
int value = unchecked(a + b);
return value < a ? int.MaxValue : value;
}
public static uint Add(uint a, uint b)
{
uint value = unchecked(a + b);
return value < a ? uint.MaxValue : value;
}
public static long Add(long a, long b)
{
long value = unchecked(a + b);
return value < a ? long.MaxValue : value;
}
public static ulong Add(ulong a, ulong b)
{
ulong value = unchecked(a + b);
return value < a ? ulong.MaxValue : value;
}
public static sbyte Sub(sbyte a, sbyte b)
{
sbyte value = unchecked((sbyte)(a - b));
return value < a ? sbyte.MaxValue : value;
}
public static byte Sub(byte a, byte b)
{
byte value = unchecked((byte)(a - b));
return value < a ? byte.MaxValue : value;
}
public static short Sub(short a, short b)
{
short value = unchecked((short)(a - b));
return value < a ? short.MaxValue : value;
}
public static ushort Sub(ushort a, ushort b)
{
ushort value = unchecked((ushort)(a - b));
return value < a ? ushort.MaxValue : value;
}
public static int Sub(int a, int b)
{
int value = unchecked(a - b);
return value < a ? int.MaxValue : value;
}
public static uint Sub(uint a, uint b)
{
uint value = unchecked(a - b);
return value < a ? uint.MaxValue : value;
}
public static long Sub(long a, long b)
{
long value = unchecked(a - b);
return value < a ? long.MaxValue : value;
}
public static ulong Sub(ulong a, ulong b)
{
ulong value = unchecked(a - b);
return value < a ? ulong.MaxValue : value;
}
}
}