X-Git-Url: https://git.arvados.org/lightning.git/blobdiff_plain/365adc74eb21f1654611cb309738ffb07c1ca357..cf6bba16548ea76aef580fce9fdd04abebcd7d3f:/mask.go diff --git a/mask.go b/mask.go index 7d614fa4aa..42232e04f5 100644 --- a/mask.go +++ b/mask.go @@ -27,6 +27,9 @@ type mask struct { } func (m *mask) Add(seqname string, start, end int) { + if m.frozen { + panic("bug: (*mask)Add() called after Freeze()") + } if m.intervals == nil { m.intervals = map[string][]interval{} } @@ -48,6 +51,17 @@ func (m *mask) Check(seqname string, start, end int) bool { return m.itrees[seqname].check(0, interval{start, end}) } +func (m *mask) Len() int { + if !m.frozen { + return 0 + } + n := 0 + for _, intervals := range m.intervals { + n += len(intervals) + } + return n +} + func (m *mask) freeze(in []interval) intervalTree { if len(in) == 0 { return nil @@ -60,10 +74,10 @@ func (m *mask) freeze(in []interval) intervalTree { itreesize = itreesize * 2 } itree := make(intervalTree, itreesize) - itree.importSlice(0, in) - for i := len(in); i < itreesize; i++ { + for i := 0; i < itreesize; i++ { itree[i].maxend = -1 } + itree.importSlice(0, in) return itree }