Safety improvements in virtual memory and ability to share references
This commit is contained in:
parent
a613309440
commit
4d5f71df4b
@ -1,18 +1,24 @@
|
|||||||
use std::ptr::{NonNull, null};
|
|
||||||
|
|
||||||
pub unsafe trait VirtualMemoryApi: Sized + Drop {
|
pub unsafe trait VirtualMemoryApi: Sized + Drop {
|
||||||
type Reservation: Reservation;
|
type Reservation<'s>: Reservation + 's
|
||||||
|
where
|
||||||
|
Self: 's;
|
||||||
|
|
||||||
fn getPageSize(&self) -> usize;
|
fn getPageSize(&self) -> usize;
|
||||||
|
|
||||||
fn reserveMemory(
|
fn reserveMemory<'s>(
|
||||||
&mut self,
|
&'s self,
|
||||||
extend: Option<&Self::Reservation>,
|
extend: ReservationToExtend<&Self::Reservation<'s>>,
|
||||||
pagesCount: usize,
|
pagesCount: usize,
|
||||||
) -> Self::Reservation;
|
) -> Option<Self::Reservation<'s>>;
|
||||||
|
}
|
||||||
|
|
||||||
|
pub enum ReservationToExtend<T> {
|
||||||
|
ReserveAnywhere,
|
||||||
|
TryExtend(T),
|
||||||
}
|
}
|
||||||
|
|
||||||
pub unsafe trait Reservation: Sized + Ord + Drop {
|
pub unsafe trait Reservation: Sized + Ord + Drop {
|
||||||
fn commitPages(&mut self, indexOfFirst: usize, count: usize) -> *mut [u8];
|
unsafe fn commitPages(&mut self, indexOfFirst: usize, count: usize) -> *mut [u8];
|
||||||
fn decommitPages(&mut self, indexOfFirst: usize, count: usize);
|
unsafe fn decommitPages(&mut self, indexOfFirst: usize, count: usize);
|
||||||
|
unsafe fn release(self);
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user