pub struct PtrLive<'a, T>(/* private fields */);Expand description
Evidence that a range of memory is alive.
This evidence enables taking pointer offsets (see PtrAddExt)
without ownership of that range of memory (i.e., not using Perm).
Its lifetime is bounded by some &Perm<*const [T]> (via Perm::live
or Perm::live_mut) so it can’t outlive the associated allocation.
Implementations§
Source§impl<T> PtrLive<'_, T>
impl<T> PtrLive<'_, T>
Sourcepub fn len(self) -> usize
pub fn len(self) -> usize
The number of elements (of type T) in the range.
The length in bytes is thus self.len()@ * size_of_logic::<T>().
logic(opaque) ⚠
Sourcepub fn contains_range(self, ptr: *const T, len: Int) -> bool
pub fn contains_range(self, ptr: *const T, len: Int) -> bool
Range inclusion.
The live range self.ward()..=(self.ward() + self.len()) contains
the range ptr..=(ptr + len).
Note that the out-of-bounds pointer self.ward() + self.len()
is included.
The provenance of ptr must be the same as self.ward().
logic(open, inline)
let offset = ptr.sub_logic(self.ward()); // This checks that the provenance is the same. ptr == self.ward().offset_logic(offset) && 0 <= offset && offset <= self.len()@ && 0 <= offset + len && offset + len <= self.len()@
Trait Implementations§
impl<T> Copy for PtrLive<'_, T>
Auto Trait Implementations§
impl<'a, T> Freeze for PtrLive<'a, T>
impl<'a, T> Objective for PtrLive<'a, T>where
T: Objective,
impl<'a, T> RefUnwindSafe for PtrLive<'a, T>where
T: RefUnwindSafe,
impl<'a, T> Send for PtrLive<'a, T>where
T: Sync,
impl<'a, T> Sync for PtrLive<'a, T>where
T: Sync,
impl<'a, T> Unpin for PtrLive<'a, T>
impl<'a, T> UnsafeUnpin for PtrLive<'a, T>
impl<'a, T> UnwindSafe for PtrLive<'a, T>where
T: RefUnwindSafe,
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more