[−][src]Trait specs::BatchController
The BatchController
is the additional trait that a normal System must
implement in order to be used as a system controlling the execution of a batch.
Note that the System
must also implement Send
because the Dispatcher
is by default un-send.
The safety of implementing Send
is ensured by BatchAccessor
which keeps
tracks of all used resources and thus the System
can be safely executed in
with multiple threads.
Associated Types
type BatchSystemData: SystemData<'a>
This associated type has to contain all resources batch controller uses directly.
These have to be specified here, instead of SystemData
(as
a normal System
does) because the sub System
s can use the same Resource
s
of the BatchController
.
This make necessary to drop the references to the
fetched Resource
s in the batch controller before dispatching
the sub System
s.
Now is easy to understand that specify the BatchController
Resource
in the SystemData
doesn't allow to drop the reference
before the sub dispatching; resulting in Panic
.
So this mechanism allows you to fetch safely the specified Resource
in the BatchController
.
The example "examples/batch_dispatching.rs" show how to use it.
Note that it's not required to specify the sub systems resources here because they are handled automatically.
Required methods
unsafe fn create(
accessor: BatchAccessor,
dispatcher: Dispatcher<'a, 'b>
) -> Self
accessor: BatchAccessor,
dispatcher: Dispatcher<'a, 'b>
) -> Self
Creates an instance of the BatchControllerSystem
.
Usually this function is called internally by the DispatcherBuilder
which creates the BatchAccessor
correctly.
The Dispatcher
is constructed by the user elsewhere and passed to the
DispatcherBuilder
through the functions with_batch
or add_batch
and
passed as argument to this function.
Safety
This function is unsafe because an implementor of BatchController
is expected
to uphold quarantees of Send
only when it's created with
correctly constructed BatchAccessor
.
BatchAccessor
is meant for tracking which resourced are being used by the controller.
Implementors
impl<'a, 'b> BatchController<'a, 'b> for DefaultBatchControllerSystem<'a, 'b>
[src]
type BatchSystemData = ()
unsafe fn create(
accessor: BatchAccessor,
dispatcher: Dispatcher<'a, 'b>
) -> DefaultBatchControllerSystem<'a, 'b>
[src]
accessor: BatchAccessor,
dispatcher: Dispatcher<'a, 'b>
) -> DefaultBatchControllerSystem<'a, 'b>