use crate::util::ceil_div;
pub trait HeapSize {
fn heap_size_in_bits(&self) -> usize;
fn heap_size_in_bytes(&self) -> usize {
ceil_div(self.heap_size_in_bits(), 8)
}
fn heap_size_in_kib(&self) -> usize {
ceil_div(self.heap_size_in_bytes(), 1024)
}
fn heap_size_in_mib(&self) -> usize {
ceil_div(self.heap_size_in_kib(), 1024)
}
fn heap_size_in_gib(&self) -> usize {
ceil_div(self.heap_size_in_mib(), 1024)
}
fn exact_heap_size_in_bytes(&self) -> f64 {
self.heap_size_in_bits() as f64 / 8.0
}
fn exact_heap_size_in_kib(&self) -> f64 {
self.exact_heap_size_in_bytes() / 1024.0
}
fn exact_heap_size_in_mib(&self) -> f64 {
self.exact_heap_size_in_kib() / 1024.0
}
fn exact_heap_size_in_gib(&self) -> f64 {
self.exact_heap_size_in_mib() / 1024.0
}
}
impl<T> HeapSize for &[T] {
fn heap_size_in_bits(&self) -> usize {
std::mem::size_of_val(*self) * 8
}
}
impl<T> HeapSize for Vec<T> {
fn heap_size_in_bits(&self) -> usize {
std::mem::size_of::<T>() * 8 * self.len()
}
}