5
5
"encoding/binary"
6
6
"fmt"
7
7
"io"
8
+ "math"
8
9
"sort"
9
10
"strconv"
10
11
"strings"
@@ -234,11 +235,15 @@ func (s *UUIDSet) MinusInterval(in IntervalSlice) {
234
235
i , j := 0 , 0
235
236
var minuend Interval
236
237
var subtrahend Interval
237
- for j < len ( in ) && i < len (s .Intervals ) {
238
+ for i < len (s .Intervals ) {
238
239
if minuend .Stop != s .Intervals [i ].Stop { // `i` changed?
239
240
minuend = s .Intervals [i ]
240
241
}
241
- subtrahend = in [j ]
242
+ if j < len (in ) {
243
+ subtrahend = in [j ]
244
+ } else {
245
+ subtrahend = Interval {math .MaxInt64 , math .MaxInt64 }
246
+ }
242
247
243
248
if minuend .Stop <= subtrahend .Start {
244
249
// no overlapping
@@ -248,33 +253,25 @@ func (s *UUIDSet) MinusInterval(in IntervalSlice) {
248
253
// no overlapping
249
254
j ++
250
255
} else {
251
- if minuend .Start < subtrahend .Start && minuend .Stop < subtrahend .Stop {
256
+ if minuend .Start < subtrahend .Start && minuend .Stop <= subtrahend .Stop {
252
257
n = append (n , Interval {minuend .Start , subtrahend .Start })
253
258
i ++
254
- } else if minuend .Start > subtrahend .Start && minuend .Stop > subtrahend .Stop {
259
+ } else if minuend .Start >= subtrahend .Start && minuend .Stop > subtrahend .Stop {
255
260
minuend = Interval {subtrahend .Stop , minuend .Stop }
256
261
j ++
257
262
} else if minuend .Start >= subtrahend .Start && minuend .Stop <= subtrahend .Stop {
258
263
// minuend is completely removed
259
264
i ++
260
- } else {
265
+ } else if minuend . Start < subtrahend . Start && minuend . Stop > subtrahend . Stop {
261
266
n = append (n , Interval {minuend .Start , subtrahend .Start })
262
267
minuend = Interval {subtrahend .Stop , minuend .Stop }
263
268
j ++
269
+ } else {
270
+ panic ("should never be here" )
264
271
}
265
272
}
266
273
}
267
274
268
- lastSub := in [len (in )- 1 ]
269
- for ; i < len (s .Intervals ); i ++ {
270
- minuend = s .Intervals [i ]
271
- if minuend .Start < lastSub .Stop {
272
- n = append (n , Interval {lastSub .Stop , minuend .Stop })
273
- } else {
274
- n = append (n , s .Intervals [i ])
275
- }
276
- }
277
-
278
275
s .Intervals = n .Normalize ()
279
276
}
280
277
0 commit comments