[board] Change the type of BitScanner.shift form u32 to usize

This commit is contained in:
Eryn Wells 2023-12-31 09:27:16 -08:00
parent 1cc8b4520f
commit adc2f76e00

View file

@ -2,7 +2,7 @@
pub(crate) struct BitScanner { pub(crate) struct BitScanner {
bits: u64, bits: u64,
shift: u32, shift: usize,
} }
impl BitScanner { impl BitScanner {
@ -12,22 +12,24 @@ impl BitScanner {
} }
impl Iterator for BitScanner { impl Iterator for BitScanner {
type Item = u32; type Item = usize;
fn next(&mut self) -> Option<Self::Item> { fn next(&mut self) -> Option<Self::Item> {
if self.shift == u64::BITS { let u64bits = u64::BITS as usize;
if self.shift == u64bits {
return None; return None;
} }
let shifted_bits = self.bits << self.shift; let shifted_bits = self.bits << self.shift;
let leading_zeros = shifted_bits.leading_zeros(); let leading_zeros = shifted_bits.leading_zeros() as usize;
if leading_zeros == u64::BITS { if leading_zeros == u64bits {
self.shift = leading_zeros; self.shift = leading_zeros;
return None; return None;
} }
let position = u64::BITS - (self.shift + leading_zeros + 1); let position = u64bits - (self.shift + leading_zeros + 1);
// Shift 1 additional place to account for the 1 that `leading_zeros` found. // Shift 1 additional place to account for the 1 that `leading_zeros` found.
self.shift += leading_zeros + 1; self.shift += leading_zeros + 1;