X-Git-Url: https://git.arvados.org/lightning.git/blobdiff_plain/dc0b5b0294a8ba771407c4c193b2e8017bf6315e..6e83d50c4d29656055a9c8e1a155309017a0d66d:/mask.go diff --git a/mask.go b/mask.go index bf7487948d..42232e04f5 100644 --- a/mask.go +++ b/mask.go @@ -1,3 +1,7 @@ +// Copyright (C) The Lightning Authors. All rights reserved. +// +// SPDX-License-Identifier: AGPL-3.0 + package lightning import ( @@ -23,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{} } @@ -44,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 @@ -56,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 }