# HG changeset patch # User deba # Date 1190983334 0 # Node ID 221cfaf118a6db672b1b913f746219c9e4115094 # Parent bf783151bc928d2f9de2f9d9c846b4d569c0f4d8 Once again bug fix in significant bit calculation diff -r bf783151bc92 -r 221cfaf118a6 lemon/radix_sort.h --- a/lemon/radix_sort.h Fri Sep 28 12:15:10 2007 +0000 +++ b/lemon/radix_sort.h Fri Sep 28 12:42:14 2007 +0000 @@ -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 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);