public void RemoveInclusive(DoubleRange range) { // if the range doesn't intersect this collection do nothing if (!range.IntersectsInclusive(DoubleRange.FromEndpoints(this.Lower, this.Upper))) { return; } var middle = new List <DoubleRange>(); foreach (var S in this.ranges) { if (!range.IntersectsInclusive(S)) { middle.Add(S); continue; } if ((range.Lower <= S.Lower) && (range.Upper >= S.Upper)) { // disregard S completely continue; } if (range.Lower > S.Lower) { if (S.Lower <= (range.Lower - double.Epsilon)) { var X = DoubleRange.FromEndpoints(S.Lower, range.Lower); middle.Add(X); } } if (range.Upper <= S.Upper) { if ((range.Upper + double.Epsilon) <= S.Upper) { var X = DoubleRange.FromEndpoints(range.Upper, S.Upper); middle.Add(X); } } else { throw new System.InvalidOperationException("internal error"); } } this.ranges = middle; }
public void RemoveInclusive(DoubleRange range) { // if the range doesn't intersect this collection do nothing if (!range.IntersectsInclusive(DoubleRange.FromEndpoints(this.Lower, this.Upper))) { return; } var middle = new List<DoubleRange>(); foreach (var S in this.ranges) { if (!range.IntersectsInclusive(S)) { middle.Add(S); continue; } if ((range.Lower <= S.Lower) && (range.Upper >= S.Upper)) { // disregard S completely continue; } if (range.Lower > S.Lower) { if (S.Lower <= (range.Lower - double.Epsilon)) { var X = DoubleRange.FromEndpoints(S.Lower, range.Lower); middle.Add(X); } } if (range.Upper <= S.Upper) { if ((range.Upper + double.Epsilon) <= S.Upper) { var X = DoubleRange.FromEndpoints(range.Upper, S.Upper); middle.Add(X); } } else { throw new System.InvalidOperationException("internal error"); } } this.ranges = middle; }