pub trait IntegerExt:
'static
+ Eq
+ Ord
+ Copy
+ Default
+ Binary
+ Debug
+ Display
+ LowerHex
+ Octal
+ UpperHex
+ Hash
+ Add<Self, Output = Self>
+ AddAssign<Self>
+ BitAnd<Self, Output = Self>
+ BitAndAssign<Self>
+ BitOr<Self, Output = Self>
+ BitOrAssign<Self>
+ BitXor<Self, Output = Self>
+ BitXorAssign<Self>
+ Div<Self, Output = Self>
+ DivAssign<Self>
+ Mul<Self, Output = Self>
+ MulAssign<Self>
+ Not<Output = Self>
+ Rem<Self, Output = Self>
+ RemAssign<Self>
+ Shl<Self, Output = Self>
+ ShlAssign<Self>
+ Shr<Self, Output = Self>
+ ShrAssign<Self>
+ Sub<Self, Output = Self>
+ SubAssign<Self>
+ Send
+ Sync {
type Unsigned: IntegerExt;
const MIN: Self;
const MAX: Self;
const ZERO: Self;
const ONE: Self;
// Required methods
fn from_u8(n: u8) -> Self;
fn from_i8(n: i8) -> Self;
fn power(self, n: u32) -> Self;
fn abs_unsigned(self) -> Self::Unsigned;
fn number_of_digits(self) -> u32;
// Provided methods
fn get_sign(self) -> Sign { ... }
fn safe_div(self, other: Self) -> Self { ... }
}
integers
only.Expand description
Extension trait for built-in integers.
Required Associated Constants§
Required Associated Types§
Sourcetype Unsigned: IntegerExt
type Unsigned: IntegerExt
The unsigned version of this integer type.
Required Methods§
Sourcefn from_u8(n: u8) -> Self
fn from_u8(n: u8) -> Self
Converts from a u8
to Self
.
if Self
is an i8
this method returns 127
for n > 127
.
§Example
use core_extensions::IntegerExt;
assert_eq!(u8::from_u8(0 ), 0);
assert_eq!(u8::from_u8(255), 255);
assert_eq!(i8::from_u8(0 ), 0);
assert_eq!(i8::from_u8(255), 127);
assert_eq!(u16::from_u8(0 ), 0);
assert_eq!(u16::from_u8(255), 255);
assert_eq!(i16::from_u8(0 ), 0);
assert_eq!(i16::from_u8(255), 255);
Sourcefn from_i8(n: i8) -> Self
fn from_i8(n: i8) -> Self
Converts from an i8
to Self
.
if Self
is an unsigned integer type,
this method returns 0
for n < 0
.
§Example
use core_extensions::IntegerExt;
assert_eq!(u8::from_i8(-128), 0);
assert_eq!(u8::from_i8(0 ), 0);
assert_eq!(u8::from_i8(1 ), 1);
assert_eq!(u8::from_i8(127 ), 127);
assert_eq!(i8::from_i8(-128), -128);
assert_eq!(i8::from_i8(0 ), 0 );
assert_eq!(i8::from_i8(127 ), 127 );
assert_eq!(u16::from_i8(-128), 0);
assert_eq!(u16::from_i8(0 ), 0);
assert_eq!(u16::from_i8(1 ), 1);
assert_eq!(u16::from_i8(127 ), 127);
assert_eq!(i16::from_i8(-128), -128);
assert_eq!(i16::from_i8(0 ), 0 );
assert_eq!(i16::from_i8(127 ), 127 );
Sourcefn power(self, n: u32) -> Self
fn power(self, n: u32) -> Self
Raises self
to the n
th power.
This delegates to the inherent pow
method.
Sourcefn abs_unsigned(self) -> Self::Unsigned
fn abs_unsigned(self) -> Self::Unsigned
Returns the absolute value of this integer as the equivalent unsigned integer type.
This method allows getting the absolute value for the minimum signed integer value.
§Example
use core_extensions::IntegerExt;
assert_eq!(0u8.abs_unsigned(), 0u8);
assert_eq!(0i8.abs_unsigned(), 0u8);
assert_eq!(127i8.abs_unsigned(), 127u8);
assert_eq!((-1i8).abs_unsigned(), 1u8);
assert_eq!((-16i8).abs_unsigned(), 16u8);
assert_eq!((-128i8).abs_unsigned(), 128u8);
Sourcefn number_of_digits(self) -> u32
fn number_of_digits(self) -> u32
Returns the number of decimal digits of self
.
This counts the -
sign as a digit.
§Example
use core_extensions::IntegerExt;
assert_eq!(100.number_of_digits(), 3);
assert_eq!(10.number_of_digits(), 2);
assert_eq!(1.number_of_digits(), 1);
assert_eq!(0.number_of_digits(), 1);
assert_eq!((-1).number_of_digits(), 2);
assert_eq!((-100).number_of_digits(), 4);
Provided Methods§
Sourcefn get_sign(self) -> Sign
fn get_sign(self) -> Sign
Gets the sign of this integer.
§Example
use core_extensions::integers::{IntegerExt, Sign};
assert_eq!(0u8.get_sign(), Sign::Positive);
assert_eq!(0i8.get_sign(), Sign::Positive);
assert_eq!(127i8.get_sign(), Sign::Positive);
assert_eq!((-1i8).get_sign(), Sign::Negative);
assert_eq!((-128i8).get_sign(), Sign::Negative);
Sourcefn safe_div(self, other: Self) -> Self
fn safe_div(self, other: Self) -> Self
Non-panicking division which returns self
when other == 0
.
§Example
use core_extensions::IntegerExt;
assert_eq!(60.safe_div(12), 5);
assert_eq!(60.safe_div(30), 2);
assert_eq!(60.safe_div(31), 1);
assert_eq!(60.safe_div(0), 60);
assert_eq!(13.safe_div(0), 13);
Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.