Struct bevy::ecs::ptr::Ptr

source ·
pub struct Ptr<'a, A = Aligned>(/* private fields */)
where
    A: IsAligned;
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>

source

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

Removes the alignment requirement of this pointer

source§

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

source

pub unsafe fn byte_offset(self, count: isize) -> Ptr<'_, A>

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) -> Ptr<'_, A>

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> Ptr<'a, A>
where A: IsAligned,

source

pub unsafe fn new(inner: NonNull<u8>) -> Ptr<'a, A>

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 for Ptr<'a, A>
where A: Clone + IsAligned,

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) -> Ptr<'a>

Converts to this type from the input type.
source§

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

source§

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

Converts to this type from the input type.
source§

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

source§

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

Formats the value using the given formatter.
source§

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

Auto Trait Implementations§

§

impl<'a, A> RefUnwindSafe for Ptr<'a, A>
where A: 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: Unpin,

§

impl<'a, A> UnwindSafe for Ptr<'a, A>
where A: 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, U> AsBindGroupShaderType<U> for T
where U: ShaderType, &'a T: for<'a> Into<U>,

source§

fn as_bind_group_shader_type(&self, _images: &RenderAssets<Image>) -> U

Return the T ShaderType for self. When used in AsBindGroup derives, it is safe to assume that all images in self exist.
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> Downcast<T> for T

source§

fn downcast(&self) -> &T

source§

impl<T> Downcast for T
where T: Any,

source§

fn into_any(self: Box<T>) -> Box<dyn Any>

Convert Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>. Box<dyn Any> can then be further downcast into Box<ConcreteType> where ConcreteType implements Trait.
source§

fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>

Convert Rc<Trait> (where Trait: Downcast) to Rc<Any>. Rc<Any> can then be further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
source§

fn as_any(&self) -> &(dyn Any + 'static)

Convert &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &Any’s vtable from &Trait’s.
source§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Convert &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &mut Any’s vtable from &mut Trait’s.
source§

impl<T> From<T> for T

source§

fn from(t: T) -> T

Returns the argument unchanged.

source§

impl<S> FromSample<S> for S

source§

fn from_sample_(s: S) -> S

source§

impl<T> Instrument for T

source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
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> ToOwned for T
where T: Clone,

§

type Owned = T

The resulting type after obtaining ownership.
source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
source§

impl<T, U> ToSample<U> for T
where U: FromSample<T>,

source§

fn to_sample_(self) -> U

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.
source§

impl<T> Upcast<T> for T

source§

fn upcast(&self) -> Option<&T>

source§

impl<T> WithSubscriber for T

source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
source§

impl<S, T> Duplex<S> for T
where T: FromSample<S> + ToSample<S>,