typesize/libs/
bitvec.rs

1use bitvec::{array::BitArray, order::BitOrder, store::BitStore, vec::BitVec, view::BitViewSized};
2
3use crate::TypeSize;
4
5impl<A: BitViewSized + TypeSize, O: BitOrder> TypeSize for BitArray<A, O> {
6    fn extra_size(&self) -> usize {
7        self.data.extra_size()
8    }
9
10    #[cfg(feature = "details")]
11    fn get_collection_item_count(&self) -> Option<usize> {
12        Some(self.len())
13    }
14}
15
16impl<T: BitStore, O: BitOrder> TypeSize for BitVec<T, O> {
17    fn extra_size(&self) -> usize {
18        div_ceil(self.capacity(), bitvec::mem::bits_of::<T>())
19    }
20
21    #[cfg(feature = "details")]
22    fn get_collection_item_count(&self) -> Option<usize> {
23        Some(self.len())
24    }
25}
26
27// reimplementation of `usize::div_ceil` because MSRV < 1.73
28#[inline]
29pub const fn div_ceil(n: usize, rhs: usize) -> usize {
30    let d = n / rhs;
31    let r = n % rhs;
32    if r > 0 {
33        d + 1
34    } else {
35        d
36    }
37}