Example #1
0
        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()));
        }
Example #2
0
 public LongSet(long value)
     : this(ImmutableArray.Create(LongInterval.Inclusive(value, value)))
 {
 }