Type Alias frame_allocator::FreeFrames
source · pub type FreeFrames = Frames<{ MemoryState::Free }, Page4K>;
Expand description
A type alias for Frames
in the Free
state, which only suppports 4K pages.
Aliased Type§
struct FreeFrames { /* private fields */ }
Implementations§
source§impl FreeFrames
impl FreeFrames
sourcepub fn into_allocated_frames(self) -> AllocatedFrames<Page4K>
pub fn into_allocated_frames(self) -> AllocatedFrames<Page4K>
Consumes this Frames
in the Free
state and converts them into the Allocated
state.
source§impl<P: PageSize> Frames<{MemoryState::Allocated}, P>
impl<P: PageSize> Frames<{MemoryState::Allocated}, P>
sourcepub fn into_mapped_frames(self) -> MappedFrames<P>
pub fn into_mapped_frames(self) -> MappedFrames<P>
Consumes this Frames
in the Allocated
state and converts them into the Mapped
state.
This should only be called once a MappedPages
has been created from the Frames
.
sourcepub fn as_allocated_frame(&self) -> AllocatedFrame<'_, P>
pub fn as_allocated_frame(&self) -> AllocatedFrame<'_, P>
Returns an AllocatedFrame
if this AllocatedFrames
object contains only one frame.
Panic
Panics if this AllocatedFrame
contains multiple frames or zero frames.
source§impl Frames<{MemoryState::Unmapped}, Page4K>
impl Frames<{MemoryState::Unmapped}, Page4K>
sourcepub fn into_allocated_frames(self) -> AllocatedFrames
pub fn into_allocated_frames(self) -> AllocatedFrames
Consumes this Frames
in the Unmapped
state and converts them into the Allocated
state.
source§impl<const S: MemoryState, P: PageSize> Frames<S, P>
impl<const S: MemoryState, P: PageSize> Frames<S, P>
sourcepub const fn empty() -> Frames<S, P>
pub const fn empty() -> Frames<S, P>
Returns a new Frames
with an empty range of frames.
Can be used as a placeholder, but will not permit any real usage.
sourcepub fn merge(&mut self, other: Self) -> Result<(), Self>
pub fn merge(&mut self, other: Self) -> Result<(), Self>
Merges the given other
Frames
object into this Frames
object (self
).
This function performs no allocation or re-mapping, it exists for convenience and usability purposes.
The given other
must be physically contiguous with self
, i.e., come immediately before or after self
.
That is, either self.start == other.end + 1
or self.end + 1 == other.start
must be true.
If either of those conditions are met, self
is modified and Ok(())
is returned,
otherwise Err(other)
is returned.
sourcepub fn split_range(
self,
frames_to_extract: FrameRange<P>
) -> Result<SplitFrames<S, P>, Self>
pub fn split_range( self, frames_to_extract: FrameRange<P> ) -> Result<SplitFrames<S, P>, Self>
Splits up the given Frames
into multiple smaller Frames
.
Returns a SplitFrames
instance containing three Frames
:
- The range of frames in
self
that are before the beginning offrames_to_extract
. - The
Frames
containing the requested range of frames,frames_to_extract
. - The range of frames in
self
that are after the end offrames_to_extract
.
If frames_to_extract
is not contained within self
, then self
is returned unchanged within an Err
.
sourcepub fn split_at(self, at_frame: Frame<P>) -> Result<(Self, Self), Self>
pub fn split_at(self, at_frame: Frame<P>) -> Result<(Self, Self), Self>
Splits this Frames
into two separate Frames
objects:
[beginning : at_frame - 1]
[at_frame : end]
This function follows the behavior of core::slice::split_at()
,
thus, either one of the returned Frames
objects may be empty.
- If
at_frame == self.start
, the first returnedFrames
object will be empty. - If
at_frame == self.end + 1
, the second returnedFrames
object will be empty.
Returns an Err
containing this Frames
if at_frame
is otherwise out of bounds, or if self
was empty.
Methods from Deref<Target = FrameRange<P>>§
pub fn start(&self) -> &Frame<P>
pub fn start(&self) -> &Frame<P>
Returns the starting [Frame
] in this FrameRange
.
pub fn end(&self) -> &Frame<P>
pub fn end(&self) -> &Frame<P>
Returns the ending [Frame
] in this FrameRange
.
pub fn start_address(&self) -> PhysicalAddress
pub fn start_address(&self) -> PhysicalAddress
Returns the [PhysicalAddress
] of the starting [Frame
] in this FrameRange
.
pub fn size_in_frames(&self) -> usize
pub fn size_in_frames(&self) -> usize
Returns the number of [Frame
]s covered by this iterator.
Use this instead of Iterator::count()
method. This is instant, because it doesn’t need to iterate over each entry, unlike normal iterators.
pub fn size_in_bytes(&self) -> usize
pub fn size_in_bytes(&self) -> usize
Returns the size of this range in bytes.
pub fn contains_address(&self, addr: PhysicalAddress) -> bool
pub fn contains_address(&self, addr: PhysicalAddress) -> bool
Returns true
if this FrameRange
contains the given [PhysicalAddress
].
pub fn offset_of_address(&self, addr: PhysicalAddress) -> Option<usize>
pub fn offset_of_address(&self, addr: PhysicalAddress) -> Option<usize>
Returns the offset of the given [PhysicalAddress
] within this FrameRange
, i.e., addr - self.start_address()
.
If the given addr
is not covered by this range of [Frame
]s, this returns None
.
Examples
If the range covers addresses 0x2000
to 0x4000
, then offset_of_address(0x3500)
would return Some(0x1500)
.
pub fn address_at_offset(&self, offset: usize) -> Option<PhysicalAddress>
pub fn address_at_offset(&self, offset: usize) -> Option<PhysicalAddress>
Returns the [PhysicalAddress
] at the given offset
into this FrameRange
within this FrameRange
, i.e., self.start_address() + offset
.
If the given offset
is not within this range of [Frame
]s, this returns None
.
Examples
If the range covers addresses 0x2000
through 0x3FFF
, then address_at_offset(0x1500)
would return Some(0x3500)
, and address_at_offset(0x2000)
would return None
.
pub fn to_extended(&self, to_include: Frame<P>) -> FrameRange<P>
pub fn to_extended(&self, to_include: Frame<P>) -> FrameRange<P>
Returns a new separate FrameRange
that is extended to include the given [Frame
].
pub fn contains_range(&self, other: &FrameRange<P>) -> bool
pub fn contains_range(&self, other: &FrameRange<P>) -> bool
Returns true
if the other
FrameRange
is fully contained within this FrameRange
.
pub fn overlap(&self, other: &FrameRange<P>) -> Option<FrameRange<P>>
pub fn overlap(&self, other: &FrameRange<P>) -> Option<FrameRange<P>>
Returns an inclusive FrameRange
representing the [Frame
]s that overlap across this FrameRange
and the given other FrameRange
.
If there is no overlap between the two ranges, None
is returned.
sourcepub fn as_allocated_frame(&self) -> AllocatedFrame<'_, P>
pub fn as_allocated_frame(&self) -> AllocatedFrame<'_, P>
Returns an AllocatedFrame
if this AllocatedFrames
object contains only one frame.
Panic
Panics if this AllocatedFrame
contains multiple frames or zero frames.
Methods from Deref<Target = RangeInclusive<Frame<P>>>§
sourcepub fn iter(&self) -> RangeInclusiveIterator<Idx>
pub fn iter(&self) -> RangeInclusiveIterator<Idx>
Returns an iterator with the same start
and end
values as the range.
sourcepub fn contains<U>(&self, item: &U) -> boolwhere
Idx: PartialOrd<U>,
U: PartialOrd<Idx> + ?Sized,
pub fn contains<U>(&self, item: &U) -> boolwhere Idx: PartialOrd<U>, U: PartialOrd<Idx> + ?Sized,
Returns true
if item
is contained in the range.
sourcepub fn as_allocated_frame(&self) -> AllocatedFrame<'_, P>
pub fn as_allocated_frame(&self) -> AllocatedFrame<'_, P>
Returns an AllocatedFrame
if this AllocatedFrames
object contains only one frame.
Panic
Panics if this AllocatedFrame
contains multiple frames or zero frames.
sourcepub fn merge(&mut self, other: Self) -> Result<(), Self>
pub fn merge(&mut self, other: Self) -> Result<(), Self>
Merges the given other
Frames
object into this Frames
object (self
).
This function performs no allocation or re-mapping, it exists for convenience and usability purposes.
The given other
must be physically contiguous with self
, i.e., come immediately before or after self
.
That is, either self.start == other.end + 1
or self.end + 1 == other.start
must be true.
If either of those conditions are met, self
is modified and Ok(())
is returned,
otherwise Err(other)
is returned.
Trait Implementations§
source§impl<const S: MemoryState, P: PageSize> Ord for Frames<S, P>
impl<const S: MemoryState, P: PageSize> Ord for Frames<S, P>
source§impl<const S: MemoryState, P: PageSize> PartialEq<Frames<S, P>> for Frames<S, P>
impl<const S: MemoryState, P: PageSize> PartialEq<Frames<S, P>> for Frames<S, P>
source§impl<const S: MemoryState, P: PageSize> PartialOrd<Frames<S, P>> for Frames<S, P>
impl<const S: MemoryState, P: PageSize> PartialOrd<Frames<S, P>> for Frames<S, P>
1.0.0 · source§fn le(&self, other: &Rhs) -> bool
fn le(&self, other: &Rhs) -> bool
self
and other
) and is used by the <=
operator. Read more