RemoveFullRangeWith is equivalent to RemoveRangeWith, except that if any key in the given range does not correspond to a segment, RemoveFullRangeWith panics.
(r Range, f func(seg Iterator))
| 649 | // in the given range does not correspond to a segment, RemoveFullRangeWith |
| 650 | // panics. |
| 651 | func (s *Set) RemoveFullRangeWith(r Range, f func(seg Iterator)) GapIterator { |
| 652 | seg := s.FindSegment(r.Start) |
| 653 | if !seg.Ok() { |
| 654 | panic(fmt.Sprintf("missing segment at %v", r.Start)) |
| 655 | } |
| 656 | seg = s.SplitBefore(seg, r.Start) |
| 657 | for { |
| 658 | seg = s.SplitAfter(seg, r.End) |
| 659 | if f != nil { |
| 660 | f(seg) |
| 661 | } |
| 662 | end := seg.End() |
| 663 | gap := s.Remove(seg) |
| 664 | if r.End <= end { |
| 665 | return gap |
| 666 | } |
| 667 | seg = gap.NextSegment() |
| 668 | if !seg.Ok() || seg.Start() != end { |
| 669 | panic(fmt.Sprintf("missing segment at %v", end)) |
| 670 | } |
| 671 | } |
| 672 | } |
| 673 | |
| 674 | // MoveFrom moves all segments from s2 to s, replacing all existing segments in |
| 675 | // s and leaving s2 empty. |
no test coverage detected