#![no_std]
#![deny(warnings, missing_docs)]
mod space;
pub extern crate page_table;
pub use space::AddressSpace;
use core::ptr::NonNull;
use page_table::{Pte, VmFlags, VmMeta, PPN};
pub trait PageManager<Meta: VmMeta> {
fn new_root() -> Self;
fn root_ptr(&self) -> NonNull<Pte<Meta>>;
#[inline]
fn root_ppn(&self) -> PPN<Meta> {
self.v_to_p(self.root_ptr())
}
fn p_to_v<T>(&self, ppn: PPN<Meta>) -> NonNull<T>;
fn v_to_p<T>(&self, ptr: NonNull<T>) -> PPN<Meta>;
fn check_owned(&self, pte: Pte<Meta>) -> bool;
fn allocate(&mut self, len: usize, flags: &mut VmFlags<Meta>) -> NonNull<u8>;
fn deallocate(&mut self, pte: Pte<Meta>, len: usize) -> usize;
fn drop_root(&mut self);
}