public LongSet AddOffset(long val) { if (val == 0) { return(this); } var newIntervals = new List <LongInterval>(Intervals.Length + 1); foreach (var element in Intervals) { long newStart = unchecked (element.Start + val); long newInclusiveEnd = unchecked (element.InclusiveEnd + val); if (newStart <= newInclusiveEnd) { newIntervals.Add(LongInterval.Inclusive(newStart, newInclusiveEnd)); } else { // interval got split by integer overflow newIntervals.Add(LongInterval.Inclusive(newStart, long.MaxValue)); newIntervals.Add(LongInterval.Inclusive(long.MinValue, newInclusiveEnd)); } } newIntervals.Sort((a, b) => a.Start.CompareTo(b.Start)); return(new LongSet(MergeOverlapping(newIntervals).ToImmutableArray())); }
public LongSet(long value) : this(ImmutableArray.Create(LongInterval.Inclusive(value, value))) { }