use crate::util::freelist::FreeList;
use crate::util::heap::space_descriptor::SpaceDescriptor;
use crate::util::Address;
pub struct CreateFreeListResult {
pub free_list: Box<dyn FreeList>,
pub space_displacement: usize,
}
pub trait VMMap: Sync {
fn insert(&self, start: Address, extent: usize, descriptor: SpaceDescriptor);
fn create_freelist(&self, start: Address) -> CreateFreeListResult;
fn create_parent_freelist(
&self,
start: Address,
units: usize,
grain: i32,
) -> CreateFreeListResult;
unsafe fn allocate_contiguous_chunks(
&self,
descriptor: SpaceDescriptor,
chunks: usize,
head: Address,
maybe_freelist: Option<&mut dyn FreeList>,
) -> Address;
fn get_next_contiguous_region(&self, start: Address) -> Address;
fn get_contiguous_region_chunks(&self, start: Address) -> usize;
fn get_contiguous_region_size(&self, start: Address) -> usize;
fn get_available_discontiguous_chunks(&self) -> usize;
fn get_chunk_consumer_count(&self) -> usize;
fn free_all_chunks(&self, any_chunk: Address);
unsafe fn free_contiguous_chunks(&self, start: Address) -> usize;
fn finalize_static_space_map(
&self,
from: Address,
to: Address,
on_discontig_start_determined: &mut dyn FnMut(Address),
);
fn is_finalized(&self) -> bool;
fn get_descriptor_for_address(&self, address: Address) -> SpaceDescriptor;
}