Skip to content

Commit dd5a318

Browse files
00xcroypat
authored andcommitted
atomic_bitmap: use usize::div_ceil()
Instead of checking a division remainder, use `usize::div_ceil()`, which will round division up, adding an extra member to the bitmap when needed. Since at the moment we unconditionally add 1 to `map_size`, this change results in allocating one less `AtomicU64` in some cases. Signed-off-by: Carlos López <[email protected]>
1 parent 115dd7a commit dd5a318

File tree

1 file changed

+2
-7
lines changed

1 file changed

+2
-7
lines changed

src/bitmap/backend/atomic_bitmap.rs

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -26,13 +26,8 @@ impl AtomicBitmap {
2626
/// Create a new bitmap of `byte_size`, with one bit per page. This is effectively
2727
/// rounded up, and we get a new vector of the next multiple of 64 bigger than `bit_size`.
2828
pub fn new(byte_size: usize, page_size: NonZeroUsize) -> Self {
29-
let mut num_pages = byte_size / page_size;
30-
if byte_size % page_size > 0 {
31-
num_pages += 1;
32-
}
33-
34-
// Adding one entry element more just in case `num_pages` is not a multiple of `64`.
35-
let map_size = num_pages / 64 + 1;
29+
let num_pages = byte_size.div_ceil(page_size.get());
30+
let map_size = num_pages.div_ceil(u64::BITS as usize);
3631
let map: Vec<AtomicU64> = (0..map_size).map(|_| AtomicU64::new(0)).collect();
3732

3833
AtomicBitmap {

0 commit comments

Comments
 (0)