RemoveRangeWith removes all segments in the given range. An iterator to the newly formed gap is returned, and all existing iterators are invalidated. The function f is applied to each segment immediately before it is removed, in order of ascending keys. Segments that lie partially outside r are spl
(r Range, f func(seg Iterator))
| 627 | // |
| 628 | // N.B. f must not invalidate iterators into s. |
| 629 | func (s *Set) RemoveRangeWith(r Range, f func(seg Iterator)) GapIterator { |
| 630 | seg, gap := s.Find(r.Start) |
| 631 | if seg.Ok() { |
| 632 | seg = s.Isolate(seg, r) |
| 633 | if f != nil { |
| 634 | f(seg) |
| 635 | } |
| 636 | gap = s.Remove(seg) |
| 637 | } |
| 638 | for seg = gap.NextSegment(); seg.Ok() && seg.Start() < r.End; seg = gap.NextSegment() { |
| 639 | seg = s.SplitAfter(seg, r.End) |
| 640 | if f != nil { |
| 641 | f(seg) |
| 642 | } |
| 643 | gap = s.Remove(seg) |
| 644 | } |
| 645 | return gap |
| 646 | } |
| 647 | |
| 648 | // RemoveFullRangeWith is equivalent to RemoveRangeWith, except that if any key |
| 649 | // in the given range does not correspond to a segment, RemoveFullRangeWith |
no test coverage detected