[Lemon-commits] deba: r3319 - lemon/trunk/lemon
Lemon SVN
svn at lemon.cs.elte.hu
Fri Sep 28 14:42:15 CEST 2007
Author: deba
Date: Fri Sep 28 14:42:14 2007
New Revision: 3319
Modified:
lemon/trunk/lemon/radix_sort.h
Log:
Once again bug fix in significant bit calculation
Modified: lemon/trunk/lemon/radix_sort.h
==============================================================================
--- lemon/trunk/lemon/radix_sort.h (original)
+++ lemon/trunk/lemon/radix_sort.h Fri Sep 28 14:42:14 2007
@@ -137,21 +137,20 @@
int max_digit;
Iterator it;
- mask = 0; max_digit = 0;
+ mask = ~0; max_digit = 0;
for (it = first; it != cut; ++it) {
- while ((mask | functor(*it)) != ~0) {
+ while ((mask & functor(*it)) != mask) {
++max_digit;
- mask <<= 1;
- mask |= 1;
+ mask <<= 1;
}
}
radixIntroSort(first, cut, functor, 1 << max_digit);
- mask = ~0; max_digit = 0;
+ mask = 0; max_digit = 0;
for (it = cut; it != last; ++it) {
- while (mask & functor(*it)) {
+ while ((mask | functor(*it)) != mask) {
++max_digit;
- mask <<= 1;
+ mask <<= 1; mask |= 1;
}
}
radixIntroSort(cut, last, functor, 1 << max_digit);
@@ -160,14 +159,14 @@
template <typename Value, typename Iterator, typename Functor>
void radixUnsignedSort(Iterator first, Iterator last, Functor functor) {
- Value mask = ~0;
+ Value mask = 0;
int max_digit = 0;
Iterator it;
for (it = first; it != last; ++it) {
- while (mask & functor(*it)) {
+ while ((mask | functor(*it)) != mask) {
++max_digit;
- mask <<= 1;
+ mask <<= 1; mask |= 1;
}
}
radixIntroSort(first, last, functor, 1 << max_digit);
More information about the Lemon-commits
mailing list