mirror of
https://github.com/bevyengine/bevy
synced 2025-02-16 14:08:32 +00:00
Replace UnsafeCell<World> usage with UnsafeWorldCell in CombinatorSystem (#14706)
# Objective Replace usage of `UnsafeCell<World>` with our standard `UnsafeWorldCell` that seemed to have been missed. ## Solution Do just that.
This commit is contained in:
parent
91fa4bb649
commit
7f658cabf7
1 changed files with 5 additions and 9 deletions
|
@ -1,6 +1,4 @@
|
|||
use std::{borrow::Cow, cell::UnsafeCell, marker::PhantomData};
|
||||
|
||||
use bevy_ptr::UnsafeCellDeref;
|
||||
use std::{borrow::Cow, marker::PhantomData};
|
||||
|
||||
use crate::{
|
||||
archetype::ArchetypeComponentId,
|
||||
|
@ -182,18 +180,16 @@ where
|
|||
)
|
||||
}
|
||||
|
||||
fn run<'w>(&mut self, input: Self::In, world: &'w mut World) -> Self::Out {
|
||||
// SAFETY: Converting `&mut T` -> `&UnsafeCell<T>`
|
||||
// is explicitly allowed in the docs for `UnsafeCell`.
|
||||
let world: &'w UnsafeCell<World> = unsafe { std::mem::transmute(world) };
|
||||
fn run(&mut self, input: Self::In, world: &mut World) -> Self::Out {
|
||||
let world = world.as_unsafe_world_cell();
|
||||
Func::combine(
|
||||
input,
|
||||
// SAFETY: Since these closures are `!Send + !Sync + !'static`, they can never
|
||||
// be called in parallel. Since mutable access to `world` only exists within
|
||||
// the scope of either closure, we can be sure they will never alias one another.
|
||||
|input| self.a.run(input, unsafe { world.deref_mut() }),
|
||||
|input| self.a.run(input, unsafe { world.world_mut() }),
|
||||
#[allow(clippy::undocumented_unsafe_blocks)]
|
||||
|input| self.b.run(input, unsafe { world.deref_mut() }),
|
||||
|input| self.b.run(input, unsafe { world.world_mut() }),
|
||||
)
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue