More verbose reporting about re-reserving same region
This commit is contained in:
parent
4d5f71df4b
commit
c60ffac4f6
@ -5,7 +5,7 @@ edition = "2024"
|
|||||||
[dependencies]
|
[dependencies]
|
||||||
|
|
||||||
[lints]
|
[lints]
|
||||||
rust = { nonstandard_style = "allow" }
|
rust = { nonstandard_style = "allow", drop_bounds = "allow" }
|
||||||
|
|
||||||
[workspace]
|
[workspace]
|
||||||
|
|
||||||
|
|||||||
@ -1,3 +1,5 @@
|
|||||||
|
use std::fs::read_to_string;
|
||||||
|
|
||||||
pub unsafe trait VirtualMemoryApi: Sized + Drop {
|
pub unsafe trait VirtualMemoryApi: Sized + Drop {
|
||||||
type Reservation<'s>: Reservation + 's
|
type Reservation<'s>: Reservation + 's
|
||||||
where
|
where
|
||||||
@ -5,20 +7,47 @@ pub unsafe trait VirtualMemoryApi: Sized + Drop {
|
|||||||
|
|
||||||
fn getPageSize(&self) -> usize;
|
fn getPageSize(&self) -> usize;
|
||||||
|
|
||||||
fn reserveMemory<'s>(
|
fn reserveMemory<'s>(&'s self, pagesCount: usize) -> Option<Self::Reservation<'s>>;
|
||||||
&'s self,
|
|
||||||
extend: ReservationToExtend<&Self::Reservation<'s>>,
|
|
||||||
pagesCount: usize,
|
|
||||||
) -> Option<Self::Reservation<'s>>;
|
|
||||||
}
|
|
||||||
|
|
||||||
pub enum ReservationToExtend<T> {
|
unsafe fn extendReservation<'s>(
|
||||||
ReserveAnywhere,
|
&'s self,
|
||||||
TryExtend(T),
|
base: &Self::Reservation<'s>,
|
||||||
|
pagesCount: usize,
|
||||||
|
) -> ExtendResult<Self::Reservation<'s>>;
|
||||||
}
|
}
|
||||||
|
|
||||||
pub unsafe trait Reservation: Sized + Ord + Drop {
|
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 commitPages(&mut self, indexOfFirst: usize, count: usize) -> *mut [u8];
|
||||||
unsafe fn decommitPages(&mut self, indexOfFirst: usize, count: usize);
|
unsafe fn decommitPages(&mut self, indexOfFirst: usize, count: usize);
|
||||||
unsafe fn release(self);
|
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