Add specialized version of optimisticInsertionSort to use swaps, for ranges which don't support assignable elements.

This commit is contained in:
= 2013-11-30 11:25:14 -06:00
parent 82fef70135
commit 5f3b5b25d3

View file

@ -9223,6 +9223,7 @@ private size_t getPivot(alias less, Range)(Range r)
}
private void optimisticInsertionSort(alias less, Range)(Range r)
if(hasAssignableElements!Range)
{
alias binaryFun!(less) pred;
if (r.length < 2) {
@ -9242,6 +9243,24 @@ private void optimisticInsertionSort(alias less, Range)(Range r)
}
}
private void optimisticInsertionSort(alias less, Range)(Range r)
if(!hasAssignableElements!Range)
{
alias binaryFun!(less) pred;
if (r.length < 2) {
return ;
}
immutable maxJ = r.length - 1;
for (size_t i = r.length - 2; i != size_t.max; --i)
{
for (size_t j = i; j < maxJ && pred(r[j + 1], r[j]); ++j)
{
swapAt(r, j, j + 1);
}
}
}
unittest
{
debug(std_algorithm) scope(success)