Skip to content

Commit 830874c

Browse files
joseph-giogeieredgar
authored andcommitted
simplify interning APIs
1 parent 0b13d05 commit 830874c

File tree

11 files changed

+81
-95
lines changed

11 files changed

+81
-95
lines changed

crates/bevy_app/src/app.rs

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -158,7 +158,7 @@ impl SubApp {
158158

159159
/// Runs the [`SubApp`]'s default schedule.
160160
pub fn run(&mut self) {
161-
self.app.world.run_schedule(&*self.app.main_schedule_label);
161+
self.app.world.run_schedule(self.app.main_schedule_label);
162162
self.app.world.clear_trackers();
163163
}
164164

@@ -221,7 +221,7 @@ impl App {
221221
sub_apps: HashMap::default(),
222222
plugin_registry: Vec::default(),
223223
plugin_name_added: Default::default(),
224-
main_schedule_label: Main.into(),
224+
main_schedule_label: Main.intern(),
225225
building_plugin_depth: 0,
226226
}
227227
}
@@ -243,7 +243,7 @@ impl App {
243243
{
244244
#[cfg(feature = "trace")]
245245
let _bevy_main_update_span = info_span!("main app").entered();
246-
self.world.run_schedule(&*self.main_schedule_label);
246+
self.world.run_schedule(self.main_schedule_label);
247247
}
248248
for (_label, sub_app) in self.sub_apps.iter_mut() {
249249
#[cfg(feature = "trace")]
@@ -381,7 +381,7 @@ impl App {
381381
schedule: impl ScheduleLabel,
382382
systems: impl IntoSystemConfigs<M>,
383383
) -> &mut Self {
384-
let schedule = InternedScheduleLabel::from(&schedule as &dyn ScheduleLabel);
384+
let schedule = schedule.intern();
385385
let mut schedules = self.world.resource_mut::<Schedules>();
386386

387387
if let Some(schedule) = schedules.get_mut(schedule) {
@@ -401,7 +401,7 @@ impl App {
401401
schedule: impl ScheduleLabel,
402402
set: impl IntoSystemSetConfig,
403403
) -> &mut Self {
404-
let schedule = InternedScheduleLabel::from(&schedule as &dyn ScheduleLabel);
404+
let schedule = schedule.intern();
405405
let mut schedules = self.world.resource_mut::<Schedules>();
406406
if let Some(schedule) = schedules.get_mut(schedule) {
407407
schedule.configure_set(set);
@@ -419,7 +419,7 @@ impl App {
419419
schedule: impl ScheduleLabel,
420420
sets: impl IntoSystemSetConfigs,
421421
) -> &mut Self {
422-
let schedule = InternedScheduleLabel::from(&schedule as &dyn ScheduleLabel);
422+
let schedule = schedule.intern();
423423
let mut schedules = self.world.resource_mut::<Schedules>();
424424
if let Some(schedule) = schedules.get_mut(schedule) {
425425
schedule.configure_sets(sets);
@@ -759,7 +759,7 @@ impl App {
759759
/// an [`Err`] containing the given label.
760760
pub fn get_sub_app_mut(&mut self, label: impl AppLabel) -> Result<&mut App, impl AppLabel> {
761761
self.sub_apps
762-
.get_mut(&InternedAppLabel::from(&label as &dyn AppLabel))
762+
.get_mut(&label.intern())
763763
.map(|sub_app| &mut sub_app.app)
764764
.ok_or(label)
765765
}
@@ -779,20 +779,20 @@ impl App {
779779
/// Inserts an existing sub app into the app
780780
pub fn insert_sub_app(&mut self, label: impl AppLabel, sub_app: SubApp) {
781781
self.sub_apps
782-
.insert((&label as &dyn AppLabel).into(), sub_app);
782+
.insert(label.intern(), sub_app);
783783
}
784784

785785
/// Removes a sub app from the app. Returns [`None`] if the label doesn't exist.
786786
pub fn remove_sub_app(&mut self, label: impl AppLabel) -> Option<SubApp> {
787787
self.sub_apps
788-
.remove(&InternedAppLabel::from(&label as &dyn AppLabel))
788+
.remove(&label.intern())
789789
}
790790

791791
/// Retrieves a `SubApp` inside this [`App`] with the given label, if it exists. Otherwise returns
792792
/// an [`Err`] containing the given label.
793793
pub fn get_sub_app(&self, label: impl AppLabel) -> Result<&App, impl AppLabel> {
794794
self.sub_apps
795-
.get(&InternedAppLabel::from(&label as &dyn AppLabel))
795+
.get(&label.intern())
796796
.map(|sub_app| &sub_app.app)
797797
.ok_or(label)
798798
}
@@ -804,7 +804,7 @@ impl App {
804804
/// To avoid this behavior, use the `init_schedule` method instead.
805805
pub fn add_schedule(&mut self, label: impl ScheduleLabel, schedule: Schedule) -> &mut Self {
806806
let mut schedules = self.world.resource_mut::<Schedules>();
807-
schedules.insert(&label as &dyn ScheduleLabel, schedule);
807+
schedules.insert(label, schedule);
808808

809809
self
810810
}
@@ -813,7 +813,7 @@ impl App {
813813
///
814814
/// See [`App::add_schedule`] to pass in a pre-constructed schedule.
815815
pub fn init_schedule(&mut self, label: impl ScheduleLabel) -> &mut Self {
816-
let label = InternedScheduleLabel::from(&label as &dyn ScheduleLabel);
816+
let label = label.intern();
817817
let mut schedules = self.world.resource_mut::<Schedules>();
818818
if !schedules.contains(label) {
819819
schedules.insert(label, Schedule::new());
@@ -824,15 +824,15 @@ impl App {
824824
/// Gets read-only access to the [`Schedule`] with the provided `label` if it exists.
825825
pub fn get_schedule(&self, label: impl ScheduleLabel) -> Option<&Schedule> {
826826
let schedules = self.world.get_resource::<Schedules>()?;
827-
schedules.get(&label as &dyn ScheduleLabel)
827+
schedules.get(label)
828828
}
829829

830830
/// Gets read-write access to a [`Schedule`] with the provided `label` if it exists.
831831
pub fn get_schedule_mut(&mut self, label: impl ScheduleLabel) -> Option<&mut Schedule> {
832832
let schedules = self.world.get_resource_mut::<Schedules>()?;
833833
// We need to call .into_inner here to satisfy the borrow checker:
834834
// it can reason about reborrows using ordinary references but not the `Mut` smart pointer.
835-
schedules.into_inner().get_mut(&label as &dyn ScheduleLabel)
835+
schedules.into_inner().get_mut(label)
836836
}
837837

838838
/// Applies the function to the [`Schedule`] associated with `label`.
@@ -843,7 +843,7 @@ impl App {
843843
label: impl ScheduleLabel,
844844
f: impl FnOnce(&mut Schedule),
845845
) -> &mut Self {
846-
let label = InternedScheduleLabel::from(&label as &dyn ScheduleLabel);
846+
let label = label.intern();
847847
let mut schedules = self.world.resource_mut::<Schedules>();
848848

849849
if schedules.get(label).is_none() {

crates/bevy_app/src/main_schedule.rs

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
use crate::{App, Plugin};
22
use bevy_ecs::{
3-
schedule::{ExecutorKind, Schedule, ScheduleLabel},
3+
schedule::{ExecutorKind, Schedule, ScheduleLabel, InternedScheduleLabel},
44
system::{Local, Resource},
55
world::{Mut, World},
66
};
@@ -100,20 +100,20 @@ pub struct Last;
100100
#[derive(Resource, Debug)]
101101
pub struct MainScheduleOrder {
102102
/// The labels to run for the [`Main`] schedule (in the order they will be run).
103-
pub labels: Vec<Box<dyn ScheduleLabel>>,
103+
pub labels: Vec<InternedScheduleLabel>,
104104
}
105105

106106
impl Default for MainScheduleOrder {
107107
fn default() -> Self {
108108
Self {
109109
labels: vec![
110-
Box::new(First),
111-
Box::new(PreUpdate),
112-
Box::new(StateTransition),
113-
Box::new(RunFixedUpdateLoop),
114-
Box::new(Update),
115-
Box::new(PostUpdate),
116-
Box::new(Last),
110+
First.intern(),
111+
PreUpdate.intern(),
112+
StateTransition.intern(),
113+
RunFixedUpdateLoop.intern(),
114+
Update.intern(),
115+
PostUpdate.intern(),
116+
Last.intern(),
117117
],
118118
}
119119
}
@@ -127,7 +127,7 @@ impl MainScheduleOrder {
127127
.iter()
128128
.position(|current| (**current).eq(&after))
129129
.unwrap_or_else(|| panic!("Expected {after:?} to exist"));
130-
self.labels.insert(index + 1, Box::new(schedule));
130+
self.labels.insert(index + 1, schedule.intern());
131131
}
132132
}
133133

@@ -142,8 +142,8 @@ impl Main {
142142
}
143143

144144
world.resource_scope(|world, order: Mut<MainScheduleOrder>| {
145-
for label in &order.labels {
146-
let _ = world.try_run_schedule(&**label);
145+
for &label in &order.labels {
146+
let _ = world.try_run_schedule(label);
147147
}
148148
});
149149
}

crates/bevy_ecs/src/schedule/config.rs

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -307,20 +307,20 @@ impl IntoSystemConfigs<()> for SystemConfigs {
307307
"adding arbitrary systems to a system type set is not allowed"
308308
);
309309

310-
self.in_set_inner((&set as &dyn SystemSet).into());
310+
self.in_set_inner(set.intern());
311311

312312
self
313313
}
314314

315315
fn before<M>(mut self, set: impl IntoSystemSet<M>) -> Self {
316316
let set = set.into_system_set();
317-
self.before_inner((&set as &dyn SystemSet).into());
317+
self.before_inner(set.intern());
318318
self
319319
}
320320

321321
fn after<M>(mut self, set: impl IntoSystemSet<M>) -> Self {
322322
let set = set.into_system_set();
323-
self.after_inner((&set as &dyn SystemSet).into());
323+
self.after_inner(set.intern());
324324
self
325325
}
326326

@@ -331,7 +331,7 @@ impl IntoSystemConfigs<()> for SystemConfigs {
331331

332332
fn ambiguous_with<M>(mut self, set: impl IntoSystemSet<M>) -> Self {
333333
let set = set.into_system_set();
334-
self.ambiguous_with_inner((&set as &dyn SystemSet).into());
334+
self.ambiguous_with_inner(set.intern());
335335
self
336336
}
337337

@@ -445,7 +445,7 @@ pub trait IntoSystemSetConfig: Sized {
445445

446446
impl<S: SystemSet> IntoSystemSetConfig for S {
447447
fn into_config(self) -> SystemSetConfig {
448-
SystemSetConfig::new((&self as &dyn SystemSet).into())
448+
SystemSetConfig::new(self.intern())
449449
}
450450
}
451451

@@ -460,22 +460,22 @@ impl IntoSystemSetConfig for SystemSetConfig {
460460
set.system_type().is_none(),
461461
"adding arbitrary systems to a system type set is not allowed"
462462
);
463-
self.graph_info.sets.push((&set as &dyn SystemSet).into());
463+
self.graph_info.sets.push(set.intern());
464464
self
465465
}
466466

467467
fn before<M>(mut self, set: impl IntoSystemSet<M>) -> Self {
468468
self.graph_info.dependencies.push(Dependency::new(
469469
DependencyKind::Before,
470-
(&set.into_system_set() as &dyn SystemSet).into(),
470+
set.into_system_set().intern(),
471471
));
472472
self
473473
}
474474

475475
fn after<M>(mut self, set: impl IntoSystemSet<M>) -> Self {
476476
self.graph_info.dependencies.push(Dependency::new(
477477
DependencyKind::After,
478-
(&set.into_system_set() as &dyn SystemSet).into(),
478+
set.into_system_set().intern(),
479479
));
480480
self
481481
}
@@ -488,7 +488,7 @@ impl IntoSystemSetConfig for SystemSetConfig {
488488
fn ambiguous_with<M>(mut self, set: impl IntoSystemSet<M>) -> Self {
489489
ambiguous_with(
490490
&mut self.graph_info,
491-
(&set.into_system_set() as &dyn SystemSet).into(),
491+
set.into_system_set().intern(),
492492
);
493493
self
494494
}
@@ -563,14 +563,14 @@ impl IntoSystemSetConfigs for SystemSetConfigs {
563563
"adding arbitrary systems to a system type set is not allowed"
564564
);
565565
for config in &mut self.sets {
566-
config.graph_info.sets.push((&set as &dyn SystemSet).into());
566+
config.graph_info.sets.push(set.intern());
567567
}
568568

569569
self
570570
}
571571

572572
fn before<M>(mut self, set: impl IntoSystemSet<M>) -> Self {
573-
let set = (&set.into_system_set() as &dyn SystemSet).into();
573+
let set = set.into_system_set().intern();
574574
for config in &mut self.sets {
575575
config
576576
.graph_info
@@ -582,7 +582,7 @@ impl IntoSystemSetConfigs for SystemSetConfigs {
582582
}
583583

584584
fn after<M>(mut self, set: impl IntoSystemSet<M>) -> Self {
585-
let set = (&set.into_system_set() as &dyn SystemSet).into();
585+
let set = set.into_system_set().intern();
586586
for config in &mut self.sets {
587587
config
588588
.graph_info
@@ -594,7 +594,7 @@ impl IntoSystemSetConfigs for SystemSetConfigs {
594594
}
595595

596596
fn ambiguous_with<M>(mut self, set: impl IntoSystemSet<M>) -> Self {
597-
let set = (&set.into_system_set() as &dyn SystemSet).into();
597+
let set = set.into_system_set().intern();
598598
for config in &mut self.sets {
599599
ambiguous_with(&mut config.graph_info, set);
600600
}

crates/bevy_ecs/src/schedule/schedule.rs

Lines changed: 16 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -43,38 +43,38 @@ impl Schedules {
4343
/// and the old schedule is returned. Otherwise, `None` is returned.
4444
pub fn insert(
4545
&mut self,
46-
label: impl Into<InternedScheduleLabel>,
46+
label: impl ScheduleLabel,
4747
schedule: Schedule,
4848
) -> Option<Schedule> {
49-
self.inner.insert(label.into(), schedule)
49+
self.inner.insert(label.intern(), schedule)
5050
}
5151

5252
/// Removes the schedule corresponding to the `label` from the map, returning it if it existed.
53-
pub fn remove(&mut self, label: impl Into<InternedScheduleLabel>) -> Option<Schedule> {
54-
self.inner.remove(&label.into())
53+
pub fn remove(&mut self, label: impl ScheduleLabel) -> Option<Schedule> {
54+
self.inner.remove(&label.intern ())
5555
}
5656

5757
/// Removes the (schedule, label) pair corresponding to the `label` from the map, returning it if it existed.
5858
pub fn remove_entry(
5959
&mut self,
60-
label: impl Into<InternedScheduleLabel>,
60+
label: impl ScheduleLabel,
6161
) -> Option<(InternedScheduleLabel, Schedule)> {
62-
self.inner.remove_entry(&label.into())
62+
self.inner.remove_entry(&label.intern())
6363
}
6464

6565
/// Does a schedule with the provided label already exist?
66-
pub fn contains(&self, label: impl Into<InternedScheduleLabel>) -> bool {
67-
self.inner.contains_key(&label.into())
66+
pub fn contains(&self, label: impl ScheduleLabel) -> bool {
67+
self.inner.contains_key(&label.intern())
6868
}
6969

7070
/// Returns a reference to the schedule associated with `label`, if it exists.
71-
pub fn get(&self, label: impl Into<InternedScheduleLabel>) -> Option<&Schedule> {
72-
self.inner.get(&label.into())
71+
pub fn get(&self, label: impl ScheduleLabel) -> Option<&Schedule> {
72+
self.inner.get(&label.intern())
7373
}
7474

7575
/// Returns a mutable reference to the schedule associated with `label`, if it exists.
76-
pub fn get_mut(&mut self, label: impl Into<InternedScheduleLabel>) -> Option<&mut Schedule> {
77-
self.inner.get_mut(&label.into())
76+
pub fn get_mut(&mut self, label: impl ScheduleLabel) -> Option<&mut Schedule> {
77+
self.inner.get_mut(&label.intern())
7878
}
7979

8080
/// Returns an iterator over all schedules. Iteration order is undefined.
@@ -537,7 +537,7 @@ impl ScheduleGraph {
537537
if more_than_one_entry {
538538
let set = self.create_anonymous_set();
539539
for config in &mut configs {
540-
config.in_set_inner((&set as &dyn SystemSet).into());
540+
config.in_set_inner(set.intern());
541541
}
542542
let mut set_config = set.into_config();
543543
set_config.conditions.extend(collective_conditions);
@@ -721,8 +721,7 @@ impl ScheduleGraph {
721721
id
722722
}
723723

724-
fn check_set(&mut self, id: &NodeId, set: &dyn SystemSet) -> Result<(), ScheduleBuildError> {
725-
let set = set.into();
724+
fn check_set(&mut self, id: &NodeId, set: InternedSystemSet) -> Result<(), ScheduleBuildError> {
726725
match self.system_set_ids.get(&set) {
727726
Some(set_id) => {
728727
if id == set_id {
@@ -748,8 +747,8 @@ impl ScheduleGraph {
748747
id: &NodeId,
749748
graph_info: &GraphInfo,
750749
) -> Result<(), ScheduleBuildError> {
751-
for set in &graph_info.sets {
752-
self.check_set(id, &**set)?;
750+
for &set in &graph_info.sets {
751+
self.check_set(id, set)?;
753752
}
754753

755754
Ok(())

0 commit comments

Comments
 (0)