in include/range/v3/algorithm/nth_element.hpp [56:87]
unsigned sort3(I x, I y, I z, C &pred, P &proj)
{
unsigned r = 0;
if(!pred(proj(*y), proj(*x))) // if x <= y
{
if(!pred(proj(*z), proj(*y))) // if y <= z
return r; // x <= y && y <= z
// x <= y && y > z
ranges::iter_swap(y, z); // x <= z && y < z
r = 1;
if(pred(proj(*y), proj(*x))) // if x > y
{
ranges::iter_swap(x, y); // x < y && y <= z
r = 2;
}
return r; // x <= y && y < z
}
if(pred(proj(*z), proj(*y))) // x > y, if y > z
{
ranges::iter_swap(x, z); // x < y && y < z
r = 1;
return r;
}
ranges::iter_swap(x, y); // x > y && y <= z
r = 1; // x < y && x <= z
if(pred(proj(*z), proj(*y))) // if y > z
{
ranges::iter_swap(y, z); // x <= y && y < z
r = 2;
}
return r;
} // x <= y && y <= z