More verbose reporting about re-reserving same region

This commit is contained in:
Andrew Golovashevich 2025-12-19 02:10:08 +03:00
parent 4d5f71df4b
commit c60ffac4f6
2 changed files with 39 additions and 10 deletions

View File

@ -5,7 +5,7 @@ edition = "2024"
[dependencies]
[lints]
rust = { nonstandard_style = "allow" }
rust = { nonstandard_style = "allow", drop_bounds = "allow" }
[workspace]

View File

@ -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,
}
}
}