tuple 0.5.2

Element-wise operations on tuples
Documentation
use super::*;

macro_rules! m_call {
    ($($Tuple:ident $Arr:ident { $($T:ident . $t:ident . $idx:tt),* } )*) => ($(
        impl<Func, Out, $($T),*> Call<$Tuple<$($T),*>> for Func where Func: Fn($($T),*) -> Out {
            type Output = Out;
            #[inline(always)]
            fn call(&self, $Tuple($($t),*): $Tuple<$($T),*>) -> Out {
                self($($t),*)
            }
        }
        impl<Func, Out, $($T),*> CallMut<$Tuple<$($T),*>> for Func where Func: FnMut($($T),*) -> Out {
            type Output = Out;
            #[inline(always)]
            fn call_mut(&mut self, $Tuple($($t),*): $Tuple<$($T),*>) -> Out {
                self($($t),*)
            }
        }
        impl<Func, Out, $($T),*> CallOnce<$Tuple<$($T),*>> for Func where Func: FnOnce($($T),*) -> Out {
            type Output = Out;
            #[inline(always)]
            fn call_once(self, $Tuple($($t),*): $Tuple<$($T),*>) -> Out {
                self($($t),*)
            }
        }
        impl<Func, Out, $($T),*> Call<($($T,)*)> for Func where Func: Fn($($T),*) -> Out {
            type Output = Out;
            #[inline(always)]
            fn call(&self, ($($t,)*): ($($T,)*)) -> Out {
                self($($t),*)
            }
        }
        impl<Func, Out, $($T),*> CallMut<($($T,)*)> for Func where Func: FnMut($($T),*) -> Out {
            type Output = Out;
            #[inline(always)]
            fn call_mut(&mut self, ($($t,)*): ($($T,)*)) -> Out {
                self($($t),*)
            }
        }
        impl<Func, Out, $($T),*> CallOnce<($($T,)*)> for Func where Func: FnOnce($($T),*) -> Out {
            type Output = Out;
            #[inline(always)]
            fn call_once(self, ($($t,)*): ($($T,)*)) -> Out {
                self($($t),*)
            }
        }
    )*)
}

impl_tuple!(m_call);