mod test;
use core::ops::{
Add,
AddAssign,
BitAnd,
BitAndAssign,
BitOr,
BitOrAssign,
BitXor,
BitXorAssign,
Div,
DivAssign,
Mul,
MulAssign,
Not,
Rem,
RemAssign,
Shl,
ShlAssign,
Shr,
ShrAssign,
Sub,
SubAssign,
};
use multitype::{Signed, Unsigned};
pub unsafe trait Integral
where
Self:
Add<Output = Self>
+ AddAssign
+ BitAnd<Output = Self>
+ BitAndAssign
+ BitOr<Output = Self>
+ BitOrAssign
+ BitXor<Output = Self>
+ BitXorAssign
+ Copy
+ Div<Output = Self>
+ DivAssign
+ Mul<Output = Self>
+ MulAssign
+ Not<Output = Self>
+ Ord
+ Rem<Output = Self>
+ RemAssign
+ Shl<Output = Self>
+ ShlAssign
+ Shr<Output = Self>
+ ShrAssign
+ Sub<Output = Self>
+ SubAssign,
{
type Signed: Signed<Unsigned = Self::Unsigned>;
type Unsigned: Unsigned<Signed = Self::Signed>;
const BITS: u32;
const MAX: Self;
const MIN: Self;
#[must_use]
fn abs_diff(self, rhs: Self) -> Self::Unsigned;
#[must_use]
fn checked_add(self, rhs: Self) -> Option<Self>;
#[must_use]
fn checked_div(self, rhs: Self) -> Option<Self>;
#[must_use]
fn checked_div_euclid(self, rhs: Self) -> Option<Self>;
#[must_use]
fn checked_ilog(self, rhs: Self) -> Option<u32>;
#[must_use]
fn checked_ilog10(self) -> Option<u32>;
#[must_use]
fn checked_ilog2(self) -> Option<u32>;
#[must_use]
fn checked_mul(self, rhs: Self) -> Option<Self>;
#[must_use]
fn checked_neg(self) -> Option<Self>;
#[must_use]
fn checked_pow(self, rhs: u32) -> Option<Self>;
#[must_use]
fn checked_rem(self, rhs: Self) -> Option<Self>;
#[must_use]
fn checked_rem_euclid(self, rhs: Self) -> Option<Self>;
#[must_use]
fn checked_shl(self, rhs: u32) -> Option<Self>;
#[must_use]
fn checked_shr(self, rhs: u32) -> Option<Self>;
#[must_use]
fn checked_sub(self, rhs: Self) -> Option<Self>;
#[must_use]
fn count_ones(self) -> u32;
#[must_use]
fn count_zeros(self) -> u32;
#[must_use]
fn div_euclid(self, rhs: Self) -> Self;
#[must_use]
fn from_be(value: Self) -> Self;
#[must_use]
fn from_le(value: Self) -> Self;
#[must_use]
fn highest_one(self) -> Option<u32>;
#[must_use]
fn ilog(self, rhs: Self) -> u32;
#[must_use]
fn ilog10(self) -> u32;
#[must_use]
fn ilog2(self) -> u32;
#[must_use]
fn isolate_highest_one(self) -> Self;
#[must_use]
fn isolate_lowest_one(self) -> Self;
#[must_use]
fn isqrt(self) -> Self;
#[must_use]
fn leading_ones(self) -> u32;
#[must_use]
fn leading_zeros(self) -> u32;
#[must_use]
fn lowest_one(self) -> Option<u32>;
#[must_use]
fn midpoint(self, rhs: Self) -> Self;
#[must_use]
fn overflowing_add(self, rhs: Self) -> (Self, bool);
#[must_use]
fn overflowing_div(self, rhs: Self) -> (Self, bool);
#[must_use]
fn overflowing_div_euclid(self, rhs: Self) -> (Self, bool);
#[must_use]
fn overflowing_mul(self, rhs: Self) -> (Self, bool);
#[must_use]
fn overflowing_neg(self) -> (Self, bool);
#[must_use]
fn overflowing_pow(self, rhs: u32) -> (Self, bool);
#[must_use]
fn overflowing_rem(self, rhs: Self) -> (Self, bool);
#[must_use]
fn overflowing_rem_euclid(self, rhs: Self) -> (Self, bool);
#[must_use]
fn overflowing_shl(self, rhs: u32) -> (Self, bool);
#[must_use]
fn overflowing_shr(self, rhs: u32) -> (Self, bool);
#[must_use]
fn overflowing_sub(self, rhs: Self) -> (Self, bool);
#[must_use]
fn pow(self, rhs: u32) -> Self;
#[must_use]
fn rem_euclid(self, rhs: Self) -> Self;
#[must_use]
fn reverse_bits(self) -> Self;
#[must_use]
fn rotate_left(self, rhs: u32) -> Self;
#[must_use]
fn rotate_right(self, rhs: u32) -> Self;
#[must_use]
fn saturating_add(self, rhs: Self) -> Self;
#[must_use]
fn saturating_div(self, rhs: Self) -> Self;
#[must_use]
fn saturating_mul(self, rhs: Self) -> Self;
#[must_use]
fn saturating_pow(self, rhs: u32) -> Self;
#[must_use]
fn saturating_sub(self, rhs: Self) -> Self;
#[must_use]
fn strict_add(self, rhs: Self) -> Self;
#[must_use]
fn strict_div(self, rhs: Self) -> Self;
#[must_use]
fn strict_div_euclid(self, rhs: Self) -> Self;
#[must_use]
fn strict_mul(self, rhs: Self) -> Self;
#[must_use]
fn strict_neg(self) -> Self;
#[must_use]
fn strict_pow(self, rhs: u32) -> Self;
#[must_use]
fn strict_rem(self, rhs: Self) -> Self;
#[must_use]
fn strict_rem_euclid(self, rhs: Self) -> Self;
#[must_use]
fn strict_shl(self, rhs: u32) -> Self;
#[must_use]
fn strict_shr(self, rhs: u32) -> Self;
#[must_use]
fn strict_sub(self, rhs: Self) -> Self;
#[must_use]
fn swap_bytes(self) -> Self;
#[must_use]
fn to_be(self) -> Self;
#[must_use]
fn to_le(self) -> Self;
#[must_use]
fn trailing_ones(self) -> u32;
#[must_use]
fn trailing_zeros(self) -> u32;
#[must_use]
fn unbounded_shl(self, rhs: u32) -> Self;
#[must_use]
fn unbounded_shr(self, rhs: u32) -> Self;
#[expect(clippy::missing_safety_doc)]
#[must_use]
unsafe fn unchecked_add(self, rhs: Self) -> Self;
#[expect(clippy::missing_safety_doc)]
#[must_use]
unsafe fn unchecked_mul(self, rhs: Self) -> Self;
#[expect(clippy::missing_safety_doc)]
#[must_use]
unsafe fn unchecked_shl(self, rhs: u32) -> Self;
#[expect(clippy::missing_safety_doc)]
#[must_use]
unsafe fn unchecked_shr(self, rhs: u32) -> Self;
#[expect(clippy::missing_safety_doc)]
#[must_use]
unsafe fn unchecked_sub(self, rhs: Self) -> Self;
#[must_use]
fn wrapping_add(self, rhs: Self) -> Self;
#[must_use]
fn wrapping_div(self, rhs: Self) -> Self;
#[must_use]
fn wrapping_div_euclid(self, rhs: Self) -> Self;
#[must_use]
fn wrapping_mul(self, rhs: Self) -> Self;
#[must_use]
fn wrapping_neg(self) -> Self;
#[must_use]
fn wrapping_pow(self, rhs: u32) -> Self;
#[must_use]
fn wrapping_rem(self, rhs: Self) -> Self;
#[must_use]
fn wrapping_rem_euclid(self, rhs: Self) -> Self;
#[must_use]
fn wrapping_shl(self, rhs: u32) -> Self;
#[must_use]
fn wrapping_shr(self, rhs: u32) -> Self;
#[must_use]
fn wrapping_sub(self, rhs: Self) -> Self;
}