Mega Code Archive

 
Categories / C# / Data Types
 

Availible Double Range

using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Schedule.Utils {     public class AvailibleDoubleRange      {         private double _start;         private double _end;         public double Start { get { return _start;  } internal set { _start = value; } }         public double End { get { return _end; } internal set { _end = value; } }         public AvailibleDoubleRange(double start, double end)         {             _start = start;             _end = end;             AvailibleRange = new DoubleRange[] { new DoubleRange() { Start = start, End = end } };         }         public DoubleRange[] AvailibleRange { get; private set; }         public void SubtractRange(Double start, Double end)         {             List<DoubleRange> newRanges = new List<DoubleRange>(AvailibleRange);                          for (int i = newRanges.Count - 1; i >= 0; i--)             {                 if (start <= newRanges[i].Start && end >= newRanges[i].End)                 {                     // subtract range is larger then item, remove the item                     newRanges.RemoveAt(i);                 }                 else if (start == newRanges[i].Start)                 {                     // if the range start is equal to the start of the other item, adjust start                     newRanges[i] = new DoubleRange(end, newRanges[i].End);                 }                 else if (end == newRanges[i].End)                 {                     // if the range end is equal to the start of the other item, adjust end                     newRanges[i] = new DoubleRange(newRanges[i].Start, start);                 }                 else if (start > newRanges[i].Start && end < newRanges[i].End)                 {                     // split the ranges                     DoubleRange leftRange = new DoubleRange(){ Start = newRanges[i].Start, End = start};                     DoubleRange rightRange = new DoubleRange() { Start = end, End = newRanges[i].End };                     newRanges.RemoveAt(i);                     newRanges.Add(leftRange);                     newRanges.Add(rightRange);                 }             }             AvailibleRange = newRanges.ToArray();         }         public void AddRange(DoubleRange range)         {             throw new NotSupportedException();         }         internal AvailibleDoubleRange Clone()         {             AvailibleDoubleRange copy = new AvailibleDoubleRange(this.Start, this.End);             copy.AvailibleRange = this.AvailibleRange.Clone() as DoubleRange[];             return copy;         }     }     public struct DoubleRange     {         private double _start;         private double _end;         public DoubleRange(double start, double end)         {             _start = start;             _end = end;         }         public double Start { get { return _start; } internal set { _start = value; } }         public double End { get { return _end; } internal set { _end = value; } }     } }