示例#1
0
 public IntegerInterval[] InsertTransformInsertionSwappedPrecedence(IntegerInterval asInsertion)
 {
     if (asInsertion.Left < Left)
     {
         return new IntegerInterval[] { new IntegerInterval(Left + asInsertion.Length, Length) };
     }
     else
     {
         return new IntegerInterval[] { this };
     }
 }
示例#2
0
 public IntegerInterval[] InsertTransformInsertion(IntegerInterval asInsertion)
 {
     if (asInsertion.Left <= Left)
     {
         return new IntegerInterval[] { new IntegerInterval(Left + asInsertion.Length, Length) };
     }
     else
     {
         return new IntegerInterval[] { this };
     }
 }
示例#3
0
 public IntegerInterval[] DeleteTransformSelection(IntegerInterval asInsertion)
 {
     int leftShiftCount = Math.Max(0, Math.Min(Left - asInsertion.Left, asInsertion.Length));
     int upperBoundMin = Math.Min(Left + Length - 1, asInsertion.Left + asInsertion.Length - 1);
     int lowerBoundMax = Math.Max(Left, asInsertion.Left);
     int lengthReduction = (lowerBoundMax <= upperBoundMin) ? Math.Max(upperBoundMin - lowerBoundMax + 1, 0) : 0;
     int newLength = Length - lengthReduction;
     if (newLength > 0)
     {
         return new IntegerInterval[] { new IntegerInterval(Left - leftShiftCount, newLength) };
     }
     else
     {
         return new IntegerInterval[] { };
     }
 }
示例#4
0
 public IntegerInterval[] InsertTransformSelection(IntegerInterval Tranformer)
 {
     if (Tranformer.Left <= Left)
     {
         return new IntegerInterval[] { new IntegerInterval(Left + Tranformer.Length, Length) };
     }
     else if (Tranformer.Left < Left + Length)
     {
         //the insert is in the middle of the selection, so it'll split in two
         return new IntegerInterval[] { new IntegerInterval(Left, Tranformer.Left - Left),
         new IntegerInterval(Tranformer.Left + Tranformer.Length, Length - (Tranformer.Left - Left))};
     }
     else
     {
         return new IntegerInterval[] { this };
     }
 }
示例#5
0
 public IntegerInterval[] DeleteTransformInsertion(IntegerInterval asDeletion)
 {
     int leftShift = Math.Max(0, Math.Min(Left - asDeletion.Left, asDeletion.Length));
     return new IntegerInterval[] { new IntegerInterval(Left - leftShift, Length) };
 }
示例#6
0
 public IntegerInterval Union(IntegerInterval other)
 {
     IntegerInterval result = new IntegerInterval();
     if (other.Right >= Left && other.Left <= Right)
     {
         result.Left = Math.Min(other.Left, Left);
         result.Length = Math.Max(other.Right, Right) - result.Left + 1;
     }
     else
     {
         result.Left = 0;
         result.Length = 0;
     }
     return result;
 }
示例#7
0
 public IntegerInterval[] Subtract(IntegerInterval other)
 {
     if (other.Right >= Left && other.Left <= Right)
     {
         int leftResultLength = Math.Max(other.Left - Left, 0);
         int rightResultLength = Math.Max(Right - other.Right, 0);
         if (leftResultLength + rightResultLength < this.Length)
         {
             if (leftResultLength > 0)
             {
                 if (rightResultLength > 0)
                 {
                     return new IntegerInterval[] { new IntegerInterval(Left, leftResultLength), new IntegerInterval(Right - rightResultLength + 1, rightResultLength) };
                 }
                 else
                 {
                     return new IntegerInterval[] { new IntegerInterval(Left, leftResultLength) };
                 }
             }
             else
             {
                 if (rightResultLength > 0)
                 {
                     return new IntegerInterval[] { new IntegerInterval(Right - rightResultLength + 1, rightResultLength) };
                 }
                 else
                 {
                     return new IntegerInterval[] { };
                 }
             }
         }
     }
     return new IntegerInterval[] { this };
 }