Fix some tests.
[lightning.git] / mask.go
diff --git a/mask.go b/mask.go
index bf7487948d314969cc14d70d465c007e568d3ac7..42232e04f5bb1d38791654bb70b9c6684c1fb7c1 100644 (file)
--- 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
 }