unsigned sort3()

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