aboutsummaryrefslogtreecommitdiffstats
path: root/pkg/cover/cover.go
diff options
context:
space:
mode:
authorDmitry Vyukov <dvyukov@google.com>2020-12-08 11:52:36 +0100
committerDmitry Vyukov <dvyukov@google.com>2020-12-09 09:22:14 +0100
commit716504e0fe9b764e14d4a373dd9b6a1c67d3ce7b (patch)
tree9c9fba7c65fb4c0578cd14c3c7482204db29173d /pkg/cover/cover.go
parent56ac1612a828a3e25e08d49094c9e5a8b2dcb60c (diff)
pkg/cover: add MergeDiff method
Will be used in the next patch.
Diffstat (limited to 'pkg/cover/cover.go')
-rw-r--r--pkg/cover/cover.go19
1 files changed, 19 insertions, 0 deletions
diff --git a/pkg/cover/cover.go b/pkg/cover/cover.go
index 1fe63e3ad..40c806fd7 100644
--- a/pkg/cover/cover.go
+++ b/pkg/cover/cover.go
@@ -17,6 +17,25 @@ func (cov *Cover) Merge(raw []uint32) {
}
}
+// Merge merges raw into coverage and returns newly added PCs. Overwrites/mutates raw.
+func (cov *Cover) MergeDiff(raw []uint32) []uint32 {
+ c := *cov
+ if c == nil {
+ c = make(Cover)
+ *cov = c
+ }
+ n := 0
+ for _, pc := range raw {
+ if _, ok := c[pc]; ok {
+ continue
+ }
+ c[pc] = struct{}{}
+ raw[n] = pc
+ n++
+ }
+ return raw[:n]
+}
+
func (cov Cover) Serialize() []uint32 {
res := make([]uint32, 0, len(cov))
for pc := range cov {