From: Joshua Simmons Date: Wed, 19 Jul 2023 08:32:47 +0000 (+0200) Subject: narcissus-core: Add u32 support to BitIter X-Git-Url: https://git.nega.tv//gitweb.cgi?a=commitdiff_plain;h=a1c11ec7ba7ed49f87cdf29d7b9074a6bead8355;p=josh%2Fnarcissus narcissus-core: Add u32 support to BitIter --- diff --git a/libs/narcissus-core/src/bitset.rs b/libs/narcissus-core/src/bitset.rs index f7e8525..f3f1033 100644 --- a/libs/narcissus-core/src/bitset.rs +++ b/libs/narcissus-core/src/bitset.rs @@ -60,6 +60,20 @@ impl Bits for u64 { } } +impl Bits for u32 { + fn is_zero(self) -> bool { + self == 0 + } + + fn clear_least_significant_set_bit(&mut self) -> u32 { + let b = *self; + let t = b & (!b + 1); + let index = b.trailing_zeros(); + *self ^= t; + index + } +} + #[cfg(test)] mod tests { use crate::*; @@ -67,7 +81,7 @@ mod tests { fn iterate_bits() { { let bits_iter = BitIter::new(std::iter::once( - 0b0101_0101_0101_0101_0101_0101_0101_0101_0101_0101_0101_0101_0101_0101_0101_0101, + 0b0101_0101_0101_0101_0101_0101_0101_0101_0101_0101_0101_0101_0101_0101_0101_0101_u64, )); let mut i = 0; for index in bits_iter { @@ -80,7 +94,7 @@ mod tests { { let bits_iter = BitIter::new( std::iter::repeat( - 0b0101_0101_0101_0101_0101_0101_0101_0101_0101_0101_0101_0101_0101_0101_0101_0101, + 0b0101_0101_0101_0101_0101_0101_0101_0101_0101_0101_0101_0101_0101_0101_0101_0101_u64, ) .take(10), ); @@ -93,6 +107,6 @@ mod tests { } assert_eq!(BitIter::new(std::iter::empty::()).next(), None); - assert_eq!(BitIter::new(std::iter::repeat(0).take(10)).next(), None); + assert_eq!(BitIter::new(std::iter::repeat(0_u64).take(10)).next(), None); } }