(svn r8123) -Fix (r117): FindFirstBit now really returns the first bit. Fixes bug FS#538.
authormaedhros
Sun, 14 Jan 2007 19:06:11 +0000
changeset 5914 e4ed5c532514
parent 5913 47173024f1bc
child 5915 a39082f82ea2
(svn r8123) -Fix (r117): FindFirstBit now really returns the first bit. Fixes bug FS#538.
src/misc.cpp
--- a/src/misc.cpp	Sun Jan 14 18:57:39 2007 +0000
+++ b/src/misc.cpp	Sun Jan 14 19:06:11 2007 +0000
@@ -266,16 +266,18 @@
 
 int FindFirstBit(uint32 value)
 {
-	// This is much faster than the one that was before here.
-	//  Created by Darkvater.. blame him if it is wrong ;)
-	// Btw, the macro FINDFIRSTBIT is better to use when your value is
-	//  not more than 128.
+	// The macro FIND_FIRST_BIT is better to use when your value is
+	// not more than 128.
 	byte i = 0;
-	if (value & 0xffff0000) { value >>= 16; i += 16; }
-	if (value & 0x0000ff00) { value >>= 8;  i +=  8; }
-	if (value & 0x000000f0) { value >>= 4;  i +=  4; }
-	if (value & 0x0000000c) { value >>= 2;  i +=  2; }
-	if (value & 0x00000002) { i += 1; }
+
+	if (value == 0) return 0;
+
+	if ((value & 0x0000ffff) == 0) { value >>= 16; i += 16; }
+	if ((value & 0x000000ff) == 0) { value >>= 8;  i += 8;  }
+	if ((value & 0x0000000f) == 0) { value >>= 4;  i += 4;  }
+	if ((value & 0x00000003) == 0) { value >>= 2;  i += 2;  }
+	if ((value & 0x00000001) == 0) { i += 1; }
+
 	return i;
 }