diff options
author | Paul Masurel <paul.masurel@gmail.com> | 2018-02-22 10:43:06 +0900 |
---|---|---|
committer | Paul Masurel <paul.masurel@gmail.com> | 2018-02-22 10:43:06 +0900 |
commit | c3fbc4c8fad942cd2c587220b0d9b731ebfaede6 (patch) | |
tree | 3df488338e9c06b735900bd8e1b3e499947b3f2b /src/common | |
parent | 4ee2db25a0b640be638da642a359126b3a5f1780 (diff) |
Simplified a notch TinySet::pop_lowest()
Diffstat (limited to 'src/common')
-rw-r--r-- | src/common/bitset.rs | 20 |
1 files changed, 5 insertions, 15 deletions
diff --git a/src/common/bitset.rs b/src/common/bitset.rs index c0edea2..0842859 100644 --- a/src/common/bitset.rs +++ b/src/common/bitset.rs @@ -84,23 +84,12 @@ impl TinySet { /// and removes it. #[inline(always)] pub fn pop_lowest(&mut self) -> Option<u32> { - if let Some(lowest) = self.lowest() { - self.0 ^= TinySet::singleton(lowest).0; - Some(lowest) - } else { - None - } - } - - /// Returns the lowest element in the `TinySet` - /// (or None if the set is empty). - #[inline(always)] - pub fn lowest(&mut self) -> Option<u32> { if self.is_empty() { None } else { - let least_significant_bit = self.0.trailing_zeros() as u32; - Some(least_significant_bit) + let lowest = self.0.trailing_zeros() as u32; + self.0 ^= TinySet::singleton(lowest).0; + Some(lowest) } } @@ -366,7 +355,7 @@ mod tests { #[bench] fn bench_tinyset_pop(b: &mut test::Bencher) { - b.iter(|| test::black_box(TinySet::singleton(31u32)).pop_lowest()); + b.iter(|| test::black_box(TinySet(321u64)).pop_lowest()); } #[bench] @@ -387,4 +376,5 @@ mod tests { fn bench_bitset_initialize(b: &mut test::Bencher) { b.iter(|| BitSet::with_max_value(1_000_000)); } + } |