12 #ifndef hifi_Radix2InplaceSort_h
13 #define hifi_Radix2InplaceSort_h
24 template<
class Radix2Scanner,
typename B
idiIterator >
25 void radix2InplaceSort( BidiIterator from, BidiIterator to,
26 Radix2Scanner
const& scanner = Radix2Scanner() );
30 template<
class Scanner,
typename Iterator >
31 struct radix2InplaceSort_impl : Scanner {
33 radix2InplaceSort_impl(Scanner
const& s) : Scanner(s) { }
35 using Scanner::advance;
38 void go(Iterator& from, Iterator& to,
typename Scanner::state_type s) {
40 Iterator l(from), r(to);
47 for (cl = cr = 0u; l != r ; ++l, ++cl)
50 for (++cr; --r != l ;++cr)
69 if (cl > 1u) go(from, l, s);
78 if (cr > 1u) go(r, to, s);
89 template<
class Radix2Scanner,
typename B
idiIterator >
90 void radix2InplaceSort( BidiIterator from, BidiIterator to,
91 Radix2Scanner
const& scanner) {
93 radix2InplaceSort_impl<Radix2Scanner, BidiIterator>(scanner)
94 .go(from, to, scanner.initial_state());