use crate::arena::Arena;
use crate::iter::ArenaChunks;
use crate::iter::Chunk;
use crate::sizing::Sizing;
#[derive(Default, Clone, PartialEq, Eq, Debug)]
pub struct Usage {
pub total: usize,
pub used: usize,
pub free: usize,
pub objects: usize,
}
impl Usage {
pub(crate) fn get<S: Sizing>(arena: Arena<'_, S>) -> Self {
let mut usage = Self {
total: arena.size(),
used: 0,
free: 0,
objects: 0,
};
for chunk in ArenaChunks::new(arena) {
match chunk {
Chunk::Used(segment) => {
usage.used += segment.usable().len();
usage.objects += 1;
}
Chunk::Unused(slice) => usage.free += slice.len(),
}
}
usage
}
}