Trait legion::systems::ResourceSet[][src]

pub trait ResourceSet<'a> {
    type Result: 'a;
    unsafe fn fetch_unchecked(resources: &'a UnsafeResources) -> Self::Result;

    fn fetch_mut(resources: &'a mut Resources) -> Self::Result { ... }
fn fetch(resources: &'a Resources) -> Self::Result
    where
        Self: ReadOnly
, { ... } }

Trait which is implemented for tuples of resources and singular resources. This abstracts fetching resources to allow for ergonomic fetching.

Example:

struct TypeA(usize);
struct TypeB(usize);

let mut resources = Resources::default();
resources.insert(TypeA(55));
resources.insert(TypeB(12));

{
    let (a, mut b) = <(Read<TypeA>, Write<TypeB>)>::fetch_mut(&mut resources);
    assert_ne!(a.0, b.0);
    b.0 = a.0;
}

{
    let (a, b) = <(Read<TypeA>, Read<TypeB>)>::fetch(&resources);
    assert_eq!(a.0, b.0);
}

Associated Types

type Result: 'a[src]

The resource reference returned during a fetch.

Loading content...

Required methods

unsafe fn fetch_unchecked(resources: &'a UnsafeResources) -> Self::Result[src]

Fetches all defined resources, without checking mutability.

Safety

It is up to the end user to validate proper mutability rules across the resources being accessed.

Loading content...

Provided methods

fn fetch_mut(resources: &'a mut Resources) -> Self::Result[src]

Fetches all defined resources.

fn fetch(resources: &'a Resources) -> Self::Result where
    Self: ReadOnly, 
[src]

Fetches all defined resources.

Loading content...

Implementations on Foreign Types

impl<'a> ResourceSet<'a> for ()[src]

type Result = ()

impl<'a, A: ResourceSet<'a>, B: ResourceSet<'a>, C: ResourceSet<'a>, D: ResourceSet<'a>, E: ResourceSet<'a>, F: ResourceSet<'a>, G: ResourceSet<'a>, H: ResourceSet<'a>> ResourceSet<'a> for (A, B, C, D, E, F, G, H)[src]

type Result = (A::Result, B::Result, C::Result, D::Result, E::Result, F::Result, G::Result, H::Result)

impl<'a, B: ResourceSet<'a>, C: ResourceSet<'a>, D: ResourceSet<'a>, E: ResourceSet<'a>, F: ResourceSet<'a>, G: ResourceSet<'a>, H: ResourceSet<'a>> ResourceSet<'a> for (B, C, D, E, F, G, H)[src]

type Result = (B::Result, C::Result, D::Result, E::Result, F::Result, G::Result, H::Result)

impl<'a, C: ResourceSet<'a>, D: ResourceSet<'a>, E: ResourceSet<'a>, F: ResourceSet<'a>, G: ResourceSet<'a>, H: ResourceSet<'a>> ResourceSet<'a> for (C, D, E, F, G, H)[src]

type Result = (C::Result, D::Result, E::Result, F::Result, G::Result, H::Result)

impl<'a, D: ResourceSet<'a>, E: ResourceSet<'a>, F: ResourceSet<'a>, G: ResourceSet<'a>, H: ResourceSet<'a>> ResourceSet<'a> for (D, E, F, G, H)[src]

type Result = (D::Result, E::Result, F::Result, G::Result, H::Result)

impl<'a, E: ResourceSet<'a>, F: ResourceSet<'a>, G: ResourceSet<'a>, H: ResourceSet<'a>> ResourceSet<'a> for (E, F, G, H)[src]

type Result = (E::Result, F::Result, G::Result, H::Result)

impl<'a, F: ResourceSet<'a>, G: ResourceSet<'a>, H: ResourceSet<'a>> ResourceSet<'a> for (F, G, H)[src]

type Result = (F::Result, G::Result, H::Result)

impl<'a, G: ResourceSet<'a>, H: ResourceSet<'a>> ResourceSet<'a> for (G, H)[src]

type Result = (G::Result, H::Result)

impl<'a, H: ResourceSet<'a>> ResourceSet<'a> for (H,)[src]

type Result = (H::Result,)

Loading content...

Implementors

impl<'a, T: Resource> ResourceSet<'a> for Read<T>[src]

type Result = AtomicRef<'a, T>

impl<'a, T: Resource> ResourceSet<'a> for Write<T>[src]

type Result = AtomicRefMut<'a, T>

Loading content...