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));
}