1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
use crate::simd::{LaneCount, Simd, SimdElement, SupportedLaneCount};
use core::fmt;

macro_rules! impl_fmt_trait {
    { $($trait:ident,)* } => {
        $(
            impl<T, const LANES: usize> fmt::$trait for Simd<T, LANES>
            where
                LaneCount<LANES>: SupportedLaneCount,
                T: SimdElement + fmt::$trait,
            {
                fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
                    #[repr(transparent)]
                    struct Wrapper<'a, T: fmt::$trait>(&'a T);

                    impl<T: fmt::$trait> fmt::Debug for Wrapper<'_, T> {
                        fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
                            self.0.fmt(f)
                        }
                    }

                    f.debug_list()
                        .entries(self.as_array().iter().map(|x| Wrapper(x)))
                        .finish()
                }
            }
        )*
    }
}

impl_fmt_trait! {
    Debug,
    Binary,
    LowerExp,
    UpperExp,
    Octal,
    LowerHex,
    UpperHex,
}