aboutsummaryrefslogtreecommitdiffstats
path: root/pkg/signal/signal.go
diff options
context:
space:
mode:
Diffstat (limited to 'pkg/signal/signal.go')
-rw-r--r--pkg/signal/signal.go39
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 {