Struct memory_structs::FrameRange
source · pub struct FrameRange(_);
Expand description
A range of Frame
s that are contiguous in physical memory.
Implementations§
source§impl FrameRange
impl FrameRange
sourcepub const fn new(start: Frame, end: Frame) -> FrameRange
pub const fn new(start: Frame, end: Frame) -> FrameRange
Creates a new range of Frame
s that spans from start
to end
, both inclusive bounds.
sourcepub const fn empty() -> FrameRange
pub const fn empty() -> FrameRange
Creates a FrameRange
that will always yield None
when iterated.
sourcepub fn from_phys_addr(
starting_addr: PhysicalAddress,
size_in_bytes: usize
) -> FrameRange
pub fn from_phys_addr(
starting_addr: PhysicalAddress,
size_in_bytes: usize
) -> FrameRange
A convenience method for creating a new FrameRange
that spans all Frame
s from the given PhysicalAddress
to an end bound based on the given size.
sourcepub const fn start_address(&self) -> PhysicalAddress
pub const fn start_address(&self) -> PhysicalAddress
Returns the PhysicalAddress
of the starting Frame
in this FrameRange
.
sourcepub const fn size_in_frames(&self) -> usize
pub const 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.
sourcepub const fn size_in_bytes(&self) -> usize
pub const fn size_in_bytes(&self) -> usize
Returns the size of this range in number of bytes.
sourcepub fn contains_address(&self, addr: PhysicalAddress) -> bool
pub fn contains_address(&self, addr: PhysicalAddress) -> bool
Returns true
if this FrameRange
contains the given PhysicalAddress
.
sourcepub 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)
.
sourcepub 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., addr - self.start_address()
.
If the given offset
is not within this range of Frame
s, this returns None
.
Examples
If the range covers addresses 0x2000
to 0x4000
, then address_at_offset(0x1500)
would return Some(0x3500)
.
sourcepub fn to_extended(&self, to_include: Frame) -> FrameRange
pub fn to_extended(&self, to_include: Frame) -> FrameRange
Returns a new separate FrameRange
that is extended to include the given Frame
.
sourcepub fn overlap(&self, other: &FrameRange) -> Option<FrameRange>
pub fn overlap(&self, other: &FrameRange) -> Option<FrameRange>
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.
Methods from Deref<Target = RangeInclusive<Frame>>§
1.27.0 · sourcepub fn start(&self) -> &Idx
pub fn start(&self) -> &Idx
Returns the lower bound of the range (inclusive).
When using an inclusive range for iteration, the values of start()
and
end()
are unspecified after the iteration ended. To determine
whether the inclusive range is empty, use the is_empty()
method
instead of comparing start() > end()
.
Note: the value returned by this method is unspecified after the range has been iterated to exhaustion.
Examples
assert_eq!((3..=5).start(), &3);
1.27.0 · sourcepub fn end(&self) -> &Idx
pub fn end(&self) -> &Idx
Returns the upper bound of the range (inclusive).
When using an inclusive range for iteration, the values of start()
and end()
are unspecified after the iteration ended. To determine
whether the inclusive range is empty, use the is_empty()
method
instead of comparing start() > end()
.
Note: the value returned by this method is unspecified after the range has been iterated to exhaustion.
Examples
assert_eq!((3..=5).end(), &5);
1.35.0 · 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.
Examples
assert!(!(3..=5).contains(&2));
assert!( (3..=5).contains(&3));
assert!( (3..=5).contains(&4));
assert!( (3..=5).contains(&5));
assert!(!(3..=5).contains(&6));
assert!( (3..=3).contains(&3));
assert!(!(3..=2).contains(&3));
assert!( (0.0..=1.0).contains(&1.0));
assert!(!(0.0..=1.0).contains(&f32::NAN));
assert!(!(0.0..=f32::NAN).contains(&0.0));
assert!(!(f32::NAN..=1.0).contains(&1.0));
This method always returns false
after iteration has finished:
let mut r = 3..=5;
assert!(r.contains(&3) && r.contains(&5));
for _ in r.by_ref() {}
// Precise field values are unspecified here
assert!(!r.contains(&3) && !r.contains(&5));
1.47.0 · sourcepub fn is_empty(&self) -> bool
pub fn is_empty(&self) -> bool
Returns true
if the range contains no items.
Examples
assert!(!(3..=5).is_empty());
assert!(!(3..=3).is_empty());
assert!( (3..=2).is_empty());
The range is empty if either side is incomparable:
assert!(!(3.0..=5.0).is_empty());
assert!( (3.0..=f32::NAN).is_empty());
assert!( (f32::NAN..=5.0).is_empty());
This method returns true
after iteration has finished:
let mut r = 3..=5;
for _ in r.by_ref() {}
// Precise field values are unspecified here
assert!(r.is_empty());
Trait Implementations§
source§impl Clone for FrameRange
impl Clone for FrameRange
source§fn clone(&self) -> FrameRange
fn clone(&self) -> FrameRange
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moresource§impl Debug for FrameRange
impl Debug for FrameRange
source§impl Deref for FrameRange
impl Deref for FrameRange
§type Target = RangeInclusive<Frame>
type Target = RangeInclusive<Frame>
source§impl DerefMut for FrameRange
impl DerefMut for FrameRange
source§impl IntoIterator for FrameRange
impl IntoIterator for FrameRange
source§impl PartialEq<FrameRange> for FrameRange
impl PartialEq<FrameRange> for FrameRange
source§fn eq(&self, other: &FrameRange) -> bool
fn eq(&self, other: &FrameRange) -> bool
self
and other
values to be equal, and is used
by ==
.