use crate::util::{os::*, Address};
pub mod csm;
pub trait Mmapper: Sync {
fn log_granularity(&self) -> u8;
fn log_mappable_bytes(&self) -> u8;
fn granularity(&self) -> usize {
1 << self.log_granularity()
}
fn mark_as_mapped(&self, start: Address, bytes: usize);
fn quarantine_address_range(
&self,
start: Address,
pages: usize,
huge_page_option: HugePageSupport,
anno: &MmapAnnotation,
) -> MmapResult<()>;
fn quarantine_address_range_anywhere(
&self,
pages: usize,
align: Option<usize>,
huge_page_option: HugePageSupport,
anno: &MmapAnnotation,
) -> MmapResult<Address>;
fn quarantine_address_range_preferred(
&self,
start: Address,
pages: usize,
align: Option<usize>,
huge_page_option: HugePageSupport,
anno: &MmapAnnotation,
) -> MmapResult<Address>;
fn ensure_mapped(
&self,
start: Address,
pages: usize,
huge_page_option: HugePageSupport,
prot: MmapProtection,
anno: &MmapAnnotation,
) -> MmapResult<()>;
fn is_mapped_address(&self, addr: Address) -> bool;
}