diff --git a/src/virtual_memory.rs b/src/virtual_memory.rs index af87e20..97bd74c 100644 --- a/src/virtual_memory.rs +++ b/src/virtual_memory.rs @@ -1,18 +1,24 @@ -use std::ptr::{NonNull, null}; - pub unsafe trait VirtualMemoryApi: Sized + Drop { - type Reservation: Reservation; + type Reservation<'s>: Reservation + 's + where + Self: 's; fn getPageSize(&self) -> usize; - fn reserveMemory( - &mut self, - extend: Option<&Self::Reservation>, + fn reserveMemory<'s>( + &'s self, + extend: ReservationToExtend<&Self::Reservation<'s>>, pagesCount: usize, - ) -> Self::Reservation; + ) -> Option>; +} + +pub enum ReservationToExtend { + ReserveAnywhere, + TryExtend(T), } pub unsafe trait Reservation: Sized + Ord + Drop { - fn commitPages(&mut self, indexOfFirst: usize, count: usize) -> *mut [u8]; - fn decommitPages(&mut self, indexOfFirst: usize, count: usize); + unsafe fn commitPages(&mut self, indexOfFirst: usize, count: usize) -> *mut [u8]; + unsafe fn decommitPages(&mut self, indexOfFirst: usize, count: usize); + unsafe fn release(self); }