fastnum 0.7.4

Fast decimal numbers library
Documentation
macro_rules! num_impl {
    ($Ty: ident, $sign: ident) => {
        impl<const N: usize> $Ty<N> {
            #[doc = doc::num::count_ones!($sign 256)]
            #[must_use = doc::must_use_op!()]
            #[inline(always)]
            pub const fn count_ones(self) -> ExpType {
                self.0.count_ones()
            }

            #[doc = doc::num::count_zeros!($sign 256)]
            #[must_use = doc::must_use_op!()]
            #[inline(always)]
            pub const fn count_zeros(self) -> ExpType {
                self.0.count_zeros()
            }

            #[doc = doc::num::leading_zeros!($sign 256)]
            #[must_use = doc::must_use_op!()]
            #[inline(always)]
            pub const fn leading_zeros(self) -> ExpType {
                self.0.leading_zeros()
            }

            #[doc = doc::num::trailing_zeros!($sign 256)]
            #[must_use = doc::must_use_op!()]
            #[inline(always)]
            pub const fn trailing_zeros(self) -> ExpType {
                self.0.trailing_zeros()
            }

            #[doc = doc::num::leading_ones!($sign 256)]
            #[must_use = doc::must_use_op!()]
            #[inline(always)]
            pub const fn leading_ones(self) -> ExpType {
                self.0.leading_ones()
            }

            #[doc = doc::num::trailing_ones!($sign 256)]
            #[must_use = doc::must_use_op!()]
            #[inline(always)]
            pub const fn trailing_ones(self) -> ExpType {
                self.0.trailing_ones()
            }

            #[doc = doc::num::rotate_left!($sign 256)]
            #[must_use = doc::must_use_op!()]
            #[inline(always)]
            pub const fn rotate_left(self, n: ExpType) -> Self {
                Self(self.0.rotate_left(n))
            }

            #[doc = doc::num::rotate_right!($sign 256)]
            #[must_use = doc::must_use_op!()]
            #[inline(always)]
            pub const fn rotate_right(self, n: ExpType) -> Self {
                Self(self.0.rotate_right(n))
            }

            #[doc = doc::num::swap_bytes!($sign 256)]
            #[must_use = doc::must_use_op!()]
            #[inline(always)]
            pub const fn swap_bytes(self) -> Self {
                Self(self.0.swap_bytes())
            }

            #[doc = doc::num::reverse_bits!($sign 256)]
            #[must_use = doc::must_use_op!()]
            #[inline(always)]
            pub const fn reverse_bits(self) -> Self {
                Self(self.0.reverse_bits())
            }

            #[doc = doc::num::pow!($sign 256)]
            #[must_use = doc::must_use_op!()]
            #[inline(always)]
            pub const fn pow(self, exp: ExpType) -> Self {
                Self(self.0.pow(exp))
            }

            #[doc = doc::num::add!($sign 256)]
            #[must_use = doc::must_use_op!()]
            #[inline(always)]
            pub const fn add(self, rhs: Self) -> Self {
                Self(self.0.add(rhs.0))
            }

            #[doc = doc::num::shl!($sign 256)]
            #[must_use = doc::must_use_op!()]
            #[inline(always)]
            pub const fn shl(self, rhs: ExpType) -> Self {
                Self(self.0.shl(rhs))
            }

            #[doc = doc::num::shr!($sign 256)]
            #[must_use = doc::must_use_op!()]
            #[inline(always)]
            pub const fn shr(self, rhs: ExpType) -> Self {
                Self(self.0.shr(rhs))
            }

            #[doc = doc::num::sub!($sign 256)]
            #[must_use = doc::must_use_op!()]
            #[inline(always)]
            pub const fn sub(self, rhs: Self) -> Self {
                Self(self.0.sub(rhs.0))
            }

            #[doc = doc::num::rem!($sign 256)]
            #[must_use = doc::must_use_op!()]
            #[inline(always)]
            pub const fn rem(self, rhs: Self) -> Self {
                Self(self.0.rem(rhs.0))
            }

            #[doc = doc::num::div_euclid!($sign 256)]
            #[must_use = doc::must_use_op!()]
            #[inline(always)]
            pub const fn div_euclid(self, rhs: Self) -> Self {
                Self(self.0.div_euclid(rhs.0))
            }

            #[doc = doc::num::rem_euclid!($sign 256)]
            #[must_use = doc::must_use_op!()]
            #[inline(always)]
            pub const fn rem_euclid(self, rhs: Self) -> Self {
                Self(self.0.rem_euclid(rhs.0))
            }

            #[doc = doc::num::is_power_of_two!($sign 256)]
            #[must_use]
            #[inline(always)]
            pub const fn is_power_of_two(self) -> bool {
                self.0.is_power_of_two()
            }

            #[doc = doc::num::midpoint!($sign 256)]
            #[must_use = doc::must_use_op!()]
            #[inline(always)]
            pub const fn midpoint(self, rhs: Self) -> Self {
                Self(self.0.midpoint(rhs.0))
            }

            #[doc = doc::num::ilog2!($sign 256)]
            #[must_use = doc::must_use_op!()]
            #[inline(always)]
            pub const fn ilog2(self) -> ExpType {
                self.0.ilog2()
            }

            #[doc = doc::num::ilog!($sign 256)]
            #[must_use = doc::must_use_op!()]
            #[inline(always)]
            pub const fn ilog(self, base: Self) -> ExpType {
                self.0.ilog(base.0)
            }

            #[doc = doc::num::ilog10!($sign 256)]
            #[must_use = doc::must_use_op!()]
            #[inline(always)]
            pub const fn ilog10(self) -> u32 {
                self.checked_ilog10().expect(crate::utils::err_msg!(
                    "argument of integer logarithm must be positive"
                ))
            }

            #[doc = doc::num::next_multiple_of!($sign 256)]
            #[must_use = doc::must_use_op!()]
            #[inline(always)]
            pub const fn next_multiple_of(self, rhs: Self) -> Self {
                Self(self.0.next_multiple_of(rhs.0))
            }

            #[doc = doc::num::div_floor!($sign 256)]
            #[must_use = doc::must_use_op!()]
            #[inline(always)]
            pub const fn div_floor(self, rhs: Self) -> Self {
                Self(self.0.div_floor(rhs.0))
            }

            #[doc = doc::num::div_ceil!($sign 256)]
            #[must_use = doc::must_use_op!()]
            #[inline(always)]
            pub const fn div_ceil(self, rhs: Self) -> Self {
                Self(self.0.div_ceil(rhs.0))
            }

            #[doc = doc::num::bits!($sign 256)]
            #[must_use]
            #[inline(always)]
            pub const fn bits(&self) -> ExpType {
                self.0.bits()
            }

            #[doc = doc::num::bit!($sign 256)]
            #[must_use]
            #[inline(always)]
            pub const fn bit(&self, b: ExpType) -> bool {
                self.0.bit(b)
            }
        }
    };
}

pub(crate) use num_impl;