Plane.Sdk3/PlaneGcsSdk.Contract_Shared/MathExtensions.cs
2017-02-27 02:02:19 +08:00

32 lines
1.3 KiB
C#

using System;
namespace Plane
{
public static class MathExtensions
{
public static bool IsInRange<T>(this T value, T min, T max) where T : struct, IComparable<T>
{
if (min.CompareTo(max) > 0)
{
throw new ArgumentException($"The {nameof(min)} argument ({min}) must be less than or equal to the {nameof(max)} argument ({max}).");
}
return value.CompareTo(min) >= 0 && value.CompareTo(max) <= 0;
}
public static T Limit<T>(this T value, T? min = null, T? max = null) where T : struct, IComparable<T>
{
if (min.HasValue && max.HasValue && min.Value.CompareTo(max.Value) > 0)
{
throw new ArgumentException($"The {nameof(min)} argument ({min}) must be less than or equal to the {nameof(max)} argument ({max}).");
}
if (!min.HasValue && !max.HasValue)
{
throw new ArgumentException($"The {nameof(min)} argument and the {nameof(max)} argument are both missing.");
}
if (min.HasValue && value.CompareTo(min.Value) < 0) return min.Value;
if (max.HasValue && value.CompareTo(max.Value) > 0) return max.Value;
return value;
}
}
}