More verbose reporting about re-reserving same region
This commit is contained in:
parent
4d5f71df4b
commit
c60ffac4f6
@ -5,7 +5,7 @@ edition = "2024"
|
||||
[dependencies]
|
||||
|
||||
[lints]
|
||||
rust = { nonstandard_style = "allow" }
|
||||
rust = { nonstandard_style = "allow", drop_bounds = "allow" }
|
||||
|
||||
[workspace]
|
||||
|
||||
|
||||
@ -1,3 +1,5 @@
|
||||
use std::fs::read_to_string;
|
||||
|
||||
pub unsafe trait VirtualMemoryApi: Sized + Drop {
|
||||
type Reservation<'s>: Reservation + 's
|
||||
where
|
||||
@ -5,20 +7,47 @@ pub unsafe trait VirtualMemoryApi: Sized + Drop {
|
||||
|
||||
fn getPageSize(&self) -> usize;
|
||||
|
||||
fn reserveMemory<'s>(
|
||||
&'s self,
|
||||
extend: ReservationToExtend<&Self::Reservation<'s>>,
|
||||
pagesCount: usize,
|
||||
) -> Option<Self::Reservation<'s>>;
|
||||
}
|
||||
fn reserveMemory<'s>(&'s self, pagesCount: usize) -> Option<Self::Reservation<'s>>;
|
||||
|
||||
pub enum ReservationToExtend<T> {
|
||||
ReserveAnywhere,
|
||||
TryExtend(T),
|
||||
unsafe fn extendReservation<'s>(
|
||||
&'s self,
|
||||
base: &Self::Reservation<'s>,
|
||||
pagesCount: usize,
|
||||
) -> ExtendResult<Self::Reservation<'s>>;
|
||||
}
|
||||
|
||||
pub unsafe trait Reservation: Sized + Ord + Drop {
|
||||
fn getPageSize(&self) -> usize;
|
||||
fn pagesCount(&self) -> 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);
|
||||
}
|
||||
|
||||
pub enum ExtendResult<T> {
|
||||
OutOfMemory,
|
||||
ContinuationIsBusy,
|
||||
Success(T),
|
||||
}
|
||||
|
||||
impl<T> ExtendResult<T> {
|
||||
pub fn map<R>(&self, caster: impl FnOnce(&T) -> R) -> ExtendResult<R> {
|
||||
match self {
|
||||
ExtendResult::Success(v) => {
|
||||
return ExtendResult::Success(caster(&v));
|
||||
}
|
||||
ExtendResult::ContinuationIsBusy => return ExtendResult::ContinuationIsBusy,
|
||||
ExtendResult::OutOfMemory => return ExtendResult::OutOfMemory,
|
||||
}
|
||||
}
|
||||
|
||||
pub fn map_into<R>(self, caster: impl FnOnce(T) -> R) -> ExtendResult<R> {
|
||||
match self {
|
||||
ExtendResult::Success(v) => {
|
||||
return ExtendResult::Success(caster(v));
|
||||
}
|
||||
ExtendResult::ContinuationIsBusy => return ExtendResult::ContinuationIsBusy,
|
||||
ExtendResult::OutOfMemory => return ExtendResult::OutOfMemory,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user