Files
phy/bevy_ecs/change_detection/trait.DetectChangesMut.html
Orion Kindel 0ce894e6b0 doc
2025-03-18 10:30:23 -05:00

105 lines
25 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta name="generator" content="rustdoc"><meta name="description" content="Types that implement reliable change detection."><title>DetectChangesMut in bevy_ecs::change_detection - Rust</title><script>if(window.location.protocol!=="file:")document.head.insertAdjacentHTML("beforeend","SourceSerif4-Regular-6b053e98.ttf.woff2,FiraSans-Regular-0fe48ade.woff2,FiraSans-Medium-e1aa3f0a.woff2,SourceCodePro-Regular-8badfe75.ttf.woff2,SourceCodePro-Semibold-aa29a496.ttf.woff2".split(",").map(f=>`<link rel="preload" as="font" type="font/woff2" crossorigin href="../../static.files/${f}">`).join(""))</script><link rel="stylesheet" href="../../static.files/normalize-9960930a.css"><link rel="stylesheet" href="../../static.files/rustdoc-42caa33d.css"><meta name="rustdoc-vars" data-root-path="../../" data-static-root-path="../../static.files/" data-current-crate="bevy_ecs" data-themes="" data-resource-suffix="" data-rustdoc-version="1.84.0 (9fc6b4312 2025-01-07)" data-channel="1.84.0" data-search-js="search-92e6798f.js" data-settings-js="settings-0f613d39.js" ><script src="../../static.files/storage-59e33391.js"></script><script defer src="sidebar-items.js"></script><script defer src="../../static.files/main-5f194d8c.js"></script><noscript><link rel="stylesheet" href="../../static.files/noscript-893ab5e7.css"></noscript><link rel="icon" href="https://bevyengine.org/assets/icon.png"></head><body class="rustdoc trait"><!--[if lte IE 11]><div class="warning">This old browser is unsupported and will most likely display funky things.</div><![endif]--><nav class="mobile-topbar"><button class="sidebar-menu-toggle" title="show sidebar"></button><a class="logo-container" href="../../bevy_ecs/index.html"><img src="https://bevyengine.org/assets/icon.png" alt=""></a></nav><nav class="sidebar"><div class="sidebar-crate"><a class="logo-container" href="../../bevy_ecs/index.html"><img src="https://bevyengine.org/assets/icon.png" alt="logo"></a><h2><a href="../../bevy_ecs/index.html">bevy_<wbr>ecs</a><span class="version">0.15.1</span></h2></div><div class="sidebar-elems"><section id="rustdoc-toc"><h2 class="location"><a href="#">Detect<wbr>Changes<wbr>Mut</a></h2><h3><a href="#">Sections</a></h3><ul class="block top-toc"><li><a href="#example" title="Example">Example</a></li></ul><h3><a href="#required-associated-types">Required Associated Types</a></h3><ul class="block"><li><a href="#associatedtype.Inner" title="Inner">Inner</a></li></ul><h3><a href="#required-methods">Required Methods</a></h3><ul class="block"><li><a href="#tymethod.bypass_change_detection" title="bypass_change_detection">bypass_change_detection</a></li><li><a href="#tymethod.set_changed" title="set_changed">set_changed</a></li><li><a href="#tymethod.set_last_changed" title="set_last_changed">set_last_changed</a></li></ul><h3><a href="#provided-methods">Provided Methods</a></h3><ul class="block"><li><a href="#method.replace_if_neq" title="replace_if_neq">replace_if_neq</a></li><li><a href="#method.set_if_neq" title="set_if_neq">set_if_neq</a></li></ul><h3><a href="#implementors">Implementors</a></h3></section><div id="rustdoc-modnav"><h2><a href="index.html">In bevy_<wbr>ecs::<wbr>change_<wbr>detection</a></h2></div></div></nav><div class="sidebar-resizer"></div><main><div class="width-limiter"><rustdoc-search></rustdoc-search><section id="main-content" class="content"><div class="main-heading"><span class="rustdoc-breadcrumbs"><a href="../index.html">bevy_ecs</a>::<wbr><a href="index.html">change_detection</a></span><h1>Trait <span class="trait">DetectChangesMut</span><button id="copy-path" title="Copy item path to clipboard">Copy item path</button></h1><rustdoc-toolbar></rustdoc-toolbar><span class="sub-heading"><a class="src" href="../../src/bevy_ecs/change_detection.rs.html#108-271">Source</a> </span></div><pre class="rust item-decl"><code>pub trait DetectChangesMut: <a class="trait" href="trait.DetectChanges.html" title="trait bevy_ecs::change_detection::DetectChanges">DetectChanges</a> {
type <a href="#associatedtype.Inner" class="associatedtype">Inner</a>: ?<a class="trait" href="https://doc.rust-lang.org/1.84.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>;
// Required methods
fn <a href="#tymethod.set_changed" class="fn">set_changed</a>(&amp;mut self);
<span class="item-spacer"></span> fn <a href="#tymethod.set_last_changed" class="fn">set_last_changed</a>(&amp;mut self, last_changed: <a class="struct" href="../component/struct.Tick.html" title="struct bevy_ecs::component::Tick">Tick</a>);
<span class="item-spacer"></span> fn <a href="#tymethod.bypass_change_detection" class="fn">bypass_change_detection</a>(&amp;mut self) -&gt; &amp;mut Self::<a class="associatedtype" href="trait.DetectChangesMut.html#associatedtype.Inner" title="type bevy_ecs::change_detection::DetectChangesMut::Inner">Inner</a>;
// Provided methods
fn <a href="#method.set_if_neq" class="fn">set_if_neq</a>(&amp;mut self, value: Self::<a class="associatedtype" href="trait.DetectChangesMut.html#associatedtype.Inner" title="type bevy_ecs::change_detection::DetectChangesMut::Inner">Inner</a>) -&gt; <a class="primitive" href="https://doc.rust-lang.org/1.84.0/std/primitive.bool.html">bool</a>
<span class="where">where Self::<a class="associatedtype" href="trait.DetectChangesMut.html#associatedtype.Inner" title="type bevy_ecs::change_detection::DetectChangesMut::Inner">Inner</a>: <a class="trait" href="https://doc.rust-lang.org/1.84.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a> + <a class="trait" href="https://doc.rust-lang.org/1.84.0/core/cmp/trait.PartialEq.html" title="trait core::cmp::PartialEq">PartialEq</a></span> { ... }
<span class="item-spacer"></span> fn <a href="#method.replace_if_neq" class="fn">replace_if_neq</a>(&amp;mut self, value: Self::<a class="associatedtype" href="trait.DetectChangesMut.html#associatedtype.Inner" title="type bevy_ecs::change_detection::DetectChangesMut::Inner">Inner</a>) -&gt; <a class="enum" href="https://doc.rust-lang.org/1.84.0/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;Self::<a class="associatedtype" href="trait.DetectChangesMut.html#associatedtype.Inner" title="type bevy_ecs::change_detection::DetectChangesMut::Inner">Inner</a>&gt;
<span class="where">where Self::<a class="associatedtype" href="trait.DetectChangesMut.html#associatedtype.Inner" title="type bevy_ecs::change_detection::DetectChangesMut::Inner">Inner</a>: <a class="trait" href="https://doc.rust-lang.org/1.84.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a> + <a class="trait" href="https://doc.rust-lang.org/1.84.0/core/cmp/trait.PartialEq.html" title="trait core::cmp::PartialEq">PartialEq</a></span> { ... }
}</code></pre><details class="toggle top-doc" open><summary class="hideme"><span>Expand description</span></summary><div class="docblock"><p>Types that implement reliable change detection.</p>
<h3 id="example"><a class="doc-anchor" href="#example">§</a>Example</h3>
<p>Using types that implement <a href="trait.DetectChangesMut.html" title="trait bevy_ecs::change_detection::DetectChangesMut"><code>DetectChangesMut</code></a>, such as <a href="struct.ResMut.html" title="struct bevy_ecs::change_detection::ResMut"><code>ResMut</code></a>, provide
a way to query if a value has been mutated in another system.
Normally change detection is triggered by either <a href="https://doc.rust-lang.org/1.84.0/core/ops/deref/trait.DerefMut.html" title="trait core::ops::deref::DerefMut"><code>DerefMut</code></a> or <a href="https://doc.rust-lang.org/1.84.0/core/convert/trait.AsMut.html" title="trait core::convert::AsMut"><code>AsMut</code></a>, however
it can be manually triggered via <a href="trait.DetectChangesMut.html#tymethod.set_changed" title="method bevy_ecs::change_detection::DetectChangesMut::set_changed"><code>set_changed</code></a>.</p>
<p>To ensure that changes are only triggered when the value actually differs,
check if the value would change before assignment, such as by checking that <code>new != old</code>.
You must be <em>sure</em> that you are not mutably dereferencing in this process.</p>
<p><a href="trait.DetectChangesMut.html#method.set_if_neq" title="method bevy_ecs::change_detection::DetectChangesMut::set_if_neq"><code>set_if_neq</code></a> is a helper
method for this common functionality.</p>
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="kw">use </span>bevy_ecs::prelude::<span class="kw-2">*</span>;
<span class="attr">#[derive(Resource)]
</span><span class="kw">struct </span>MyResource(u32);
<span class="kw">fn </span>my_system(<span class="kw-2">mut </span>resource: ResMut&lt;MyResource&gt;) {
<span class="kw">if </span>resource.is_changed() {
<span class="macro">println!</span>(<span class="string">"My resource was mutated!"</span>);
}
resource.<span class="number">0 </span>= <span class="number">42</span>; <span class="comment">// triggers change detection via [`DerefMut`]
</span>}</code></pre></div>
</div></details><h2 id="required-associated-types" class="section-header">Required Associated Types<a href="#required-associated-types" class="anchor">§</a></h2><div class="methods"><details class="toggle" open><summary><section id="associatedtype.Inner" class="method"><a class="src rightside" href="../../src/bevy_ecs/change_detection.rs.html#112">Source</a><h4 class="code-header">type <a href="#associatedtype.Inner" class="associatedtype">Inner</a>: ?<a class="trait" href="https://doc.rust-lang.org/1.84.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a></h4></section></summary><div class="docblock"><p>The type contained within this smart pointer</p>
<p>For example, for <code>ResMut&lt;T&gt;</code> this would be <code>T</code>.</p>
</div></details></div><h2 id="required-methods" class="section-header">Required Methods<a href="#required-methods" class="anchor">§</a></h2><div class="methods"><details class="toggle method-toggle" open><summary><section id="tymethod.set_changed" class="method"><a class="src rightside" href="../../src/bevy_ecs/change_detection.rs.html#120">Source</a><h4 class="code-header">fn <a href="#tymethod.set_changed" class="fn">set_changed</a>(&amp;mut self)</h4></section></summary><div class="docblock"><p>Flags this value as having been changed.</p>
<p>Mutably accessing this smart pointer will automatically flag this value as having been changed.
However, mutation through interior mutability requires manual reporting.</p>
<p><strong>Note</strong>: This operation cannot be undone.</p>
</div></details><details class="toggle method-toggle" open><summary><section id="tymethod.set_last_changed" class="method"><a class="src rightside" href="../../src/bevy_ecs/change_detection.rs.html#128">Source</a><h4 class="code-header">fn <a href="#tymethod.set_last_changed" class="fn">set_last_changed</a>(&amp;mut self, last_changed: <a class="struct" href="../component/struct.Tick.html" title="struct bevy_ecs::component::Tick">Tick</a>)</h4></section></summary><div class="docblock"><p>Manually sets the change tick recording the time when this data was last mutated.</p>
<h5 id="warning"><a class="doc-anchor" href="#warning">§</a>Warning</h5>
<p>This is a complex and error-prone operation, primarily intended for use with rollback networking strategies.
If you merely want to flag this data as changed, use <a href="trait.DetectChangesMut.html#tymethod.set_changed" title="method bevy_ecs::change_detection::DetectChangesMut::set_changed"><code>set_changed</code></a> instead.
If you want to avoid triggering change detection, use <a href="trait.DetectChangesMut.html#tymethod.bypass_change_detection" title="method bevy_ecs::change_detection::DetectChangesMut::bypass_change_detection"><code>bypass_change_detection</code></a> instead.</p>
</div></details><details class="toggle method-toggle" open><summary><section id="tymethod.bypass_change_detection" class="method"><a class="src rightside" href="../../src/bevy_ecs/change_detection.rs.html#136">Source</a><h4 class="code-header">fn <a href="#tymethod.bypass_change_detection" class="fn">bypass_change_detection</a>(&amp;mut self) -&gt; &amp;mut Self::<a class="associatedtype" href="trait.DetectChangesMut.html#associatedtype.Inner" title="type bevy_ecs::change_detection::DetectChangesMut::Inner">Inner</a></h4></section></summary><div class="docblock"><p>Manually bypasses change detection, allowing you to mutate the underlying value without updating the change tick.</p>
<h5 id="warning-1"><a class="doc-anchor" href="#warning-1">§</a>Warning</h5>
<p>This is a risky operation, that can have unexpected consequences on any system relying on this code.
However, it can be an essential escape hatch when, for example,
you are trying to synchronize representations using change detection and need to avoid infinite recursion.</p>
</div></details></div><h2 id="provided-methods" class="section-header">Provided Methods<a href="#provided-methods" class="anchor">§</a></h2><div class="methods"><details class="toggle method-toggle" open><summary><section id="method.set_if_neq" class="method"><a class="src rightside" href="../../src/bevy_ecs/change_detection.rs.html#181-193">Source</a><h4 class="code-header">fn <a href="#method.set_if_neq" class="fn">set_if_neq</a>(&amp;mut self, value: Self::<a class="associatedtype" href="trait.DetectChangesMut.html#associatedtype.Inner" title="type bevy_ecs::change_detection::DetectChangesMut::Inner">Inner</a>) -&gt; <a class="primitive" href="https://doc.rust-lang.org/1.84.0/std/primitive.bool.html">bool</a><div class="where">where
Self::<a class="associatedtype" href="trait.DetectChangesMut.html#associatedtype.Inner" title="type bevy_ecs::change_detection::DetectChangesMut::Inner">Inner</a>: <a class="trait" href="https://doc.rust-lang.org/1.84.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a> + <a class="trait" href="https://doc.rust-lang.org/1.84.0/core/cmp/trait.PartialEq.html" title="trait core::cmp::PartialEq">PartialEq</a>,</div></h4></section></summary><div class="docblock"><p>Overwrites this smart pointer with the given value, if and only if <code>*self != value</code>.
Returns <code>true</code> if the value was overwritten, and returns <code>false</code> if it was not.</p>
<p>This is useful to ensure change detection is only triggered when the underlying value
changes, instead of every time it is mutably accessed.</p>
<p>If youre dealing with non-trivial structs which have multiple fields of non-trivial size,
then consider applying a <code>map_unchanged</code> beforehand to allow changing only the relevant
field and prevent unnecessary copying and cloning.
See the docs of <a href="struct.Mut.html#method.map_unchanged" title="method bevy_ecs::change_detection::Mut::map_unchanged"><code>Mut::map_unchanged</code></a>, <a href="struct.MutUntyped.html#method.map_unchanged" title="method bevy_ecs::change_detection::MutUntyped::map_unchanged"><code>MutUntyped::map_unchanged</code></a>,
<a href="struct.ResMut.html#method.map_unchanged" title="method bevy_ecs::change_detection::ResMut::map_unchanged"><code>ResMut::map_unchanged</code></a> or <a href="struct.NonSendMut.html#method.map_unchanged" title="method bevy_ecs::change_detection::NonSendMut::map_unchanged"><code>NonSendMut::map_unchanged</code></a> for an example</p>
<p>If you need the previous value, use <a href="trait.DetectChangesMut.html#method.replace_if_neq" title="method bevy_ecs::change_detection::DetectChangesMut::replace_if_neq"><code>replace_if_neq</code></a>.</p>
<h5 id="examples"><a class="doc-anchor" href="#examples">§</a>Examples</h5>
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="attr">#[derive(Resource, PartialEq, Eq)]
</span><span class="kw">pub struct </span>Score(u32);
<span class="kw">fn </span>reset_score(<span class="kw-2">mut </span>score: ResMut&lt;Score&gt;) {
<span class="comment">// Set the score to zero, unless it is already zero.
</span>score.set_if_neq(Score(<span class="number">0</span>));
}</code></pre></div>
</div></details><details class="toggle method-toggle" open><summary><section id="method.replace_if_neq" class="method"><a class="src rightside" href="../../src/bevy_ecs/change_detection.rs.html#258-270">Source</a><h4 class="code-header">fn <a href="#method.replace_if_neq" class="fn">replace_if_neq</a>(&amp;mut self, value: Self::<a class="associatedtype" href="trait.DetectChangesMut.html#associatedtype.Inner" title="type bevy_ecs::change_detection::DetectChangesMut::Inner">Inner</a>) -&gt; <a class="enum" href="https://doc.rust-lang.org/1.84.0/core/option/enum.Option.html" title="enum core::option::Option">Option</a>&lt;Self::<a class="associatedtype" href="trait.DetectChangesMut.html#associatedtype.Inner" title="type bevy_ecs::change_detection::DetectChangesMut::Inner">Inner</a>&gt;<div class="where">where
Self::<a class="associatedtype" href="trait.DetectChangesMut.html#associatedtype.Inner" title="type bevy_ecs::change_detection::DetectChangesMut::Inner">Inner</a>: <a class="trait" href="https://doc.rust-lang.org/1.84.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a> + <a class="trait" href="https://doc.rust-lang.org/1.84.0/core/cmp/trait.PartialEq.html" title="trait core::cmp::PartialEq">PartialEq</a>,</div></h4></section></summary><div class="docblock"><p>Overwrites this smart pointer with the given value, if and only if <code>*self != value</code>,
returning the previous value if this occurs.</p>
<p>This is useful to ensure change detection is only triggered when the underlying value
changes, instead of every time it is mutably accessed.</p>
<p>If youre dealing with non-trivial structs which have multiple fields of non-trivial size,
then consider applying a <a href="struct.Mut.html#method.map_unchanged" title="method bevy_ecs::change_detection::Mut::map_unchanged"><code>map_unchanged</code></a> beforehand to allow
changing only the relevant field and prevent unnecessary copying and cloning.
See the docs of <a href="struct.Mut.html#method.map_unchanged" title="method bevy_ecs::change_detection::Mut::map_unchanged"><code>Mut::map_unchanged</code></a>, <a href="struct.MutUntyped.html#method.map_unchanged" title="method bevy_ecs::change_detection::MutUntyped::map_unchanged"><code>MutUntyped::map_unchanged</code></a>,
<a href="struct.ResMut.html#method.map_unchanged" title="method bevy_ecs::change_detection::ResMut::map_unchanged"><code>ResMut::map_unchanged</code></a> or <a href="struct.NonSendMut.html#method.map_unchanged" title="method bevy_ecs::change_detection::NonSendMut::map_unchanged"><code>NonSendMut::map_unchanged</code></a> for an example</p>
<p>If you dont need the previous value, use <a href="trait.DetectChangesMut.html#method.set_if_neq" title="method bevy_ecs::change_detection::DetectChangesMut::set_if_neq"><code>set_if_neq</code></a>.</p>
<h5 id="examples-1"><a class="doc-anchor" href="#examples-1">§</a>Examples</h5>
<div class="example-wrap"><pre class="rust rust-example-rendered"><code><span class="attr">#[derive(Resource, PartialEq, Eq)]
</span><span class="kw">pub struct </span>Score(u32);
<span class="attr">#[derive(Event, PartialEq, Eq)]
</span><span class="kw">pub struct </span>ScoreChanged {
current: u32,
previous: u32,
}
<span class="kw">fn </span>reset_score(<span class="kw-2">mut </span>score: ResMut&lt;Score&gt;, <span class="kw-2">mut </span>score_changed: EventWriter&lt;ScoreChanged&gt;) {
<span class="comment">// Set the score to zero, unless it is already zero.
</span><span class="kw">let </span>new_score = <span class="number">0</span>;
<span class="kw">if let </span><span class="prelude-val">Some</span>(Score(previous_score)) = score.replace_if_neq(Score(new_score)) {
<span class="comment">// If `score` change, emit a `ScoreChanged` event.
</span>score_changed.send(ScoreChanged {
current: new_score,
previous: previous_score,
});
}
}</code></pre></div>
</div></details></div><h2 id="implementors" class="section-header">Implementors<a href="#implementors" class="anchor">§</a></h2><div id="implementors-list"><details class="toggle implementors-toggle"><summary><section id="impl-DetectChangesMut-for-MutUntyped%3C'w%3E" class="impl"><a class="src rightside" href="../../src/bevy_ecs/change_detection.rs.html#1094-1122">Source</a><a href="#impl-DetectChangesMut-for-MutUntyped%3C'w%3E" class="anchor">§</a><h3 class="code-header">impl&lt;'w&gt; <a class="trait" href="trait.DetectChangesMut.html" title="trait bevy_ecs::change_detection::DetectChangesMut">DetectChangesMut</a> for <a class="struct" href="struct.MutUntyped.html" title="struct bevy_ecs::change_detection::MutUntyped">MutUntyped</a>&lt;'w&gt;</h3></section></summary><div class="impl-items"><section id="associatedtype.Inner-1" class="associatedtype trait-impl"><a class="src rightside" href="../../src/bevy_ecs/change_detection.rs.html#1095">Source</a><a href="#associatedtype.Inner-1" class="anchor">§</a><h4 class="code-header">type <a href="#associatedtype.Inner" class="associatedtype">Inner</a> = <a class="struct" href="../../bevy_ptr/struct.PtrMut.html" title="struct bevy_ptr::PtrMut">PtrMut</a>&lt;'w&gt;</h4></section></div></details><details class="toggle implementors-toggle"><summary><section id="impl-DetectChangesMut-for-ResMut%3C'w,+T%3E" class="impl"><a class="src rightside" href="../../src/bevy_ecs/change_detection.rs.html#661">Source</a><a href="#impl-DetectChangesMut-for-ResMut%3C'w,+T%3E" class="anchor">§</a><h3 class="code-header">impl&lt;'w, T: ?<a class="trait" href="https://doc.rust-lang.org/1.84.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a> + <a class="trait" href="../system/trait.Resource.html" title="trait bevy_ecs::system::Resource">Resource</a>&gt; <a class="trait" href="trait.DetectChangesMut.html" title="trait bevy_ecs::change_detection::DetectChangesMut">DetectChangesMut</a> for <a class="struct" href="struct.ResMut.html" title="struct bevy_ecs::change_detection::ResMut">ResMut</a>&lt;'w, T&gt;</h3></section></summary><div class="impl-items"><section id="associatedtype.Inner-2" class="associatedtype trait-impl"><a class="src rightside" href="../../src/bevy_ecs/change_detection.rs.html#661">Source</a><a href="#associatedtype.Inner-2" class="anchor">§</a><h4 class="code-header">type <a href="#associatedtype.Inner" class="associatedtype">Inner</a> = T</h4></section></div></details><details class="toggle implementors-toggle"><summary><section id="impl-DetectChangesMut-for-Mut%3C'w,+T%3E" class="impl"><a class="src rightside" href="../../src/bevy_ecs/change_detection.rs.html#953">Source</a><a href="#impl-DetectChangesMut-for-Mut%3C'w,+T%3E" class="anchor">§</a><h3 class="code-header">impl&lt;'w, T: ?<a class="trait" href="https://doc.rust-lang.org/1.84.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>&gt; <a class="trait" href="trait.DetectChangesMut.html" title="trait bevy_ecs::change_detection::DetectChangesMut">DetectChangesMut</a> for <a class="struct" href="struct.Mut.html" title="struct bevy_ecs::change_detection::Mut">Mut</a>&lt;'w, T&gt;</h3></section></summary><div class="impl-items"><section id="associatedtype.Inner-3" class="associatedtype trait-impl"><a class="src rightside" href="../../src/bevy_ecs/change_detection.rs.html#953">Source</a><a href="#associatedtype.Inner-3" class="anchor">§</a><h4 class="code-header">type <a href="#associatedtype.Inner" class="associatedtype">Inner</a> = T</h4></section></div></details><details class="toggle implementors-toggle"><summary><section id="impl-DetectChangesMut-for-NonSendMut%3C'w,+T%3E" class="impl"><a class="src rightside" href="../../src/bevy_ecs/change_detection.rs.html#697">Source</a><a href="#impl-DetectChangesMut-for-NonSendMut%3C'w,+T%3E" class="anchor">§</a><h3 class="code-header">impl&lt;'w, T: ?<a class="trait" href="https://doc.rust-lang.org/1.84.0/core/marker/trait.Sized.html" title="trait core::marker::Sized">Sized</a>&gt; <a class="trait" href="trait.DetectChangesMut.html" title="trait bevy_ecs::change_detection::DetectChangesMut">DetectChangesMut</a> for <a class="struct" href="struct.NonSendMut.html" title="struct bevy_ecs::change_detection::NonSendMut">NonSendMut</a>&lt;'w, T&gt;</h3></section></summary><div class="impl-items"><section id="associatedtype.Inner-4" class="associatedtype trait-impl"><a class="src rightside" href="../../src/bevy_ecs/change_detection.rs.html#697">Source</a><a href="#associatedtype.Inner-4" class="anchor">§</a><h4 class="code-header">type <a href="#associatedtype.Inner" class="associatedtype">Inner</a> = T</h4></section></div></details></div><script src="../../trait.impl/bevy_ecs/change_detection/trait.DetectChangesMut.js" async></script></section></div></main></body></html>