in store/slot.go [210:240]
func RemoveSlotFromSlotRanges(source SlotRanges, slot SlotRange) SlotRanges {
sort.Slice(source, func(i, j int) bool {
return source[i].Start < source[j].Start
})
if !source.HasOverlap(slot) {
return source
}
result := make([]SlotRange, 0, len(source))
for _, slotRange := range source {
// if no overlap, keep original range
if !slotRange.HasOverlap(&slot) {
result = append(result, slotRange)
continue
}
// if overlap, then we need to create a new left and right range
if slotRange.Start < slot.Start {
result = append(result, SlotRange{
Start: slotRange.Start,
Stop: slot.Start - 1,
})
}
if slotRange.Stop > slot.Stop {
result = append(result, SlotRange{
Start: slot.Stop + 1,
Stop: slotRange.Stop,
})
}
}
return result
}