/// <summary> /// Clamps <paramref name="value"/> to a given inclusive range between <paramref name="min"/> and <paramref name="max"/>. /// </summary> /// <param name="_this">The <see cref="IComparer"/> used for comparisons.</param> /// <param name="value"></param> /// <param name="min">The lower border of the range. Is considered lower than <paramref name="_this"/> if null.</param> /// <param name="max">The upper border of the range. Is considered higher than <paramref name="_this"/> if null.</param> /// <returns>The clamped version of <paramref name="value"/>.</returns> /// <exception cref="ArgumentNullException">Thrown if <paramref name="_this"/> is null.</exception> /// <example> /// <code> /// var result = new MyComparer().Clamp(value, min, max); /// </code> /// </example> public static Object Clamp(this IComparer _this, Object value, Object min, Object max) { Throw.If.Object.IsNull(_this, nameof(_this)); Throw.If.Object.IsNull(value, nameof(value)); if (min != null && max != null && _this.IsGreaterThan(min, max)) { return(_this.Clamp(value, max, min)); } Object result = value; if (min != null) { result = _this.Max(value, min); } if (max != null) { result = _this.Min(result, max); } return(result); }
/// <summary> /// Clamps <paramref name="value"/> to a given inclusive range between <paramref name="min"/> and <paramref name="max"/>. /// </summary> /// <typeparam name="T">The type of the objects.</typeparam> /// <param name="_this">The <see cref="IComparer{T}"/> used for comparisons.</param> /// <param name="value"></param> /// <param name="min">The lower border of the range. Is considered lower than <paramref name="_this"/> if null.</param> /// <param name="max">The upper border of the range. Is considered higher than <paramref name="_this"/> if null.</param> /// <returns>The clamped version of <paramref name="value"/>.</returns> /// <exception cref="ArgumentNullException">Thrown if <paramref name="_this"/> is null.</exception> /// <example> /// <code> /// var result = new MyComparer().Clamp(value, min, max); /// </code> /// </example> public static T Clamp <T>(this IComparer <T> _this, T value, T min, T max) { Throw.If.Object.IsNull(_this, nameof(_this)); Throw.If.Object.IsNull(value, nameof(value)); if (min != null && max != null && _this.IsGreaterThan(min, max)) { return(_this.Clamp(value, max, min)); } T result = value; if (min != null) { result = _this.Max(value, min); } if (max != null) { result = _this.Min(result, max); } return(result); }