Struct bevy::ecs::change_detection::MutUntyped

pub struct MutUntyped<'w> { /* private fields */ }
Expand description

Unique mutable borrow of resources or an entity’s component.

Similar to Mut, but not generic over the component type, instead exposing the raw pointer as a *mut ().

Usually you don’t need to use this and can instead use the APIs returning a Mut, but in situations where the types are not known at compile time or are defined outside of rust this can be used.

Implementations§

§

impl<'w> MutUntyped<'w>

pub fn into_inner(self) -> PtrMut<'w>

Returns the pointer to the value, marking it as changed.

In order to avoid marking the value as changed, you need to call bypass_change_detection.

pub fn reborrow(&mut self) -> MutUntyped<'_>

Returns a MutUntyped with a smaller lifetime. This is useful if you have &mut MutUntyped, but you need a MutUntyped.

pub fn has_changed_since(&self, tick: Tick) -> bool

Returns true if this value was changed or mutably dereferenced either since a specific change tick.

pub fn as_mut(&mut self) -> PtrMut<'_>

Returns a pointer to the value without taking ownership of this smart pointer, marking it as changed.

In order to avoid marking the value as changed, you need to call bypass_change_detection.

pub fn as_ref(&self) -> Ptr<'_>

Returns an immutable pointer to the value without taking ownership.

pub fn map_unchanged<T>( self, f: impl FnOnce(PtrMut<'w>) -> &'w mut T ) -> Mut<'w, T>
where T: ?Sized,

Turn this MutUntyped into a Mut by mapping the inner PtrMut to another value, without flagging a change. This function is the untyped equivalent of Mut::map_unchanged.

You should never modify the argument passed to the closure – if you want to modify the data without flagging a change, consider using bypass_change_detection to make your intent explicit.

If you know the type of the value you can do

// SAFETY: ptr is of type `u8`
mut_untyped.map_unchanged(|ptr| unsafe { ptr.deref_mut::<u8>() });

If you have a ReflectFromPtr that you know belongs to this MutUntyped, you can do

// SAFETY: from the context it is known that `ReflectFromPtr` was made for the type of the `MutUntyped`
mut_untyped.map_unchanged(|ptr| unsafe { reflect_from_ptr.as_reflect_mut(ptr) });

pub unsafe fn with_type<T>(self) -> Mut<'w, T>

Transforms this MutUntyped into a Mut<T> with the same lifetime.

§Safety
  • T must be the erased pointee type for this MutUntyped.

Trait Implementations§

§

impl Debug for MutUntyped<'_>

§

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

Formats the value using the given formatter. Read more
§

impl<'w> DetectChanges for MutUntyped<'w>

§

fn is_added(&self) -> bool

Returns true if this value was added after the system last ran.
§

fn is_changed(&self) -> bool

Returns true if this value was added or mutably dereferenced either since the last time the system ran or, if the system never ran, since the beginning of the program. Read more
§

fn last_changed(&self) -> Tick

Returns the change tick recording the time this data was most recently changed. Read more
§

impl<'w> DetectChangesMut for MutUntyped<'w>

§

type Inner = PtrMut<'w>

The type contained within this smart pointer Read more
§

fn set_changed(&mut self)

Flags this value as having been changed. Read more
§

fn set_last_changed(&mut self, last_changed: Tick)

Manually sets the change tick recording the time when this data was last mutated. Read more
§

fn bypass_change_detection( &mut self ) -> &mut <MutUntyped<'w> as DetectChangesMut>::Inner

Manually bypasses change detection, allowing you to mutate the underlying value without updating the change tick. Read more
§

impl<'w, T> From<Mut<'w, T>> for MutUntyped<'w>

§

fn from(value: Mut<'w, T>) -> MutUntyped<'w>

Converts to this type from the input type.

Auto Trait Implementations§

§

impl<'w> Freeze for MutUntyped<'w>

§

impl<'w> RefUnwindSafe for MutUntyped<'w>

§

impl<'w> !Send for MutUntyped<'w>

§

impl<'w> !Sync for MutUntyped<'w>

§

impl<'w> Unpin for MutUntyped<'w>

§

impl<'w> !UnwindSafe for MutUntyped<'w>

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
§

impl<T, U> AsBindGroupShaderType<U> for T
where U: ShaderType, &'a T: for<'a> Into<U>,

§

fn as_bind_group_shader_type(&self, _images: &RenderAssets<GpuImage>) -> 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
§

impl<T> Downcast<T> for T

§

fn downcast(&self) -> &T

§

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

§

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

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

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

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.

§

impl<S> FromSample<S> for S

§

fn from_sample_(s: S) -> S

§

impl<T> Instrument for T

§

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

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

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> IntoEither for T

source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
§

impl<F, T> IntoSample<T> for F
where T: FromSample<F>,

§

fn into_sample(self) -> T

§

impl<T> Pointable for T

§

const ALIGN: usize = _

The alignment of pointer.
§

type Init = T

The type for initializers.
§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
source§

impl<T> Same for T

§

type Output = T

Should always be Self
§

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

§

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

impl<T> Upcast<T> for T

§

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

§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

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
§

fn with_current_subscriber(self) -> WithDispatch<Self>

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

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