Something went wrong. Try again.
Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
Something went wrong. Try again.
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980// SPDX-License-Identifier: GPL-2.0
//! Additional numerical features for the kernel.
use core::ops;
pub mod bounded;pub use bounded::*;
/// Designates unsigned primitive types.pub enum Unsigned {}
/// Designates signed primitive types.pub enum Signed {}
/// Describes core properties of integer types.pub trait Integer: Sized + Copy + Clone + PartialEq + Eq + PartialOrd + Ord + ops::Add<Output = Self> + ops::AddAssign + ops::Sub<Output = Self> + ops::SubAssign + ops::Mul<Output = Self> + ops::MulAssign + ops::Div<Output = Self> + ops::DivAssign + ops::Rem<Output = Self> + ops::RemAssign + ops::BitAnd<Output = Self> + ops::BitAndAssign + ops::BitOr<Output = Self> + ops::BitOrAssign + ops::BitXor<Output = Self> + ops::BitXorAssign + ops::Shl<u32, Output = Self> + ops::ShlAssign<u32> + ops::Shr<u32, Output = Self> + ops::ShrAssign<u32> + ops::Not{ /// Whether this type is [`Signed`] or [`Unsigned`]. type Signedness;
/// Number of bits used for value representation. const BITS: u32;}
macro_rules! impl_integer { ($($type:ty: $signedness:ty), *) => { $( impl Integer for $type { type Signedness = $signedness;
const BITS: u32 = <$type>::BITS; } )* };}
impl_integer!( u8: Unsigned, u16: Unsigned, u32: Unsigned, u64: Unsigned, u128: Unsigned, usize: Unsigned, i8: Signed, i16: Signed, i32: Signed, i64: Signed, i128: Signed, isize: Signed);