[Lemon-commits] Balazs Dezso: Bidirectional iterator support for...
Lemon HG
hg at lemon.cs.elte.hu
Fri Mar 1 18:43:57 CET 2013
details: http://lemon.cs.elte.hu/hg/lemon/rev/d450a02728d0
changeset: 1210:d450a02728d0
user: Balazs Dezso <deba [at] inf.elte.hu>
date: Fri Mar 19 18:23:47 2010 +0100
description:
Bidirectional iterator support for radixSort() (#362)
diffstat:
lemon/radix_sort.h | 18 +++++++++---------
1 files changed, 9 insertions(+), 9 deletions(-)
diffs (63 lines):
diff --git a/lemon/radix_sort.h b/lemon/radix_sort.h
--- a/lemon/radix_sort.h
+++ b/lemon/radix_sort.h
@@ -34,6 +34,12 @@
namespace _radix_sort_bits {
+ template <typename Iterator>
+ bool unitRange(Iterator first, Iterator last) {
+ ++first;
+ return first == last;
+ }
+
template <typename Value>
struct Identity {
const Value& operator()(const Value& val) {
@@ -60,9 +66,6 @@
}
std::iter_swap(first, last);
++first;
- if (!(first < last)) {
- return first;
- }
while (true) {
while (!(functor(*first) & mask)) {
++first;
@@ -71,7 +74,7 @@
while (functor(*last) & mask) {
--last;
}
- if (!(first < last)) {
+ if (unitRange(last, first)) {
return first;
}
std::iter_swap(first, last);
@@ -97,9 +100,6 @@
}
std::iter_swap(first, last);
++first;
- if (!(first < last)) {
- return first;
- }
while (true) {
while (functor(*first) < 0) {
++first;
@@ -108,7 +108,7 @@
while (functor(*last) >= 0) {
--last;
}
- if (!(first < last)) {
+ if (unitRange(last, first)) {
return first;
}
std::iter_swap(first, last);
@@ -119,7 +119,7 @@
template <typename Value, typename Iterator, typename Functor>
void radixIntroSort(Iterator first, Iterator last,
Functor functor, Value mask) {
- while (mask != 0 && last - first > 1) {
+ while (mask != 0 && first != last && !unitRange(first, last)) {
Iterator cut = radixSortPartition(first, last, functor, mask);
mask >>= 1;
radixIntroSort(first, cut, functor, mask);
More information about the Lemon-commits
mailing list