in current_results/lib/src/slice.dart [104:139]
static List<String> _mergeIfNeeded(List<String> names, List<Result> sorted) {
var i = 0;
var j = 0;
while (i < names.length && j < sorted.length) {
final compare = names[i].compareTo(sorted[j].name);
if (compare < 0) {
i++;
} else if (compare == 0) {
i++;
j++;
} else {
break;
}
}
if (j == sorted.length) return names;
// J points to the first unfound element in sorted.
// I points to the first element in names greater than the unfound name.
final result = names.sublist(0, i);
while (i < names.length && j < sorted.length) {
final compare = names[i].compareTo(sorted[j].name);
if (compare <= 0) {
result.add(names[i++]);
if (compare == 0) j++;
} else {
result.add(sorted[j++].name);
}
}
if (i < names.length) {
result.addAll(names.getRange(i, names.length));
}
while (j < sorted.length) {
result.add(sorted[j++].name);
}
return result;
}