Example #1
0
 public void Add(Range rangeToAdd)
 {
     if (rangeToAdd.IsEmpty)
     {
         return;
     }
     for (LinkedListNode <Range> i = ranges.First; i != null; i = i.Next)
     {
         IntersectStruct r = Range.Intersect(rangeToAdd, i.Value);
         if (r.RelativePosition < 0)
         {
             ranges.AddBefore(i, rangeToAdd);
             rangeToAdd = new Range();
             break;
         }
         else if (r.RelativePosition > 0)
         {
         }
         else
         {
             if (!r.Leftover1Left.IsEmpty)
             {
                 ranges.AddBefore(i, r.Leftover1Left);
             }
             if (!r.Leftover2Left.IsEmpty)
             {
                 ranges.AddBefore(i, r.Leftover2Left);
             }
             if (!r.Common.IsEmpty)
             {
                 i.Value = r.Common;
             }
             if (!r.Leftover2Right.IsEmpty)
             {
                 i = ranges.AddAfter(i, r.Leftover2Right);
             }
             if (!r.Leftover1Right.IsEmpty)
             {
                 rangeToAdd = r.Leftover1Right;
             }
             else
             {
                 rangeToAdd = new Range();
                 break;
             }
         }
     }
     if (!rangeToAdd.IsEmpty)
     {
         ranges.AddLast(rangeToAdd);
     }
     MergeDown();
 }
Example #2
0
 public void Remove(Range rangeToRemove)
 {
     for (LinkedListNode <Range> i = ranges.First; i != null;)
     {
         LinkedListNode <Range> next = i.Next;
         IntersectStruct        r    = Range.Intersect(rangeToRemove, i.Value);
         if (r.RelativePosition == 0)
         {
             rangeToRemove = r.Leftover1Right;
             if (!r.Leftover2Left.IsEmpty)
             {
                 ranges.AddBefore(i, r.Leftover2Left);
             }
             if (!r.Leftover2Right.IsEmpty)
             {
                 ranges.AddBefore(i, r.Leftover2Right);
             }
             ranges.Remove(i);
         }
         i = next;
     }
     MergeDown();
 }