ecs: implement Access for tuples via macro

master
q3k 2021-03-21 21:45:14 +00:00
parent 4d39aee4f5
commit 1db8479493
1 changed files with 19 additions and 38 deletions

View File

@ -81,47 +81,28 @@ impl<'a, T: component::Global> Access<'a> for ReadWriteGlobal<'a, T> {
} }
} }
impl <'a, macro_rules! impl_access_tuple {
T: Access<'a>, ( $($ty:ident),* ) => {
U: Access<'a>, impl <'a, $($ty),*> Access<'a> for ( $($ty,)* )
> Access<'a> for (T, U) { where $( $ty : Access<'a> ),*
fn fetch(world: &'a World) -> Self { {
( fn fetch(world: &'a World) -> Self {
T::fetch(world), ( $( $ty::fetch(world), )* )
U::fetch(world), }
) }
} }
} }
impl <'a, impl_access_tuple!(A);
T: Access<'a>, impl_access_tuple!(A, B);
U: Access<'a>, impl_access_tuple!(A, B, C);
V: Access<'a>, impl_access_tuple!(A, B, C, D);
> Access<'a> for (T, U, V) { impl_access_tuple!(A, B, C, D, E);
fn fetch(world: &'a World) -> Self { impl_access_tuple!(A, B, C, D, E, F);
( impl_access_tuple!(A, B, C, D, E, F, G);
T::fetch(world), impl_access_tuple!(A, B, C, D, E, F, G, H);
U::fetch(world), impl_access_tuple!(A, B, C, D, E, F, G, H, I);
V::fetch(world), impl_access_tuple!(A, B, C, D, E, F, G, H, I, J);
)
}
}
impl <'a,
T: Access<'a>,
U: Access<'a>,
V: Access<'a>,
W: Access<'a>,
> Access<'a> for (T, U, V, W) {
fn fetch(world: &'a World) -> Self {
(
T::fetch(world),
U::fetch(world),
V::fetch(world),
W::fetch(world),
)
}
}
pub struct Processor<'a> { pub struct Processor<'a> {
world: &'a World, world: &'a World,