func mergeSortedStrings()

in pkg/xcontext/metrics/prometheus/metrics.go [24:54]


func mergeSortedStrings(dst []string, add ...string) []string {
	if len(add) == 0 {
		return dst
	}
	if len(dst) == 0 {
		return append([]string{}, add...)
	}

	dstLen := len(dst)

	if !sort.StringsAreSorted(dst) || !sort.StringsAreSorted(add) {
		panic(fmt.Sprintf("%v %v", sort.StringsAreSorted(dst), sort.StringsAreSorted(add)))
	}

	i, j := 0, 0
	for i < dstLen && j < len(add) {
		switch strings.Compare(dst[i], add[j]) {
		case -1:
			i++
		case 0:
			i++
			j++
		case 1:
			dst = append(dst, add[j])
			j++
		}
	}
	dst = append(dst, add[j:]...)
	sort.Strings(dst)
	return dst
}