Remove SystemSetNode (#20100)

# Objective

`SystemSetNode` doesn't really add much value beyond a couple helper
functions for getting the name as a string and checking if its a
`SystemTypeSet`. We can replace it entirely and use `InternedSystemSet`
directly by inlining these helper functions' usages without sacrificing
readability.

## Solution

Remove it and replace it with direct `InternedSystemSet` usage.

## Testing

Reusing current tests.
This commit is contained in:
Christian Hughes 2025-07-13 12:25:46 -05:00 committed by GitHub
parent ace0114bdd
commit 7ae8b53923
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -659,29 +659,6 @@ impl Dag {
} }
} }
/// A [`SystemSet`] with metadata, stored in a [`ScheduleGraph`].
struct SystemSetNode {
inner: InternedSystemSet,
}
impl SystemSetNode {
pub fn new(set: InternedSystemSet) -> Self {
Self { inner: set }
}
pub fn name(&self) -> String {
format!("{:?}", &self.inner)
}
pub fn is_system_type(&self) -> bool {
self.inner.system_type().is_some()
}
pub fn is_anonymous(&self) -> bool {
self.inner.is_anonymous()
}
}
/// A [`SystemWithAccess`] stored in a [`ScheduleGraph`]. /// A [`SystemWithAccess`] stored in a [`ScheduleGraph`].
pub struct SystemNode { pub struct SystemNode {
inner: Option<SystemWithAccess>, inner: Option<SystemWithAccess>,
@ -785,7 +762,7 @@ enum UninitializedId {
#[derive(Default)] #[derive(Default)]
struct SystemSets { struct SystemSets {
/// List of system sets in the schedule /// List of system sets in the schedule
sets: SlotMap<SystemSetKey, SystemSetNode>, sets: SlotMap<SystemSetKey, InternedSystemSet>,
/// List of conditions for each system set, in the same order as `system_sets` /// List of conditions for each system set, in the same order as `system_sets`
conditions: SecondaryMap<SystemSetKey, Vec<ConditionWithAccess>>, conditions: SecondaryMap<SystemSetKey, Vec<ConditionWithAccess>>,
/// Map from system set to node id /// Map from system set to node id
@ -795,7 +772,7 @@ struct SystemSets {
impl SystemSets { impl SystemSets {
fn get_or_add_set(&mut self, set: InternedSystemSet) -> SystemSetKey { fn get_or_add_set(&mut self, set: InternedSystemSet) -> SystemSetKey {
*self.ids.entry(set).or_insert_with(|| { *self.ids.entry(set).or_insert_with(|| {
let key = self.sets.insert(SystemSetNode::new(set)); let key = self.sets.insert(set);
self.conditions.insert(key, Vec::new()); self.conditions.insert(key, Vec::new());
key key
}) })
@ -875,7 +852,7 @@ impl ScheduleGraph {
/// Returns the set at the given [`NodeId`], if it exists. /// Returns the set at the given [`NodeId`], if it exists.
pub fn get_set_at(&self, key: SystemSetKey) -> Option<&dyn SystemSet> { pub fn get_set_at(&self, key: SystemSetKey) -> Option<&dyn SystemSet> {
self.system_sets.sets.get(key).map(|set| &*set.inner) self.system_sets.sets.get(key).map(|set| &**set)
} }
/// Returns the set at the given [`NodeId`]. /// Returns the set at the given [`NodeId`].
@ -917,10 +894,9 @@ impl ScheduleGraph {
pub fn system_sets( pub fn system_sets(
&self, &self,
) -> impl Iterator<Item = (SystemSetKey, &dyn SystemSet, &[ConditionWithAccess])> { ) -> impl Iterator<Item = (SystemSetKey, &dyn SystemSet, &[ConditionWithAccess])> {
self.system_sets.sets.iter().filter_map(|(key, set_node)| { self.system_sets.sets.iter().filter_map(|(key, set)| {
let set = &*set_node.inner;
let conditions = self.system_sets.conditions.get(key)?.as_slice(); let conditions = self.system_sets.conditions.get(key)?.as_slice();
Some((key, set, conditions)) Some((key, &**set, conditions))
}) })
} }
@ -1704,7 +1680,7 @@ impl ScheduleGraph {
if set.is_anonymous() { if set.is_anonymous() {
self.anonymous_set_name(id) self.anonymous_set_name(id)
} else { } else {
set.name() format!("{set:?}")
} }
} }
} }
@ -1927,7 +1903,7 @@ impl ScheduleGraph {
) -> Result<(), ScheduleBuildError> { ) -> Result<(), ScheduleBuildError> {
for (&key, systems) in set_systems { for (&key, systems) in set_systems {
let set = &self.system_sets.sets[key]; let set = &self.system_sets.sets[key];
if set.is_system_type() { if set.system_type().is_some() {
let instances = systems.len(); let instances = systems.len();
let ambiguous_with = self.ambiguous_with.edges(NodeId::Set(key)); let ambiguous_with = self.ambiguous_with.edges(NodeId::Set(key));
let before = self let before = self
@ -2033,7 +2009,7 @@ impl ScheduleGraph {
fn names_of_sets_containing_node(&self, id: &NodeId) -> Vec<String> { fn names_of_sets_containing_node(&self, id: &NodeId) -> Vec<String> {
let mut sets = <HashSet<_>>::default(); let mut sets = <HashSet<_>>::default();
self.traverse_sets_containing_node(*id, &mut |key| { self.traverse_sets_containing_node(*id, &mut |key| {
!self.system_sets.sets[key].is_system_type() && sets.insert(key) self.system_sets.sets[key].system_type().is_none() && sets.insert(key)
}); });
let mut sets: Vec<_> = sets let mut sets: Vec<_> = sets
.into_iter() .into_iter()