[−][src]Struct oxygengine_core::ecs::shred::DispatcherBuilder
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();
Methods
impl<'a, 'b> DispatcherBuilder<'a, 'b>
[src]
pub fn new() -> DispatcherBuilder<'a, 'b>
[src]
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.
pub fn with<T>(
self,
system: T,
name: &str,
dep: &[&str]
) -> DispatcherBuilder<'a, 'b> where
T: System<'c> + Send + 'a,
[src]
self,
system: T,
name: &str,
dep: &[&str]
) -> DispatcherBuilder<'a, 'b> where
T: System<'c> + Send + 'a,
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.
pub fn add<T>(&mut self, system: T, name: &str, dep: &[&str]) where
T: System<'c> + Send + 'a,
[src]
T: System<'c> + Send + 'a,
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_thread_local<T>(self, system: T) -> DispatcherBuilder<'a, 'b> where
T: RunNow<'c> + 'b,
[src]
T: RunNow<'c> + 'b,
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
add_thread_local()
,
but returns self
to enable method chaining.
pub fn add_thread_local<T>(&mut self, system: T) where
T: RunNow<'c> + 'b,
[src]
T: RunNow<'c> + 'b,
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.
pub fn with_barrier(self) -> DispatcherBuilder<'a, 'b>
[src]
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
add_barrier()
,
but returns self
to enable method chaining.
pub fn add_barrier(&mut self)
[src]
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.
pub fn print_par_seq(&self)
[src]
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.
pub fn build(self) -> Dispatcher<'a, 'b>
[src]
Builds the Dispatcher
.
In the future, this method will precompute useful information in order to speed up dispatching.
Trait Implementations
impl<'a, 'b> Debug for DispatcherBuilder<'a, 'b>
[src]
impl<'a, 'b> Default for DispatcherBuilder<'a, 'b>
[src]
fn default() -> DispatcherBuilder<'a, 'b>
[src]
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: 'static + ?Sized,
[src]
T: 'static + ?Sized,
impl<T> Any for T where
T: Any,
T: Any,
fn get_type_id(&self) -> TypeId
impl<T> Borrow<T> for T where
T: ?Sized,
[src]
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src]
T: ?Sized,
fn borrow_mut(&mut self) -> &mut T
[src]
impl<T> Erased for T
impl<T> From<T> for T
[src]
impl<T, U> Into<U> for T where
U: From<T>,
[src]
U: From<T>,
impl<T> TryDefault for T where
T: Default,
[src]
T: Default,
fn try_default() -> Result<T, String>
[src]
fn unwrap_default() -> Self
[src]
impl<T, U> TryFrom<U> for T where
U: Into<T>,
[src]
U: Into<T>,
type Error = Infallible
The type returned in the event of a conversion error.
fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
[src]
impl<T, U> TryInto<U> for T where
U: TryFrom<T>,
[src]
U: TryFrom<T>,
type Error = <U as TryFrom<T>>::Error
The type returned in the event of a conversion error.
fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>
[src]
impl<V, T> VZip<V> for T where
V: MultiLane<T>,
V: MultiLane<T>,