digit_layout/
macros.rs

1/// 定义一个 [`DigitLayout`](crate::DigitLayout) 实例。
2#[macro_export]
3macro_rules! layout {
4    ($name:ident u($bits:expr); $group:expr) => {
5        #[allow(non_upper_case_globals)]
6        pub const $name: $crate::DigitLayout = $crate::DigitLayout::unsigned($bits, $group);
7    };
8    ($name:ident e($exponent:expr)m($mantissa:expr); $group:expr) => {
9        #[allow(non_upper_case_globals)]
10        pub const $name: $crate::DigitLayout = $crate::DigitLayout::real($exponent, $mantissa, $group);
11    };
12    ($name:ident = $text:expr; [$group:expr] in $size:expr) => {
13        #[allow(non_upper_case_globals)]
14        pub const $name: $crate::DigitLayout = $crate::DigitLayout::named($text, $group, $size);
15    };
16
17    ($name:ident u($bits:expr)) => {
18        $crate::layout!($name u($bits); 1);
19    };
20    ($name:ident i($bits:expr)) => {
21        $crate::layout!($name e(0)m($bits - 1); 1);
22    };
23    ($name:ident e($exponent:expr)m($mantissa:expr)) => {
24        $crate::layout!($name e($exponent)m($mantissa); 1);
25    };
26    ($name:ident; [$group:expr] in $size:expr) => {
27        $crate::layout!($name = stringify!($name); [$group] in $size);
28    };
29}