Crate shred [−] [src]
Shared resource dispatcher
This library allows to dispatch systems, which can have interdependencies, shared and exclusive resource access, in parallel.
Examples
extern crate shred; #[macro_use] extern crate shred_derive; use shred::{DispatcherBuilder, Read, Resource, Resources, System, Write}; #[derive(Debug, Default)] struct ResA; #[derive(Debug, Default)] struct ResB; #[derive(SystemData)] struct Data<'a> { a: Read<'a, ResA>, b: Write<'a, ResB>, } struct EmptySystem; impl<'a> System<'a> for EmptySystem { type SystemData = Data<'a>; fn run(&mut self, bundle: Data<'a>) { println!("{:?}", &*bundle.a); println!("{:?}", &*bundle.b); } } fn main() { let mut resources = Resources::new(); let mut dispatcher = DispatcherBuilder::new() .with(EmptySystem, "empty", &[]) .build(); resources.insert(ResA); resources.insert(ResB); dispatcher.dispatch(&mut resources); }
Once you are more familiar with how system data and parallelization works,
you can take look at a more flexible and performant way to dispatch: ParSeq
.
Using it is bit trickier, but it allows dispatching without any virtual function calls.
Modules
cell |
Helper module for some internals, most users don't need to interact with it. |
Macros
par |
The |
seq |
The |
Structs
AsyncDispatcher |
Like, |
DefaultProvider |
A |
Dispatcher |
The dispatcher struct, allowing systems to be executed in parallel. |
DispatcherBuilder |
Builder for the |
Entry |
An entry to a resource of the |
Fetch |
Allows to fetch a resource in a system immutably. |
FetchMut |
Allows to fetch a resource in a system mutably. |
MetaIter |
An iterator for the |
MetaIterMut |
A mutable iterator for the |
MetaTable |
The |
PanicHandler |
A setup handler that simply does nothing and thus will cause a panic on fetching.
The panic will provide the type name if the |
Par |
Runs two tasks in parallel.
These two tasks are called |
ParSeq |
A dispatcher intended to be used with
|
Read |
Allows to fetch a resource in a system immutably. |
ResourceId |
The id of a |
Resources |
A resource container, which provides methods to access to the contained resources. |
Seq |
Runs two tasks sequentially.
These two tasks are called |
Write |
Allows to fetch a resource in a system mutably. |
Enums
RunningTime |
Traits
CastFrom |
Helper trait for the |
Resource |
A resource defines a set of data which can only be accessed according to Rust's typical borrowing model (one writer xor multiple readers). |
RunNow |
Trait for fetching data and running systems. Automatically implemented for systems. |
SetupHandler |
A setup handler performing the fetching of |
System |
A |
SystemData |
A struct implementing system data indicates that it bundles some resources which are required for the execution. |
Type Definitions
ReadExpect |
Allows to fetch a resource in a system mutably.
This will panic if the resource does not exist.
Usage of |
WriteExpect |
Allows to fetch a resource in a system mutably.
This will panic if the resource does not exist.
Usage of |