pub struct ScheduleGraph { /* private fields */ }
Expand description
Metadata for a Schedule
.
The order isn’t optimized; calling ScheduleGraph::build_schedule
will return a
SystemSchedule
where the order is optimized for execution.
Implementations§
Source§impl ScheduleGraph
impl ScheduleGraph
Sourcepub fn new() -> Self
pub fn new() -> Self
Creates an empty ScheduleGraph
with default settings.
Sourcepub fn get_system_at(
&self,
id: NodeId,
) -> Option<&dyn System<In = (), Out = ()>>
pub fn get_system_at( &self, id: NodeId, ) -> Option<&dyn System<In = (), Out = ()>>
Returns the system at the given NodeId
, if it exists.
Sourcepub fn contains_set(&self, set: impl SystemSet) -> bool
pub fn contains_set(&self, set: impl SystemSet) -> bool
Returns true
if the given system set is part of the graph. Otherwise, returns false
.
Sourcepub fn system_at(&self, id: NodeId) -> &dyn System<In = (), Out = ()>
pub fn system_at(&self, id: NodeId) -> &dyn System<In = (), Out = ()>
Returns the system at the given NodeId
.
Panics if it doesn’t exist.
Sourcepub fn get_set_at(&self, id: NodeId) -> Option<&dyn SystemSet>
pub fn get_set_at(&self, id: NodeId) -> Option<&dyn SystemSet>
Returns the set at the given NodeId
, if it exists.
Sourcepub fn set_at(&self, id: NodeId) -> &dyn SystemSet
pub fn set_at(&self, id: NodeId) -> &dyn SystemSet
Returns the set at the given NodeId
.
Panics if it doesn’t exist.
Sourcepub fn systems(
&self,
) -> impl Iterator<Item = (NodeId, &dyn System<In = (), Out = ()>, &[BoxedCondition])>
pub fn systems( &self, ) -> impl Iterator<Item = (NodeId, &dyn System<In = (), Out = ()>, &[BoxedCondition])>
Returns an iterator over all systems in this schedule, along with the conditions for each system.
Sourcepub fn system_sets(
&self,
) -> impl Iterator<Item = (NodeId, &dyn SystemSet, &[BoxedCondition])>
pub fn system_sets( &self, ) -> impl Iterator<Item = (NodeId, &dyn SystemSet, &[BoxedCondition])>
Returns an iterator over all system sets in this schedule, along with the conditions for each system set.
Sourcepub fn hierarchy(&self) -> &Dag
pub fn hierarchy(&self) -> &Dag
Returns the Dag
of the hierarchy.
The hierarchy is a directed acyclic graph of the systems and sets, where an edge denotes that a system or set is the child of another set.
Sourcepub fn dependency(&self) -> &Dag
pub fn dependency(&self) -> &Dag
Returns the Dag
of the dependencies in the schedule.
Nodes in this graph are systems and sets, and edges denote that a system or set has to run before another system or set.
Sourcepub fn conflicting_systems(&self) -> &[(NodeId, NodeId, Vec<ComponentId>)]
pub fn conflicting_systems(&self) -> &[(NodeId, NodeId, Vec<ComponentId>)]
Returns the list of systems that conflict with each other, i.e. have ambiguities in their access.
If the Vec<ComponentId>
is empty, the systems conflict on World
access.
Must be called after ScheduleGraph::build_schedule
to be non-empty.
Sourcepub fn initialize(&mut self, world: &mut World)
pub fn initialize(&mut self, world: &mut World)
Initializes any newly-added systems and conditions by calling System::initialize
Sourcepub fn build_schedule(
&mut self,
components: &Components,
schedule_label: InternedScheduleLabel,
ignored_ambiguities: &BTreeSet<ComponentId>,
) -> Result<SystemSchedule, ScheduleBuildError>
pub fn build_schedule( &mut self, components: &Components, schedule_label: InternedScheduleLabel, ignored_ambiguities: &BTreeSet<ComponentId>, ) -> Result<SystemSchedule, ScheduleBuildError>
Build a SystemSchedule
optimized for scheduler access from the ScheduleGraph
.
This method also
- checks for dependency or hierarchy cycles
- checks for system access conflicts and reports ambiguities
Source§impl ScheduleGraph
impl ScheduleGraph
Sourcepub fn conflicts_to_string<'a>(
&'a self,
ambiguities: &'a [(NodeId, NodeId, Vec<ComponentId>)],
components: &'a Components,
) -> impl Iterator<Item = (String, String, Vec<&'a str>)> + 'a
pub fn conflicts_to_string<'a>( &'a self, ambiguities: &'a [(NodeId, NodeId, Vec<ComponentId>)], components: &'a Components, ) -> impl Iterator<Item = (String, String, Vec<&'a str>)> + 'a
convert conflicts to human readable format
Trait Implementations§
Source§impl Default for ScheduleGraph
impl Default for ScheduleGraph
Source§fn default() -> ScheduleGraph
fn default() -> ScheduleGraph
Auto Trait Implementations§
impl Freeze for ScheduleGraph
impl !RefUnwindSafe for ScheduleGraph
impl Send for ScheduleGraph
impl Sync for ScheduleGraph
impl Unpin for ScheduleGraph
impl !UnwindSafe for ScheduleGraph
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Trait>
(where Trait: Downcast
) to Box<dyn Any>
. Box<dyn Any>
can
then be further downcast
into Box<ConcreteType>
where ConcreteType
implements Trait
.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait>
(where Trait: Downcast
) to Rc<Any>
. Rc<Any>
can then be
further downcast
into Rc<ConcreteType>
where ConcreteType
implements Trait
.Source§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &Any
’s vtable from &Trait
’s.Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &mut Any
’s vtable from &mut Trait
’s.Source§impl<T> DowncastSync for T
impl<T> DowncastSync for T
Source§impl<T> FromWorld for Twhere
T: Default,
impl<T> FromWorld for Twhere
T: Default,
Source§fn from_world(_world: &mut World) -> T
fn from_world(_world: &mut World) -> T
Creates Self
using default()
.