Fix sorting when merging
authorMikael Berthe <mikael@lilotux.net>
Sun, 26 Feb 2017 15:13:37 +0100
changeset 13 72f6336c1167
parent 12 fc4f5c69286b
child 14 be004d8634e1
Fix sorting when merging
gobm65.go
--- a/gobm65.go	Sun Feb 26 14:46:10 2017 +0100
+++ b/gobm65.go	Sun Feb 26 15:13:37 2017 +0100
@@ -235,28 +235,31 @@
 		return isLater(newItems[i], newItems[j])
 	})
 
-	appendIfMissing := func(l []measurement, m measurement) []measurement {
+	// insertIfMissing inserts a measurement into a sorted slice
+	insertIfMissing := func(l []measurement, m measurement) []measurement {
+		var later bool
 		var i int
 		for i = range l {
-			if !isLater(l[i], m) {
+			later = isLater(l[i], m)
+			if !later {
 				break
 			}
 			if l[i] == m { // Duplicate
 				return l
 			}
 		}
-		if i == len(l) {
-			return append(l[:i], m)
+		if later {
+			return append(l, m)
 		}
-		r := append(l[:i], append(l[i:], m)...)
-		return r
+
+		return append(l[:i], append([]measurement{m}, l[i:]...)...)
 	}
 
 	for _, item := range newItems {
-		result = appendIfMissing(result, item)
+		result = insertIfMissing(result, item)
 	}
 	for _, item := range oldItems {
-		result = appendIfMissing(result, item)
+		result = insertIfMissing(result, item)
 	}
 	return result
 }