diff options
| -rw-r--r-- | pkg/signal/signal.go | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/pkg/signal/signal.go b/pkg/signal/signal.go index da3aca538..a22d19f67 100644 --- a/pkg/signal/signal.go +++ b/pkg/signal/signal.go @@ -28,6 +28,26 @@ func (s Signal) Copy() Signal { return c } +func (s Signal) Metric() int { + if s.Empty() { + return 0 + } + + var sm int = 0 + for _, p := range s { + sm += int(p) + } + return sm / len(s) +} + +func (s Signal) CopyWithPrio(prio uint8) Signal { + c := make(Signal, len(s)) + for e := range s { + c[e] = prioType(prio) + } + return c +} + func FromRaw(raw []uint64, prio uint8) Signal { if len(raw) == 0 { return nil @@ -91,6 +111,25 @@ func (s *Signal) Merge(s1 Signal) { } } +func (s *Signal) MergeDiff(s1 Signal) Signal { + if s1.Empty() { + return nil + } + s0 := *s + if s0 == nil { + s0 = make(Signal, len(s1)) + *s = s0 + } + diff := make(Signal) + for e, p1 := range s1 { + if p, ok := s0[e]; !ok || p < p1 { + s0[e] = p1 + diff[e] = p1 + } + } + return diff +} + func (s Signal) ToRaw() []uint64 { var raw []uint64 for e := range s { |
