[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