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:
parent
ace0114bdd
commit
7ae8b53923
@ -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()
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user