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
}
}