namespace VideoBrowser.Extensions { using VideoBrowser.Common; /// /// Defines the /// public static class RangeExtension { #region Methods /// /// The Center /// /// The range /// The public static double Center(this RangeDouble range) { var center = range.Start + range.Length() * 0.5; return center; } /// /// The Contains /// /// The container /// The range /// The public static bool Contains(this RangeDouble container, RangeDouble range) { var contains = range.Start.IsInRange(container.Start, container.End) && range.End.IsInRange(container.Start, container.End); return contains; } /// /// The Contains /// /// The container /// The range /// The public static bool Contains(this RangeInt container, RangeInt range) { var contains = range.Start.IsInRange(container.Start, container.End) && range.End.IsInRange(container.Start, container.End); return contains; } /// /// The IsEmpty /// /// The range /// The public static bool IsEmpty(this RangeDouble range) { var isEmpty = range.Start.IsZero() && range.End.IsZero(); return isEmpty; } /// /// Determines whether [is in range] [the specified minimum]. /// /// The value. /// The minimum. /// The maximum. /// The public static bool IsInRange(this double value, double min, double max) { return (min < max) ? value >= min && value <= max : value >= max && value <= min; } /// /// The IsInRange /// /// The value /// The min /// The max /// The public static bool IsInRange(this int value, int min, int max) { return (min < max) ? value >= min && value <= max : value >= max && value <= min; } /// /// Lengthes the specified range. /// /// The range. /// The length in double. public static double Length(this RangeDouble range) { return range.End - range.Start; } /// /// The Length /// /// The range /// The public static int Length(this RangeInt range) { return range.End - range.Start; } /// /// The MoveInsideContainer /// /// The range /// The container /// The public static RangeDouble MoveInsideContainer(this RangeDouble range, RangeDouble container) { if (container.Contains(range)) { return range; } var length = range.Length(); if (length > container.Length()) { length = container.Length(); } var rangeInside = range.Start < container.Start ? new RangeDouble(container.Start, container.Start + length) : new RangeDouble(container.End - length, container.End); return rangeInside; } /// /// The Offset the range to the specified distance. /// /// The range /// The distance /// The extentRange /// The public static RangeDouble Offset(this RangeDouble range, double distance, RangeDouble extentRange) { var length = range.Length(); if (extentRange.Length() < length) { length = extentRange.Length(); } var start = range.Start + distance; var end = start + length; var newRange = new RangeDouble(start, end); if (extentRange.Contains(newRange)) { return newRange; } return start < extentRange.Start ? new RangeDouble(extentRange.Start, extentRange.Start + length) : new RangeDouble(extentRange.End - length, extentRange.End); } #endregion Methods } }