Struct oxygengine_core::ecs::DispatcherBuilder [−][src]
pub struct DispatcherBuilder<'a, 'b> { /* fields omitted */ }Expand description
Builder for the Dispatcher.
Barriers
Barriers are a way of sequentializing parts of
the system execution. See add_barrier()/with_barrier().
Examples
This is how you create a dispatcher with a shared thread pool:
let dispatcher: Dispatcher = DispatcherBuilder::new() .with(system_a, "a", &[]) .with(system_b, "b", &["a"]) // b depends on a .with(system_c, "c", &["a"]) // c also depends on a .with(system_d, "d", &[]) .with(system_e, "e", &["c", "d"]) // e executes after c and d are finished .build();
Systems can be conditionally added by using the add_ functions:
let mut builder = DispatcherBuilder::new() .with(system_a, "a", &[]); if b_enabled { builder.add(system_b, "b", &[]); } let dispatcher = builder.build();
Implementations
Creates a new DispatcherBuilder by using the Default implementation.
The default behaviour is to create a thread pool on finish.
If you already have a rayon ThreadPool, it’s highly recommended to
configure this builder to use it with with_pool instead.
Adds a new system with a given name and a list of dependencies. Please note that the dependency should be added before you add the depending system.
If you want to register systems which can not be specified as
dependencies, you can use "" as their name, which will not panic
(using another name twice will).
Same as add(), but
returns self to enable method chaining.
Panics
- if the specified dependency does not exist
- if a system with the same name was already registered.
Adds a new system with a given name and a list of dependencies. Please note that the dependency should be added before you add the depending system.
If you want to register systems which can not be specified as
dependencies, you can use "" as their name, which will not panic
(using another name twice will).
Panics
- if the specified dependency does not exist
- if a system with the same name was already registered.
pub fn with_batch<T>(
self,
dispatcher_builder: DispatcherBuilder<'a, 'b>,
name: &str,
dep: &[&str]
) -> DispatcherBuilder<'a, 'b> where
T: for<'c> System<'c> + BatchController<'a, 'b> + Send + 'a, [src]
pub fn with_batch<T>(
self,
dispatcher_builder: DispatcherBuilder<'a, 'b>,
name: &str,
dep: &[&str]
) -> DispatcherBuilder<'a, 'b> where
T: for<'c> System<'c> + BatchController<'a, 'b> + Send + 'a, [src]The Batch is a System which contains a Dispatcher.
By wrapping a Dispatcher inside a system, we can control the execution
of a whole group of system, without sacrificing parallelism or
conciseness.
This function accepts the DispatcherBuilder as parameter, and the type
of the System that will drive the execution of the internal
dispatcher.
Note that depending on the dependencies of the SubSystems the Batch can run in parallel with other Systems. In addition the Sub Systems can run in parallel within the Batch.
The Dispatcher created for this Batch is completelly separate,
from the parent Dispatcher.
This mean that the dependencies, the System names, etc.. specified on
the Batch Dispatcher are not visible on the parent, and is not
allowed to specify cross dependencies.
pub fn add_batch<T>(
&mut self,
dispatcher_builder: DispatcherBuilder<'a, 'b>,
name: &str,
dep: &[&str]
) where
T: for<'c> System<'c> + BatchController<'a, 'b> + Send + 'a, [src]
pub fn add_batch<T>(
&mut self,
dispatcher_builder: DispatcherBuilder<'a, 'b>,
name: &str,
dep: &[&str]
) where
T: for<'c> System<'c> + BatchController<'a, 'b> + Send + 'a, [src]The Batch is a System which contains a Dispatcher.
By wrapping a Dispatcher inside a system, we can control the execution
of a whole group of system, without sacrificing parallelism or
conciseness.
This function accepts the DispatcherBuilder as parameter, and the type
of the System that will drive the execution of the internal
dispatcher.
Note that depending on the dependencies of the SubSystems the Batch can run in parallel with other Systems. In addition the Sub Systems can run in parallel within the Batch.
The Dispatcher created for this Batch is completelly separate,
from the parent Dispatcher.
This mean that the dependencies, the System names, etc.. specified on
the Batch Dispatcher are not visible on the parent, and is not
allowed to specify cross dependencies.
pub fn with_thread_local<T>(self, system: T) -> DispatcherBuilder<'a, 'b> where
T: for<'c> RunNow<'c> + 'b, [src]
pub fn with_thread_local<T>(self, system: T) -> DispatcherBuilder<'a, 'b> where
T: for<'c> RunNow<'c> + 'b, [src]Adds a new thread local system.
Please only use this if your struct is not Send and Sync.
Thread-local systems are dispatched in-order.
Same as DispatcherBuilder::add_thread_local, but returns self to
enable method chaining.
Adds a new thread local system.
Please only use this if your struct is not Send and Sync.
Thread-local systems are dispatched in-order.
Inserts a barrier which assures that all systems added before the barrier are executed before the ones after this barrier.
Does nothing if there were no systems added
since the last call to add_barrier()/with_barrier().
Thread-local systems are not affected by barriers; they’re always executed at the end.
Same as DispatcherBuilder::add_barrier, but returns self to enable
method chaining.
Inserts a barrier which assures that all systems added before the barrier are executed before the ones after this barrier.
Does nothing if there were no systems added
since the last call to add_barrier()/with_barrier().
Thread-local systems are not affected by barriers; they’re always executed at the end.
Prints the equivalent system graph
that can be easily used to get the graph using the seq! and par!
macros. This is only recommended for advanced users.
Builds the Dispatcher.
In the future, this method will precompute useful information in order to speed up dispatching.
Trait Implementations
Returns the “default value” for a type. Read more
Auto Trait Implementations
impl<'a, 'b> !RefUnwindSafe for DispatcherBuilder<'a, 'b>impl<'a, 'b> !Send for DispatcherBuilder<'a, 'b>impl<'a, 'b> !Sync for DispatcherBuilder<'a, 'b>impl<'a, 'b> Unpin for DispatcherBuilder<'a, 'b>impl<'a, 'b> !UnwindSafe for DispatcherBuilder<'a, 'b>Blanket Implementations
impl<T> Any for T where
T: Any,
impl<T> Any for T where
T: Any, pub fn get_type_id(&self) -> TypeIdMutably borrows from an owned value. Read more
Tries to create the default.
Calls try_default and panics on an error case.