Rename some lifetimes (ResMut etc) for clarity (#11021)
Use `'w` for world lifetime consistently. When implementing system params, useful to look at how other params are implemented. `'w` makes it clear it is world, not state.
This commit is contained in:
		
							parent
							
								
									05b00267c6
								
							
						
					
					
						commit
						0c2df27930
					
				@ -332,7 +332,7 @@ macro_rules! impl_methods {
 | 
			
		||||
            /// Consume `self` and return a mutable reference to the
 | 
			
		||||
            /// contained value while marking `self` as "changed".
 | 
			
		||||
            #[inline]
 | 
			
		||||
            pub fn into_inner(mut self) -> &'a mut $target {
 | 
			
		||||
            pub fn into_inner(mut self) -> &'w mut $target {
 | 
			
		||||
                self.set_changed();
 | 
			
		||||
                self.value
 | 
			
		||||
            }
 | 
			
		||||
@ -375,7 +375,7 @@ macro_rules! impl_methods {
 | 
			
		||||
            /// }
 | 
			
		||||
            /// # bevy_ecs::system::assert_is_system(reset_positions);
 | 
			
		||||
            /// ```
 | 
			
		||||
            pub fn map_unchanged<U: ?Sized>(self, f: impl FnOnce(&mut $target) -> &mut U) -> Mut<'a, U> {
 | 
			
		||||
            pub fn map_unchanged<U: ?Sized>(self, f: impl FnOnce(&mut $target) -> &mut U) -> Mut<'w, U> {
 | 
			
		||||
                Mut {
 | 
			
		||||
                    value: f(self.value),
 | 
			
		||||
                    ticks: self.ticks,
 | 
			
		||||
@ -410,19 +410,19 @@ macro_rules! impl_debug {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#[derive(Clone)]
 | 
			
		||||
pub(crate) struct Ticks<'a> {
 | 
			
		||||
    pub(crate) added: &'a Tick,
 | 
			
		||||
    pub(crate) changed: &'a Tick,
 | 
			
		||||
pub(crate) struct Ticks<'w> {
 | 
			
		||||
    pub(crate) added: &'w Tick,
 | 
			
		||||
    pub(crate) changed: &'w Tick,
 | 
			
		||||
    pub(crate) last_run: Tick,
 | 
			
		||||
    pub(crate) this_run: Tick,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl<'a> Ticks<'a> {
 | 
			
		||||
impl<'w> Ticks<'w> {
 | 
			
		||||
    /// # Safety
 | 
			
		||||
    /// This should never alias the underlying ticks with a mutable one such as `TicksMut`.
 | 
			
		||||
    #[inline]
 | 
			
		||||
    pub(crate) unsafe fn from_tick_cells(
 | 
			
		||||
        cells: TickCells<'a>,
 | 
			
		||||
        cells: TickCells<'w>,
 | 
			
		||||
        last_run: Tick,
 | 
			
		||||
        this_run: Tick,
 | 
			
		||||
    ) -> Self {
 | 
			
		||||
@ -435,19 +435,19 @@ impl<'a> Ticks<'a> {
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
pub(crate) struct TicksMut<'a> {
 | 
			
		||||
    pub(crate) added: &'a mut Tick,
 | 
			
		||||
    pub(crate) changed: &'a mut Tick,
 | 
			
		||||
pub(crate) struct TicksMut<'w> {
 | 
			
		||||
    pub(crate) added: &'w mut Tick,
 | 
			
		||||
    pub(crate) changed: &'w mut Tick,
 | 
			
		||||
    pub(crate) last_run: Tick,
 | 
			
		||||
    pub(crate) this_run: Tick,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl<'a> TicksMut<'a> {
 | 
			
		||||
impl<'w> TicksMut<'w> {
 | 
			
		||||
    /// # Safety
 | 
			
		||||
    /// This should never alias the underlying ticks. All access must be unique.
 | 
			
		||||
    #[inline]
 | 
			
		||||
    pub(crate) unsafe fn from_tick_cells(
 | 
			
		||||
        cells: TickCells<'a>,
 | 
			
		||||
        cells: TickCells<'w>,
 | 
			
		||||
        last_run: Tick,
 | 
			
		||||
        this_run: Tick,
 | 
			
		||||
    ) -> Self {
 | 
			
		||||
@ -460,8 +460,8 @@ impl<'a> TicksMut<'a> {
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl<'a> From<TicksMut<'a>> for Ticks<'a> {
 | 
			
		||||
    fn from(ticks: TicksMut<'a>) -> Self {
 | 
			
		||||
impl<'w> From<TicksMut<'w>> for Ticks<'w> {
 | 
			
		||||
    fn from(ticks: TicksMut<'w>) -> Self {
 | 
			
		||||
        Ticks {
 | 
			
		||||
            added: ticks.added,
 | 
			
		||||
            changed: ticks.changed,
 | 
			
		||||
@ -542,9 +542,9 @@ impl_debug!(Res<'w, T>, Resource);
 | 
			
		||||
/// Panics when used as a [`SystemParam`](crate::system::SystemParam) if the resource does not exist.
 | 
			
		||||
///
 | 
			
		||||
/// Use `Option<ResMut<T>>` instead if the resource might not always exist.
 | 
			
		||||
pub struct ResMut<'a, T: ?Sized + Resource> {
 | 
			
		||||
    pub(crate) value: &'a mut T,
 | 
			
		||||
    pub(crate) ticks: TicksMut<'a>,
 | 
			
		||||
pub struct ResMut<'w, T: ?Sized + Resource> {
 | 
			
		||||
    pub(crate) value: &'w mut T,
 | 
			
		||||
    pub(crate) ticks: TicksMut<'w>,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl<'w, 'a, T: Resource> IntoIterator for &'a ResMut<'w, T>
 | 
			
		||||
@ -572,15 +572,15 @@ where
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
change_detection_impl!(ResMut<'a, T>, T, Resource);
 | 
			
		||||
change_detection_mut_impl!(ResMut<'a, T>, T, Resource);
 | 
			
		||||
impl_methods!(ResMut<'a, T>, T, Resource);
 | 
			
		||||
impl_debug!(ResMut<'a, T>, Resource);
 | 
			
		||||
change_detection_impl!(ResMut<'w, T>, T, Resource);
 | 
			
		||||
change_detection_mut_impl!(ResMut<'w, T>, T, Resource);
 | 
			
		||||
impl_methods!(ResMut<'w, T>, T, Resource);
 | 
			
		||||
impl_debug!(ResMut<'w, T>, Resource);
 | 
			
		||||
 | 
			
		||||
impl<'a, T: Resource> From<ResMut<'a, T>> for Mut<'a, T> {
 | 
			
		||||
impl<'w, T: Resource> From<ResMut<'w, T>> for Mut<'w, T> {
 | 
			
		||||
    /// Convert this `ResMut` into a `Mut`. This allows keeping the change-detection feature of `Mut`
 | 
			
		||||
    /// while losing the specificity of `ResMut` for resources.
 | 
			
		||||
    fn from(other: ResMut<'a, T>) -> Mut<'a, T> {
 | 
			
		||||
    fn from(other: ResMut<'w, T>) -> Mut<'w, T> {
 | 
			
		||||
        Mut {
 | 
			
		||||
            value: other.value,
 | 
			
		||||
            ticks: other.ticks,
 | 
			
		||||
@ -600,20 +600,20 @@ impl<'a, T: Resource> From<ResMut<'a, T>> for Mut<'a, T> {
 | 
			
		||||
/// Panics when used as a `SystemParameter` if the resource does not exist.
 | 
			
		||||
///
 | 
			
		||||
/// Use `Option<NonSendMut<T>>` instead if the resource might not always exist.
 | 
			
		||||
pub struct NonSendMut<'a, T: ?Sized + 'static> {
 | 
			
		||||
    pub(crate) value: &'a mut T,
 | 
			
		||||
    pub(crate) ticks: TicksMut<'a>,
 | 
			
		||||
pub struct NonSendMut<'w, T: ?Sized + 'static> {
 | 
			
		||||
    pub(crate) value: &'w mut T,
 | 
			
		||||
    pub(crate) ticks: TicksMut<'w>,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
change_detection_impl!(NonSendMut<'a, T>, T,);
 | 
			
		||||
change_detection_mut_impl!(NonSendMut<'a, T>, T,);
 | 
			
		||||
impl_methods!(NonSendMut<'a, T>, T,);
 | 
			
		||||
impl_debug!(NonSendMut<'a, T>,);
 | 
			
		||||
change_detection_impl!(NonSendMut<'w, T>, T,);
 | 
			
		||||
change_detection_mut_impl!(NonSendMut<'w, T>, T,);
 | 
			
		||||
impl_methods!(NonSendMut<'w, T>, T,);
 | 
			
		||||
impl_debug!(NonSendMut<'w, T>,);
 | 
			
		||||
 | 
			
		||||
impl<'a, T: 'static> From<NonSendMut<'a, T>> for Mut<'a, T> {
 | 
			
		||||
impl<'w, T: 'static> From<NonSendMut<'w, T>> for Mut<'w, T> {
 | 
			
		||||
    /// Convert this `NonSendMut` into a `Mut`. This allows keeping the change-detection feature of `Mut`
 | 
			
		||||
    /// while losing the specificity of `NonSendMut`.
 | 
			
		||||
    fn from(other: NonSendMut<'a, T>) -> Mut<'a, T> {
 | 
			
		||||
    fn from(other: NonSendMut<'w, T>) -> Mut<'w, T> {
 | 
			
		||||
        Mut {
 | 
			
		||||
            value: other.value,
 | 
			
		||||
            ticks: other.ticks,
 | 
			
		||||
@ -645,14 +645,14 @@ impl<'a, T: 'static> From<NonSendMut<'a, T>> for Mut<'a, T> {
 | 
			
		||||
///     println!("{} changed", query.iter().filter(|c| c.is_changed()).count());
 | 
			
		||||
/// }
 | 
			
		||||
/// ```
 | 
			
		||||
pub struct Ref<'a, T: ?Sized> {
 | 
			
		||||
    pub(crate) value: &'a T,
 | 
			
		||||
    pub(crate) ticks: Ticks<'a>,
 | 
			
		||||
pub struct Ref<'w, T: ?Sized> {
 | 
			
		||||
    pub(crate) value: &'w T,
 | 
			
		||||
    pub(crate) ticks: Ticks<'w>,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl<'a, T: ?Sized> Ref<'a, T> {
 | 
			
		||||
impl<'w, T: ?Sized> Ref<'w, T> {
 | 
			
		||||
    /// Returns the reference wrapped by this type. The reference is allowed to outlive `self`, which makes this method more flexible than simply borrowing `self`.
 | 
			
		||||
    pub fn into_inner(self) -> &'a T {
 | 
			
		||||
    pub fn into_inner(self) -> &'w T {
 | 
			
		||||
        self.value
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@ -660,7 +660,7 @@ impl<'a, T: ?Sized> Ref<'a, T> {
 | 
			
		||||
    ///
 | 
			
		||||
    /// This doesn't do anything else than call `f` on the wrapped value.
 | 
			
		||||
    /// This is equivalent to [`Mut::map_unchanged`].
 | 
			
		||||
    pub fn map<U: ?Sized>(self, f: impl FnOnce(&T) -> &U) -> Ref<'a, U> {
 | 
			
		||||
    pub fn map<U: ?Sized>(self, f: impl FnOnce(&T) -> &U) -> Ref<'w, U> {
 | 
			
		||||
        Ref {
 | 
			
		||||
            value: f(self.value),
 | 
			
		||||
            ticks: self.ticks,
 | 
			
		||||
@ -679,12 +679,12 @@ impl<'a, T: ?Sized> Ref<'a, T> {
 | 
			
		||||
    ///    as a reference to determine whether the wrapped value is newly added or changed.
 | 
			
		||||
    /// - `this_run` - A [`Tick`] corresponding to the current point in time -- "now".
 | 
			
		||||
    pub fn new(
 | 
			
		||||
        value: &'a T,
 | 
			
		||||
        added: &'a Tick,
 | 
			
		||||
        changed: &'a Tick,
 | 
			
		||||
        value: &'w T,
 | 
			
		||||
        added: &'w Tick,
 | 
			
		||||
        changed: &'w Tick,
 | 
			
		||||
        last_run: Tick,
 | 
			
		||||
        this_run: Tick,
 | 
			
		||||
    ) -> Ref<'a, T> {
 | 
			
		||||
    ) -> Ref<'w, T> {
 | 
			
		||||
        Ref {
 | 
			
		||||
            value,
 | 
			
		||||
            ticks: Ticks {
 | 
			
		||||
@ -708,16 +708,16 @@ where
 | 
			
		||||
        self.value.into_iter()
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
change_detection_impl!(Ref<'a, T>, T,);
 | 
			
		||||
impl_debug!(Ref<'a, T>,);
 | 
			
		||||
change_detection_impl!(Ref<'w, T>, T,);
 | 
			
		||||
impl_debug!(Ref<'w, T>,);
 | 
			
		||||
 | 
			
		||||
/// Unique mutable borrow of an entity's component
 | 
			
		||||
pub struct Mut<'a, T: ?Sized> {
 | 
			
		||||
    pub(crate) value: &'a mut T,
 | 
			
		||||
    pub(crate) ticks: TicksMut<'a>,
 | 
			
		||||
pub struct Mut<'w, T: ?Sized> {
 | 
			
		||||
    pub(crate) value: &'w mut T,
 | 
			
		||||
    pub(crate) ticks: TicksMut<'w>,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl<'a, T: ?Sized> Mut<'a, T> {
 | 
			
		||||
impl<'w, T: ?Sized> Mut<'w, T> {
 | 
			
		||||
    /// Creates a new change-detection enabled smart pointer.
 | 
			
		||||
    /// In almost all cases you do not need to call this method manually,
 | 
			
		||||
    /// as instances of `Mut` will be created by engine-internal code.
 | 
			
		||||
@ -734,9 +734,9 @@ impl<'a, T: ?Sized> Mut<'a, T> {
 | 
			
		||||
    ///   as a reference to determine whether the wrapped value is newly added or changed.
 | 
			
		||||
    /// - `this_run` - A [`Tick`] corresponding to the current point in time -- "now".
 | 
			
		||||
    pub fn new(
 | 
			
		||||
        value: &'a mut T,
 | 
			
		||||
        added: &'a mut Tick,
 | 
			
		||||
        last_changed: &'a mut Tick,
 | 
			
		||||
        value: &'w mut T,
 | 
			
		||||
        added: &'w mut Tick,
 | 
			
		||||
        last_changed: &'w mut Tick,
 | 
			
		||||
        last_run: Tick,
 | 
			
		||||
        this_run: Tick,
 | 
			
		||||
    ) -> Self {
 | 
			
		||||
@ -752,8 +752,8 @@ impl<'a, T: ?Sized> Mut<'a, T> {
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl<'a, T: ?Sized> From<Mut<'a, T>> for Ref<'a, T> {
 | 
			
		||||
    fn from(mut_ref: Mut<'a, T>) -> Self {
 | 
			
		||||
impl<'w, T: ?Sized> From<Mut<'w, T>> for Ref<'w, T> {
 | 
			
		||||
    fn from(mut_ref: Mut<'w, T>) -> Self {
 | 
			
		||||
        Self {
 | 
			
		||||
            value: mut_ref.value,
 | 
			
		||||
            ticks: mut_ref.ticks.into(),
 | 
			
		||||
@ -786,10 +786,10 @@ where
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
change_detection_impl!(Mut<'a, T>, T,);
 | 
			
		||||
change_detection_mut_impl!(Mut<'a, T>, T,);
 | 
			
		||||
impl_methods!(Mut<'a, T>, T,);
 | 
			
		||||
impl_debug!(Mut<'a, T>,);
 | 
			
		||||
change_detection_impl!(Mut<'w, T>, T,);
 | 
			
		||||
change_detection_mut_impl!(Mut<'w, T>, T,);
 | 
			
		||||
impl_methods!(Mut<'w, T>, T,);
 | 
			
		||||
impl_debug!(Mut<'w, T>,);
 | 
			
		||||
 | 
			
		||||
/// Unique mutable borrow of resources or an entity's component.
 | 
			
		||||
///
 | 
			
		||||
@ -799,17 +799,17 @@ impl_debug!(Mut<'a, T>,);
 | 
			
		||||
/// 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.
 | 
			
		||||
pub struct MutUntyped<'a> {
 | 
			
		||||
    pub(crate) value: PtrMut<'a>,
 | 
			
		||||
    pub(crate) ticks: TicksMut<'a>,
 | 
			
		||||
pub struct MutUntyped<'w> {
 | 
			
		||||
    pub(crate) value: PtrMut<'w>,
 | 
			
		||||
    pub(crate) ticks: TicksMut<'w>,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl<'a> MutUntyped<'a> {
 | 
			
		||||
impl<'w> MutUntyped<'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`](DetectChangesMut::bypass_change_detection).
 | 
			
		||||
    #[inline]
 | 
			
		||||
    pub fn into_inner(mut self) -> PtrMut<'a> {
 | 
			
		||||
    pub fn into_inner(mut self) -> PtrMut<'w> {
 | 
			
		||||
        self.set_changed();
 | 
			
		||||
        self.value
 | 
			
		||||
    }
 | 
			
		||||
@ -866,7 +866,7 @@ impl<'a> MutUntyped<'a> {
 | 
			
		||||
    /// // 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 fn map_unchanged<T: ?Sized>(self, f: impl FnOnce(PtrMut<'a>) -> &'a mut T) -> Mut<'a, T> {
 | 
			
		||||
    pub fn map_unchanged<T: ?Sized>(self, f: impl FnOnce(PtrMut<'w>) -> &'w mut T) -> Mut<'w, T> {
 | 
			
		||||
        Mut {
 | 
			
		||||
            value: f(self.value),
 | 
			
		||||
            ticks: self.ticks,
 | 
			
		||||
@ -877,7 +877,7 @@ impl<'a> MutUntyped<'a> {
 | 
			
		||||
    ///
 | 
			
		||||
    /// # Safety
 | 
			
		||||
    /// - `T` must be the erased pointee type for this [`MutUntyped`].
 | 
			
		||||
    pub unsafe fn with_type<T>(self) -> Mut<'a, T> {
 | 
			
		||||
    pub unsafe fn with_type<T>(self) -> Mut<'w, T> {
 | 
			
		||||
        Mut {
 | 
			
		||||
            value: self.value.deref_mut(),
 | 
			
		||||
            ticks: self.ticks,
 | 
			
		||||
@ -885,7 +885,7 @@ impl<'a> MutUntyped<'a> {
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl<'a> DetectChanges for MutUntyped<'a> {
 | 
			
		||||
impl<'w> DetectChanges for MutUntyped<'w> {
 | 
			
		||||
    #[inline]
 | 
			
		||||
    fn is_added(&self) -> bool {
 | 
			
		||||
        self.ticks
 | 
			
		||||
@ -906,8 +906,8 @@ impl<'a> DetectChanges for MutUntyped<'a> {
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl<'a> DetectChangesMut for MutUntyped<'a> {
 | 
			
		||||
    type Inner = PtrMut<'a>;
 | 
			
		||||
impl<'w> DetectChangesMut for MutUntyped<'w> {
 | 
			
		||||
    type Inner = PtrMut<'w>;
 | 
			
		||||
 | 
			
		||||
    #[inline]
 | 
			
		||||
    fn set_changed(&mut self) {
 | 
			
		||||
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user