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#[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}