shred - Shared resource dispatcher

Build Status Crates.io MIT/Apache Docs.rs LoC

This library allows to dispatch systems, which can have interdependencies, shared and exclusive resource access, in parallel.

Usage

```rust extern crate shred;

use shred::{DispatcherBuilder, Read, Resource, Resources, System, Write};

[derive(Debug, Default)]

struct ResA;

[derive(Debug, Default)]

struct ResB;

struct PrintSystem;

// Systems should be generic over the // context if possible, so it's easy // to introduce one. impl<'a> System<'a> for PrintSystem { type SystemData = (Read<'a, ResA>, Write<'a, ResB>);

fn run(&mut self, data: Self::SystemData) {
    let (a, mut b) = data;

    println!("{:?}", &*a);
    println!("{:?}", &*b);

    *b = ResB; // We can mutate ResB here
    // because it's `FetchMut`.
}

}

fn main() { let mut resources = Resources::new(); let mut dispatcher = DispatcherBuilder::new() .with(PrintSystem, "print", &[]) // Adds a system "print" without dependencies .build(); //resources.add(ResA); (We don't need to add ResA, a default value will be instantiated) resources.insert(ResB);

dispatcher.dispatch(&mut resources);

} ```

Please see the benchmark for a bigger (and useful) example.

Required Rust version

1.18 stable

Features

Contribution

Contribution is highly welcome! If you'd like another feature, just create an issue. You can also help out if you want to; just pick a "help wanted" issue. If you need any help, feel free to ask!

All contributions are assumed to be dual-licensed under MIT/Apache-2.

License

shred is distributed under the terms of both the MIT license and the Apache License (Version 2.0).

See LICENSE-APACHE and LICENSE-MIT.