From ab78ff4076c8707987a172c2ff9ad9a9c3f024d6 Mon Sep 17 00:00:00 2001 From: Trevor Spiteri Date: Fri, 10 Aug 2018 12:46:24 +0200 Subject: [PATCH] place Neg higher up in doc --- src/lib.rs | 43 ++++++++++++++++++++++++------------------- 1 file changed, 24 insertions(+), 19 deletions(-) diff --git a/src/lib.rs b/src/lib.rs index 9830f24..5ea6145 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -87,6 +87,14 @@ use traits::FixedNum; const F: u32 = 7; +macro_rules! if_signed { + (Signed => $($rem:tt)+) => { + $($rem)+ + }; + (Unsigned => $($rem:tt)+) => { + }; +} + macro_rules! refs { (impl $Imp:ident for $Fixed:ident($Inner:ty) { $method:ident }) => { impl<'a> $Imp<$Fixed> for &'a $Fixed { @@ -318,8 +326,8 @@ macro_rules! to_f { }; } -macro_rules! fixed_unsigned { - ($description:expr, $Fixed:ident($Inner:ty)) => { +macro_rules! fixed { + ($description:expr, $Fixed:ident($Inner:ty), $Signedness:tt) => { doc_comment! { concat!( $description, @@ -369,6 +377,10 @@ macro_rules! fixed_unsigned { to_f! { to_f64 -> f64(u64), 11, 53 } } + if_signed! { + $Signedness => pass_one! { impl Neg for $Fixed($Inner) { neg } } + } + pass! { impl Add for $Fixed($Inner) { add } } pass_assign! { impl AddAssign for $Fixed($Inner) { add_assign } } pass! { impl Sub for $Fixed($Inner) { sub } } @@ -467,24 +479,17 @@ macro_rules! fixed_unsigned { }; } -macro_rules! fixed_signed { - ($description:expr, $Fixed:ident($Inner:ty)) => { - fixed_unsigned! { $description, $Fixed($Inner) } - pass_one! { impl Neg for $Fixed($Inner) { neg } } - }; -} - -fixed_unsigned! { "An eight-bit fixed-point unsigned integer", FixedU8(u8) } -fixed_unsigned! { "A 16-bit fixed-point unsigned integer", FixedU16(u16) } -fixed_unsigned! { "A 32-bit fixed-point unsigned integer", FixedU32(u32) } -fixed_unsigned! { "A 64-bit fixed-point unsigned integer", FixedU64(u64) } -fixed_unsigned! { "A 128-bit fixed-point unsigned integer", FixedU128(u128) } -fixed_signed! { "An eight-bit fixed-point signed integer", FixedI8(i8) } -fixed_signed! { "A 16-bit fixed-point signed integer", FixedI16(i16) } -fixed_signed! { "A 32-bit fixed-point signed integer", FixedI32(i32) } -fixed_signed! { "A 64-bit fixed-point signed integer", FixedI64(i64) } -fixed_signed! { "A 128-bit fixed-point signed integer", FixedI128(i128) } +fixed! { "An eight-bit fixed-point unsigned integer", FixedU8(u8), Unsigned } +fixed! { "A 16-bit fixed-point unsigned integer", FixedU16(u16), Unsigned } +fixed! { "A 32-bit fixed-point unsigned integer", FixedU32(u32), Unsigned } +fixed! { "A 64-bit fixed-point unsigned integer", FixedU64(u64), Unsigned } +fixed! { "A 128-bit fixed-point unsigned integer", FixedU128(u128), Unsigned } +fixed! { "An eight-bit fixed-point signed integer", FixedI8(i8), Signed } +fixed! { "A 16-bit fixed-point signed integer", FixedI16(i16), Signed } +fixed! { "A 32-bit fixed-point signed integer", FixedI32(i32), Signed } +fixed! { "A 64-bit fixed-point signed integer", FixedI64(i64), Signed } +fixed! { "A 128-bit fixed-point signed integer", FixedI128(i128), Signed } trait MulDiv { fn mul(self, rhs: Self) -> Self;