gobm65.go
changeset 13 72f6336c1167
parent 12 fc4f5c69286b
child 14 be004d8634e1
equal deleted inserted replaced
12:fc4f5c69286b 13:72f6336c1167
   233 	})
   233 	})
   234 	sort.Slice(newItems, func(i, j int) bool {
   234 	sort.Slice(newItems, func(i, j int) bool {
   235 		return isLater(newItems[i], newItems[j])
   235 		return isLater(newItems[i], newItems[j])
   236 	})
   236 	})
   237 
   237 
   238 	appendIfMissing := func(l []measurement, m measurement) []measurement {
   238 	// insertIfMissing inserts a measurement into a sorted slice
       
   239 	insertIfMissing := func(l []measurement, m measurement) []measurement {
       
   240 		var later bool
   239 		var i int
   241 		var i int
   240 		for i = range l {
   242 		for i = range l {
   241 			if !isLater(l[i], m) {
   243 			later = isLater(l[i], m)
       
   244 			if !later {
   242 				break
   245 				break
   243 			}
   246 			}
   244 			if l[i] == m { // Duplicate
   247 			if l[i] == m { // Duplicate
   245 				return l
   248 				return l
   246 			}
   249 			}
   247 		}
   250 		}
   248 		if i == len(l) {
   251 		if later {
   249 			return append(l[:i], m)
   252 			return append(l, m)
   250 		}
   253 		}
   251 		r := append(l[:i], append(l[i:], m)...)
   254 
   252 		return r
   255 		return append(l[:i], append([]measurement{m}, l[i:]...)...)
   253 	}
   256 	}
   254 
   257 
   255 	for _, item := range newItems {
   258 	for _, item := range newItems {
   256 		result = appendIfMissing(result, item)
   259 		result = insertIfMissing(result, item)
   257 	}
   260 	}
   258 	for _, item := range oldItems {
   261 	for _, item := range oldItems {
   259 		result = appendIfMissing(result, item)
   262 		result = insertIfMissing(result, item)
   260 	}
   263 	}
   261 	return result
   264 	return result
   262 }
   265 }
   263 
   266 
   264 func parseDate(dateStr string) (date time.Time, err error) {
   267 func parseDate(dateStr string) (date time.Time, err error) {