mirror of
https://github.com/weaveworks/scope.git
synced 2026-07-16 20:11:09 +00:00
Early return from LatestMap merge loop
If we run out of things to look at in the other map, return quickly. Also move the equal-key case above the less-than case, since maps with equal keys are the common case when merging.
This commit is contained in:
@@ -96,14 +96,16 @@ function generate_latest_map() {
|
||||
loop:
|
||||
for i < len(m) {
|
||||
switch {
|
||||
case j >= len(n) || m[i].key < n[j].key:
|
||||
i++
|
||||
case j >= len(n):
|
||||
return m
|
||||
case m[i].key == n[j].key:
|
||||
if m[i].Timestamp.Before(n[j].Timestamp) {
|
||||
break loop
|
||||
}
|
||||
i++
|
||||
j++
|
||||
case m[i].key < n[j].key:
|
||||
i++
|
||||
default:
|
||||
break loop
|
||||
}
|
||||
@@ -117,9 +119,9 @@ function generate_latest_map() {
|
||||
|
||||
for i < len(m) {
|
||||
switch {
|
||||
case j >= len(n) || m[i].key < n[j].key:
|
||||
out = append(out, m[i])
|
||||
i++
|
||||
case j >= len(n):
|
||||
out = append(out, m[i:]...)
|
||||
return out
|
||||
case m[i].key == n[j].key:
|
||||
if m[i].Timestamp.Before(n[j].Timestamp) {
|
||||
out = append(out, n[j])
|
||||
@@ -128,6 +130,9 @@ function generate_latest_map() {
|
||||
}
|
||||
i++
|
||||
j++
|
||||
case m[i].key < n[j].key:
|
||||
out = append(out, m[i])
|
||||
i++
|
||||
default:
|
||||
out = append(out, n[j])
|
||||
j++
|
||||
|
||||
@@ -64,14 +64,16 @@ func (m StringLatestMap) Merge(n StringLatestMap) StringLatestMap {
|
||||
loop:
|
||||
for i < len(m) {
|
||||
switch {
|
||||
case j >= len(n) || m[i].key < n[j].key:
|
||||
i++
|
||||
case j >= len(n):
|
||||
return m
|
||||
case m[i].key == n[j].key:
|
||||
if m[i].Timestamp.Before(n[j].Timestamp) {
|
||||
break loop
|
||||
}
|
||||
i++
|
||||
j++
|
||||
case m[i].key < n[j].key:
|
||||
i++
|
||||
default:
|
||||
break loop
|
||||
}
|
||||
@@ -85,9 +87,9 @@ loop:
|
||||
|
||||
for i < len(m) {
|
||||
switch {
|
||||
case j >= len(n) || m[i].key < n[j].key:
|
||||
out = append(out, m[i])
|
||||
i++
|
||||
case j >= len(n):
|
||||
out = append(out, m[i:]...)
|
||||
return out
|
||||
case m[i].key == n[j].key:
|
||||
if m[i].Timestamp.Before(n[j].Timestamp) {
|
||||
out = append(out, n[j])
|
||||
@@ -96,6 +98,9 @@ loop:
|
||||
}
|
||||
i++
|
||||
j++
|
||||
case m[i].key < n[j].key:
|
||||
out = append(out, m[i])
|
||||
i++
|
||||
default:
|
||||
out = append(out, n[j])
|
||||
j++
|
||||
@@ -311,14 +316,16 @@ func (m NodeControlDataLatestMap) Merge(n NodeControlDataLatestMap) NodeControlD
|
||||
loop:
|
||||
for i < len(m) {
|
||||
switch {
|
||||
case j >= len(n) || m[i].key < n[j].key:
|
||||
i++
|
||||
case j >= len(n):
|
||||
return m
|
||||
case m[i].key == n[j].key:
|
||||
if m[i].Timestamp.Before(n[j].Timestamp) {
|
||||
break loop
|
||||
}
|
||||
i++
|
||||
j++
|
||||
case m[i].key < n[j].key:
|
||||
i++
|
||||
default:
|
||||
break loop
|
||||
}
|
||||
@@ -332,9 +339,9 @@ loop:
|
||||
|
||||
for i < len(m) {
|
||||
switch {
|
||||
case j >= len(n) || m[i].key < n[j].key:
|
||||
out = append(out, m[i])
|
||||
i++
|
||||
case j >= len(n):
|
||||
out = append(out, m[i:]...)
|
||||
return out
|
||||
case m[i].key == n[j].key:
|
||||
if m[i].Timestamp.Before(n[j].Timestamp) {
|
||||
out = append(out, n[j])
|
||||
@@ -343,6 +350,9 @@ loop:
|
||||
}
|
||||
i++
|
||||
j++
|
||||
case m[i].key < n[j].key:
|
||||
out = append(out, m[i])
|
||||
i++
|
||||
default:
|
||||
out = append(out, n[j])
|
||||
j++
|
||||
|
||||
Reference in New Issue
Block a user