// // Copyright (c) James Jackson-South and contributors. // Licensed under the Apache License, Version 2.0. // using System.Runtime.CompilerServices; namespace ImageSharp { using System; /// /// Extension methods for classes that implement . /// internal static class ComparableExtensions { /// /// Restricts a to be within a specified range. /// /// The The value to clamp. /// The minimum value. If value is less than min, min will be returned. /// The maximum value. If value is greater than max, max will be returned. /// /// The representing the clamped value. /// public static byte Clamp(this byte value, byte min, byte max) { // Order is important here as someone might set min to higher than max. if (value > max) { return max; } if (value < min) { return min; } return value; } /// /// Restricts a to be within a specified range. /// /// The The value to clamp. /// The minimum value. If value is less than min, min will be returned. /// The maximum value. If value is greater than max, max will be returned. /// /// The representing the clamped value. /// public static uint Clamp(this uint value, uint min, uint max) { if (value > max) { return max; } if (value < min) { return min; } return value; } /// /// Restricts a to be within a specified range. /// /// The The value to clamp. /// The minimum value. If value is less than min, min will be returned. /// The maximum value. If value is greater than max, max will be returned. /// /// The representing the clamped value. /// public static int Clamp(this int value, int min, int max) { if (value > max) { return max; } if (value < min) { return min; } return value; } /// /// Restricts a to be within a specified range. /// /// The The value to clamp. /// The minimum value. If value is less than min, min will be returned. /// The maximum value. If value is greater than max, max will be returned. /// /// The representing the clamped value. /// /// [MethodImpl(MethodImplOptions.AggressiveInlining)] public static float Clamp(this float value, float min, float max) { if (value > max) { return max; } if (value < min) { return min; } return value; } /// /// Restricts a to be within a specified range. /// /// The The value to clamp. /// The minimum value. If value is less than min, min will be returned. /// The maximum value. If value is greater than max, max will be returned. /// /// The representing the clamped value. /// public static double Clamp(this double value, double min, double max) { if (value > max) { return max; } if (value < min) { return min; } return value; } /// /// Converts an to a first restricting the value between the /// minimum and maximum allowable ranges. /// /// The this method extends. /// The public static byte ToByte(this int value) { return (byte)value.Clamp(0, 255); } /// /// Converts an to a first restricting the value between the /// minimum and maximum allowable ranges. /// /// The this method extends. /// The public static byte ToByte(this float value) { return (byte)value.Clamp(0, 255); } /// /// Converts an to a first restricting the value between the /// minimum and maximum allowable ranges. /// /// The this method extends. /// The public static byte ToByte(this double value) { return (byte)value.Clamp(0, 255); } } }