diff options
| author | Dmitry Vyukov <dvyukov@google.com> | 2020-12-08 11:52:36 +0100 |
|---|---|---|
| committer | Dmitry Vyukov <dvyukov@google.com> | 2020-12-09 09:22:14 +0100 |
| commit | 716504e0fe9b764e14d4a373dd9b6a1c67d3ce7b (patch) | |
| tree | 9c9fba7c65fb4c0578cd14c3c7482204db29173d /pkg/cover/cover.go | |
| parent | 56ac1612a828a3e25e08d49094c9e5a8b2dcb60c (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.go | 19 |
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 { |
