Struct bevy_ptr::Ptr

source ·
pub struct Ptr<'a, A: IsAligned = Aligned>(/* private fields */);
Expand description

Type-erased borrow of some unknown type chosen when constructing this type.

This type tries to act “borrow-like” which means that:

  • It should be considered immutable: its target must not be changed while this pointer is alive.
  • It must always points to a valid value of whatever the pointee type is.
  • The lifetime 'a accurately represents how long the pointer is valid for.
  • Must be sufficiently aligned for the unknown pointee type.

It may be helpful to think of this type as similar to &'a dyn Any but without the metadata and able to point to data that does not correspond to a Rust type.

Implementations§

source§

impl<'a> Ptr<'a, Aligned>

source

pub fn to_unaligned(self) -> Ptr<'a, Unaligned>

Removes the alignment requirement of this pointer

source§

impl<A: IsAligned> Ptr<'_, A>

source

pub unsafe fn byte_offset(self, count: isize) -> Self

Calculates the offset from a pointer. As the pointer is type-erased, there is no size information available. The provided count parameter is in raw bytes.

See also: ptr::offset

§Safety
  • The offset cannot make the existing ptr null, or take it out of bounds for its allocation.
  • If the A type parameter is Aligned then the offset must not make the resulting pointer be unaligned for the pointee type.
source

pub unsafe fn byte_add(self, count: usize) -> Self

Calculates the offset from a pointer (convenience for .offset(count as isize)). As the pointer is type-erased, there is no size information available. The provided count parameter is in raw bytes.

See also: ptr::add

§Safety
  • The offset cannot make the existing ptr null, or take it out of bounds for its allocation.
  • If the A type parameter is Aligned then the offset must not make the resulting pointer be unaligned for the pointee type.
source§

impl<'a, A: IsAligned> Ptr<'a, A>

source

pub unsafe fn new(inner: NonNull<u8>) -> Self

Creates a new instance from a raw pointer.

§Safety
  • inner must point to valid value of whatever the pointee type is.
  • If the A type parameter is Aligned then inner must be sufficiently aligned for the pointee type.
  • inner must have correct provenance to allow reads of the pointee type.
  • The lifetime 'a must be constrained such that this Ptr will stay valid and nothing can mutate the pointee while this Ptr is live except through an UnsafeCell.
source

pub unsafe fn assert_unique(self) -> PtrMut<'a, A>

Transforms this Ptr into an PtrMut

§Safety

Another PtrMut for the same Ptr must not be created until the first is dropped.

source

pub unsafe fn deref<T>(self) -> &'a T

Transforms this Ptr<T> into a &T with the same lifetime

§Safety
  • T must be the erased pointee type for this Ptr.
  • If the type parameter A is Unaligned then this pointer must be sufficiently aligned for the pointee type T.
source

pub fn as_ptr(self) -> *mut u8

Gets the underlying pointer, erasing the associated lifetime.

If possible, it is strongly encouraged to use deref over this function, as it retains the lifetime.

Trait Implementations§

source§

impl<'a, A: Clone + IsAligned> Clone for Ptr<'a, A>

source§

fn clone(&self) -> Ptr<'a, A>

Returns a copy of the value. Read more
1.0.0 · source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
source§

impl<'a, T> From<&'a T> for Ptr<'a>

source§

fn from(val: &'a T) -> Self

Converts to this type from the input type.
source§

impl<'a, A: IsAligned> From<Ptr<'a, A>> for NonNull<u8>

source§

fn from(ptr: Ptr<'a, A>) -> Self

Converts to this type from the input type.
source§

impl<A: IsAligned> Pointer for Ptr<'_, A>

source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter.
source§

impl<'a, A: Copy + IsAligned> Copy for Ptr<'a, A>

Auto Trait Implementations§

§

impl<'a, A> Freeze for Ptr<'a, A>
where A: Sealed,

§

impl<'a, A> RefUnwindSafe for Ptr<'a, A>
where A: Sealed + RefUnwindSafe,

§

impl<'a, A = Aligned> !Send for Ptr<'a, A>

§

impl<'a, A = Aligned> !Sync for Ptr<'a, A>

§

impl<'a, A> Unpin for Ptr<'a, A>
where A: Sealed + Unpin,

§

impl<'a, A> UnwindSafe for Ptr<'a, A>
where A: Sealed + UnwindSafe,

Blanket Implementations§

source§

impl<T> Any for T
where T: 'static + ?Sized,

source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
source§

impl<T> Borrow<T> for T
where T: ?Sized,

source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<T, U> Into<U> for T
where U: From<T>,

source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

§

type Error = Infallible

The type returned in the event of a conversion error.
source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.