public void AddLiveInterval(SlotIndex start, SlotIndex end) { if (LiveIntervals.Count == 0) { LiveIntervals.Add(new LiveInterval(this, start, end)); return; } for (int i = 0; i < LiveIntervals.Count; i++) { var liveRange = LiveIntervals[i]; if (liveRange.Start == start && liveRange.End == end) { return; } if (liveRange.IsAdjacent(start, end) || liveRange.Intersects(start, end)) { liveRange = liveRange.CreateExpandedLiveRange(start, end); LiveIntervals[i] = liveRange; for (int z = i + 1; z < LiveIntervals.Count; z++) { var nextLiveRange = LiveIntervals[z]; if (liveRange.IsAdjacent(nextLiveRange) || liveRange.Intersects(nextLiveRange)) { liveRange = liveRange.CreateExpandedLiveInterval(nextLiveRange); LiveIntervals[i] = liveRange; LiveIntervals.RemoveAt(z); continue; } return; } return; } if (liveRange.Start > end) { // new range is before the current range (so insert before) LiveIntervals.Insert(i, new LiveInterval(this, start, end)); return; } } // new range is after the last range LiveIntervals.Add(new LiveInterval(this, start, end)); }
public void Remove(LiveInterval liveInterval) { LiveIntervals.Remove(liveInterval); }
public void Add(LiveInterval liveInterval) { LiveIntervals.Add(liveInterval); }