Struct memory::FrameRange
pub struct FrameRange<P = Page4K>(/* private fields */)
where
P: PageSize;Expand description
A range of Frames that are contiguous in physical memory.
Implementations§
§impl FrameRange<Page4K>
impl FrameRange<Page4K>
pub const fn from_phys_addr(
starting_addr: PhysicalAddress,
size_in_bytes: usize
) -> FrameRange<Page4K>
pub const fn from_phys_addr( starting_addr: PhysicalAddress, size_in_bytes: usize ) -> FrameRange<Page4K>
A convenience method for creating a new FrameRange that spans all Frames from the given PhysicalAddress to an end bound based on the given size.
§impl<P> FrameRange<P>where
P: PageSize,
impl<P> FrameRange<P>where P: PageSize,
pub const fn empty() -> FrameRange<P>
pub const fn empty() -> FrameRange<P>
Creates an empty FrameRange that will always yield None when iterated.
pub const fn new(start: Frame<P>, end: Frame<P>) -> FrameRange<P>
pub const fn new(start: Frame<P>, end: Frame<P>) -> FrameRange<P>
Creates a new range of Frames that spans from start to end, both inclusive bounds.
pub const fn start_address(&self) -> PhysicalAddress
pub const fn start_address(&self) -> PhysicalAddress
Returns the PhysicalAddress of the starting Frame in this FrameRange.
pub const fn size_in_frames(&self) -> usize
pub const fn size_in_frames(&self) -> usize
Returns the number of Frames 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 const fn size_in_bytes(&self) -> usize
pub const fn size_in_bytes(&self) -> usize
Returns the size of this range in bytes.
pub const fn contains_address(&self, addr: PhysicalAddress) -> bool
pub const fn contains_address(&self, addr: PhysicalAddress) -> bool
Returns true if this FrameRange contains the given PhysicalAddress.
pub const fn offset_of_address(&self, addr: PhysicalAddress) -> Option<usize>
pub const 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 Frames, this returns None.
Examples
If the range covers addresses 0x2000 to 0x4000, then offset_of_address(0x3500) would return Some(0x1500).
pub const fn address_at_offset(&self, offset: usize) -> Option<PhysicalAddress>
pub const fn address_at_offset(&self, offset: usize) -> Option<PhysicalAddress>
Returns the PhysicalAddress at the given offset into this FrameRangewithin this FrameRange, i.e., self.start_address() + offset.
If the given offset is not within this range of Frames, 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 Frames that overlap across this FrameRange and the given other FrameRange.
If there is no overlap between the two ranges, None is returned.
pub fn into_4k_frames(self) -> FrameRange<Page4K>
pub fn into_4k_frames(self) -> FrameRange<Page4K>
Converts this range of Frames into an identical 4K-sized range.
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.
Trait Implementations§
§impl<P> Clone for FrameRange<P>where
P: Clone + PageSize,
impl<P> Clone for FrameRange<P>where P: Clone + PageSize,
§fn clone(&self) -> FrameRange<P>
fn clone(&self) -> FrameRange<P>
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more§impl<P> Debug for FrameRange<P>where
P: PageSize,
impl<P> Debug for FrameRange<P>where P: PageSize,
§impl<P> Default for FrameRange<P>where
P: PageSize,
impl<P> Default for FrameRange<P>where P: PageSize,
§fn default() -> FrameRange<P>
fn default() -> FrameRange<P>
§impl<P> Deref for FrameRange<P>where
P: PageSize,
impl<P> Deref for FrameRange<P>where P: PageSize,
§type Target = RangeInclusive<Frame<P>>
type Target = RangeInclusive<Frame<P>>
§fn deref(&self) -> &RangeInclusive<Frame<P>>
fn deref(&self) -> &RangeInclusive<Frame<P>>
§impl DerefMut for FrameRange<Page4K>
impl DerefMut for FrameRange<Page4K>
§fn deref_mut(&mut self) -> &mut RangeInclusive<Frame<Page4K>>
fn deref_mut(&mut self) -> &mut RangeInclusive<Frame<Page4K>>
§impl From<FrameRange<Page1G>> for FrameRange<Page4K>
impl From<FrameRange<Page1G>> for FrameRange<Page4K>
§fn from(r: FrameRange<Page1G>) -> FrameRange<Page4K>
fn from(r: FrameRange<Page1G>) -> FrameRange<Page4K>
§impl From<FrameRange<Page2M>> for FrameRange<Page4K>
impl From<FrameRange<Page2M>> for FrameRange<Page4K>
§fn from(r: FrameRange<Page2M>) -> FrameRange<Page4K>
fn from(r: FrameRange<Page2M>) -> FrameRange<Page4K>
§impl<P> IntoIterator for &FrameRange<P>where
P: PageSize,
impl<P> IntoIterator for &FrameRange<P>where P: PageSize,
§type IntoIter = RangeInclusiveIterator<Frame<P>>
type IntoIter = RangeInclusiveIterator<Frame<P>>
§fn into_iter(self) -> <&FrameRange<P> as IntoIterator>::IntoIter
fn into_iter(self) -> <&FrameRange<P> as IntoIterator>::IntoIter
§impl<P> IntoIterator for FrameRange<P>where
P: PageSize,
impl<P> IntoIterator for FrameRange<P>where P: PageSize,
§type IntoIter = RangeInclusiveIterator<Frame<P>>
type IntoIter = RangeInclusiveIterator<Frame<P>>
§fn into_iter(self) -> <FrameRange<P> as IntoIterator>::IntoIter
fn into_iter(self) -> <FrameRange<P> as IntoIterator>::IntoIter
§impl<P> PartialEq<FrameRange<P>> for FrameRange<P>where
P: PartialEq<P> + PageSize,
impl<P> PartialEq<FrameRange<P>> for FrameRange<P>where P: PartialEq<P> + PageSize,
§fn eq(&self, other: &FrameRange<P>) -> bool
fn eq(&self, other: &FrameRange<P>) -> bool
self and other values to be equal, and is used
by ==.