Skip to main content

Phase

Struct Phase 

Source
pub struct Phase(pub i32);
Expand description

A metadata field for EnderDragon.

Tuple Fields§

§0: i32

Methods from Deref<Target = i32>§

1.0.0 · Source

pub fn count_ones(self) -> u32

Returns the number of ones in the binary representation of self.

§Examples
let n = 0b100_0000i32;

assert_eq!(n.count_ones(), 1);
1.0.0 · Source

pub fn count_zeros(self) -> u32

Returns the number of zeros in the binary representation of self.

§Examples
assert_eq!(i32::MAX.count_zeros(), 1);
1.0.0 · Source

pub fn leading_zeros(self) -> u32

Returns the number of leading zeros in the binary representation of self.

Depending on what you’re doing with the value, you might also be interested in the ilog2 function which returns a consistent number, even if the type widens.

§Examples
let n = -1i32;

assert_eq!(n.leading_zeros(), 0);
1.0.0 · Source

pub fn trailing_zeros(self) -> u32

Returns the number of trailing zeros in the binary representation of self.

§Examples
let n = -4i32;

assert_eq!(n.trailing_zeros(), 2);
1.46.0 · Source

pub fn leading_ones(self) -> u32

Returns the number of leading ones in the binary representation of self.

§Examples
let n = -1i32;

assert_eq!(n.leading_ones(), 32);
1.46.0 · Source

pub fn trailing_ones(self) -> u32

Returns the number of trailing ones in the binary representation of self.

§Examples
let n = 3i32;

assert_eq!(n.trailing_ones(), 2);
1.97.0 · Source

pub fn isolate_highest_one(self) -> i32

Returns self with only the most significant bit set, or 0 if the input is 0.

§Examples
let n: i32 = 0b_01100100;

assert_eq!(n.isolate_highest_one(), 0b_01000000);
assert_eq!(0_i32.isolate_highest_one(), 0);
1.97.0 · Source

pub fn isolate_lowest_one(self) -> i32

Returns self with only the least significant bit set, or 0 if the input is 0.

§Examples
let n: i32 = 0b_01100100;

assert_eq!(n.isolate_lowest_one(), 0b_00000100);
assert_eq!(0_i32.isolate_lowest_one(), 0);
1.97.0 · Source

pub fn highest_one(self) -> Option<u32>

Returns the index of the highest bit set to one in self, or None if self is 0.

Note that for non-negative numbers, this is equivalent to checked_ilog2.

§Examples
assert_eq!(0b0_i32.highest_one(), None);
assert_eq!(0b1_i32.highest_one(), Some(0));
assert_eq!(0b1_0000_i32.highest_one(), Some(4));
assert_eq!(0b1_1111_i32.highest_one(), Some(4));
1.97.0 · Source

pub fn lowest_one(self) -> Option<u32>

Returns the index of the lowest bit set to one in self, or None if self is 0.

§Examples
assert_eq!(0b0_i32.lowest_one(), None);
assert_eq!(0b1_i32.lowest_one(), Some(0));
assert_eq!(0b1_0000_i32.lowest_one(), Some(4));
assert_eq!(0b1_1111_i32.lowest_one(), Some(0));
1.87.0 · Source

pub fn cast_unsigned(self) -> u32

Returns the bit pattern of self reinterpreted as an unsigned integer of the same size.

This produces the same result as an as cast, but ensures that the bit-width remains the same.

§Examples
let n = -1i32;

assert_eq!(n.cast_unsigned(), u32::MAX);
Source

pub fn saturating_cast_unsigned(self) -> u32

🔬This is a nightly-only experimental API. (integer_cast_extras)

Saturating conversion of self to an unsigned integer of the same size.

Negative values are clamped to 0.

For other kinds of unsigned integer casts, see cast_unsigned, checked_cast_unsigned, or strict_cast_unsigned.

§Examples
#![feature(integer_cast_extras)]
let n = i32::MIN;

assert_eq!(n.saturating_cast_unsigned(), 0u32);
assert_eq!(64i32.saturating_cast_unsigned(), 64u32);
Source

pub fn checked_cast_unsigned(self) -> Option<u32>

🔬This is a nightly-only experimental API. (integer_cast_extras)

Checked conversion of self to an unsigned integer of the same size, returning None if self is negative.

For other kinds of unsigned integer casts, see cast_unsigned, saturating_cast_unsigned, or strict_cast_unsigned.

§Examples
#![feature(integer_cast_extras)]
let n = i32::MIN;

assert_eq!(n.checked_cast_unsigned(), None);
assert_eq!(64i32.checked_cast_unsigned(), Some(64u32));
Source

pub fn strict_cast_unsigned(self) -> u32

🔬This is a nightly-only experimental API. (integer_cast_extras)

Strict conversion of self to an unsigned integer of the same size, which panics if self is negative.

For other kinds of unsigned integer casts, see cast_unsigned, checked_cast_unsigned, or saturating_cast_unsigned.

§Examples
ⓘ
#![feature(integer_cast_extras)]
let _ = i32::MIN.strict_cast_unsigned();
1.0.0 · Source

pub fn rotate_left(self, n: u32) -> i32

Shifts the bits to the left by a specified amount, n, wrapping the truncated bits to the end of the resulting integer.

rotate_left(n) is equivalent to applying rotate_left(1) a total of n times. In particular, a rotation by the number of bits in self returns the input value unchanged.

Please note this isn’t the same operation as the << shifting operator!

§Examples
let n = 0x010000b3i32;
let m = 0x0000b301;

assert_eq!(n.rotate_left(8), m);
assert_eq!(n.rotate_left(1024), n);
1.0.0 · Source

pub fn rotate_right(self, n: u32) -> i32

Shifts the bits to the right by a specified amount, n, wrapping the truncated bits to the beginning of the resulting integer.

rotate_right(n) is equivalent to applying rotate_right(1) a total of n times. In particular, a rotation by the number of bits in self returns the input value unchanged.

Please note this isn’t the same operation as the >> shifting operator!

§Examples
let n = 0x0000b301i32;
let m = 0x010000b3;

assert_eq!(n.rotate_right(8), m);
assert_eq!(n.rotate_right(1024), n);
1.0.0 · Source

pub fn swap_bytes(self) -> i32

Reverses the byte order of the integer.

§Examples
let n = 0x12345678i32;

let m = n.swap_bytes();

assert_eq!(m, 0x78563412);
1.37.0 · Source

pub fn reverse_bits(self) -> i32

Reverses the order of bits in the integer. The least significant bit becomes the most significant bit, second least-significant bit becomes second most-significant bit, etc.

§Examples
let n = 0x12345678i32;
let m = n.reverse_bits();

assert_eq!(m, 0x1e6a2c48);
assert_eq!(0, 0i32.reverse_bits());
1.0.0 · Source

pub fn to_be(self) -> i32

Swaps bytes of self on little endian targets.

On big endian this is a no-op.

The returned value has the same type as self, and will be interpreted as (a potentially different) value of a native-endian i32.

See to_be_bytes() for a type-safe alternative.

§Examples
let n = 0x1Ai32;

if cfg!(target_endian = "big") {
    assert_eq!(n.to_be(), n)
} else {
    assert_eq!(n.to_be(), n.swap_bytes())
}
1.0.0 · Source

pub fn to_le(self) -> i32

Swaps bytes of self on big endian targets.

On little endian this is a no-op.

The returned value has the same type as self, and will be interpreted as (a potentially different) value of a native-endian i32.

See to_le_bytes() for a type-safe alternative.

§Examples
let n = 0x1Ai32;

if cfg!(target_endian = "little") {
    assert_eq!(n.to_le(), n)
} else {
    assert_eq!(n.to_le(), n.swap_bytes())
}
1.0.0 · Source

pub fn checked_add(self, rhs: i32) -> Option<i32>

Checked integer addition. Computes self + rhs, returning None if overflow occurred.

§Examples
assert_eq!((i32::MAX - 2).checked_add(1), Some(i32::MAX - 1));
assert_eq!((i32::MAX - 2).checked_add(3), None);
1.91.0 · Source

pub fn strict_add(self, rhs: i32) -> i32

Strict integer addition. Computes self + rhs, panicking if overflow occurred.

§Panics
§Overflow behavior

This function will always panic on overflow, regardless of whether overflow checks are enabled.

§Examples
assert_eq!((i32::MAX - 2).strict_add(1), i32::MAX - 1);

The following panics because of overflow:

ⓘ
let _ = (i32::MAX - 2).strict_add(3);
1.79.0 · Source

pub unsafe fn unchecked_add(self, rhs: i32) -> i32

Unchecked integer addition. Computes self + rhs, assuming overflow cannot occur.

Calling x.unchecked_add(y) is semantically equivalent to calling x.checked_add(y).unwrap_unchecked().

If you’re just trying to avoid the panic in debug mode, then do not use this. Instead, you’re looking for wrapping_add.

§Safety

This results in undefined behavior when self + rhs > i32::MAX or self + rhs < i32::MIN, i.e. when checked_add would return None.

1.66.0 · Source

pub fn checked_add_unsigned(self, rhs: u32) -> Option<i32>

Checked addition with an unsigned integer. Computes self + rhs, returning None if overflow occurred.

§Examples
assert_eq!(1i32.checked_add_unsigned(2), Some(3));
assert_eq!((i32::MAX - 2).checked_add_unsigned(3), None);
1.91.0 · Source

pub fn strict_add_unsigned(self, rhs: u32) -> i32

Strict addition with an unsigned integer. Computes self + rhs, panicking if overflow occurred.

§Panics
§Overflow behavior

This function will always panic on overflow, regardless of whether overflow checks are enabled.

§Examples
assert_eq!(1i32.strict_add_unsigned(2), 3);

The following panics because of overflow:

ⓘ
let _ = (i32::MAX - 2).strict_add_unsigned(3);
1.0.0 · Source

pub fn checked_sub(self, rhs: i32) -> Option<i32>

Checked integer subtraction. Computes self - rhs, returning None if overflow occurred.

§Examples
assert_eq!((i32::MIN + 2).checked_sub(1), Some(i32::MIN + 1));
assert_eq!((i32::MIN + 2).checked_sub(3), None);
1.91.0 · Source

pub fn strict_sub(self, rhs: i32) -> i32

Strict integer subtraction. Computes self - rhs, panicking if overflow occurred.

§Panics
§Overflow behavior

This function will always panic on overflow, regardless of whether overflow checks are enabled.

§Examples
assert_eq!((i32::MIN + 2).strict_sub(1), i32::MIN + 1);

The following panics because of overflow:

ⓘ
let _ = (i32::MIN + 2).strict_sub(3);
1.79.0 · Source

pub unsafe fn unchecked_sub(self, rhs: i32) -> i32

Unchecked integer subtraction. Computes self - rhs, assuming overflow cannot occur.

Calling x.unchecked_sub(y) is semantically equivalent to calling x.checked_sub(y).unwrap_unchecked().

If you’re just trying to avoid the panic in debug mode, then do not use this. Instead, you’re looking for wrapping_sub.

§Safety

This results in undefined behavior when self - rhs > i32::MAX or self - rhs < i32::MIN, i.e. when checked_sub would return None.

1.66.0 · Source

pub fn checked_sub_unsigned(self, rhs: u32) -> Option<i32>

Checked subtraction with an unsigned integer. Computes self - rhs, returning None if overflow occurred.

§Examples
assert_eq!(1i32.checked_sub_unsigned(2), Some(-1));
assert_eq!((i32::MIN + 2).checked_sub_unsigned(3), None);
1.91.0 · Source

pub fn strict_sub_unsigned(self, rhs: u32) -> i32

Strict subtraction with an unsigned integer. Computes self - rhs, panicking if overflow occurred.

§Panics
§Overflow behavior

This function will always panic on overflow, regardless of whether overflow checks are enabled.

§Examples
assert_eq!(1i32.strict_sub_unsigned(2), -1);

The following panics because of overflow:

ⓘ
let _ = (i32::MIN + 2).strict_sub_unsigned(3);
1.0.0 · Source

pub fn checked_mul(self, rhs: i32) -> Option<i32>

Checked integer multiplication. Computes self * rhs, returning None if overflow occurred.

§Examples
assert_eq!(i32::MAX.checked_mul(1), Some(i32::MAX));
assert_eq!(i32::MAX.checked_mul(2), None);
1.91.0 · Source

pub fn strict_mul(self, rhs: i32) -> i32

Strict integer multiplication. Computes self * rhs, panicking if overflow occurred.

§Panics
§Overflow behavior

This function will always panic on overflow, regardless of whether overflow checks are enabled.

§Examples
assert_eq!(i32::MAX.strict_mul(1), i32::MAX);

The following panics because of overflow:

ⓘ
let _ = i32::MAX.strict_mul(2);
1.79.0 · Source

pub unsafe fn unchecked_mul(self, rhs: i32) -> i32

Unchecked integer multiplication. Computes self * rhs, assuming overflow cannot occur.

Calling x.unchecked_mul(y) is semantically equivalent to calling x.checked_mul(y).unwrap_unchecked().

If you’re just trying to avoid the panic in debug mode, then do not use this. Instead, you’re looking for wrapping_mul.

§Safety

This results in undefined behavior when self * rhs > i32::MAX or self * rhs < i32::MIN, i.e. when checked_mul would return None.

1.0.0 · Source

pub fn checked_div(self, rhs: i32) -> Option<i32>

Checked integer division. Computes self / rhs, returning None if rhs == 0 or the division results in overflow.

§Examples
assert_eq!((i32::MIN + 1).checked_div(-1), Some(2147483647));
assert_eq!(i32::MIN.checked_div(-1), None);
assert_eq!((1i32).checked_div(0), None);
1.91.0 · Source

pub fn strict_div(self, rhs: i32) -> i32

Strict integer division. Computes self / rhs, panicking if overflow occurred.

§Panics

This function will panic if rhs is zero.

§Overflow behavior

This function will always panic on overflow, regardless of whether overflow checks are enabled.

The only case where such an overflow can occur is when one divides MIN / -1 on a signed type (where MIN is the negative minimal value for the type); the result of this is -MIN, a positive value that is too large to represent in the type.

Note that this is equivalent to normal division: MIN / -1 will also panic both in debug and release builds.

§Examples
assert_eq!((i32::MIN + 1).strict_div(-1), 2147483647);

The following panics because of overflow:

ⓘ
let _ = i32::MIN.strict_div(-1);

The following panics because of division by zero:

ⓘ
let _ = (1i32).strict_div(0);
1.38.0 · Source

pub fn checked_div_euclid(self, rhs: i32) -> Option<i32>

Checked Euclidean division. Computes self.div_euclid(rhs), returning None if rhs == 0 or the division results in overflow.

§Examples
assert_eq!((i32::MIN + 1).checked_div_euclid(-1), Some(2147483647));
assert_eq!(i32::MIN.checked_div_euclid(-1), None);
assert_eq!((1i32).checked_div_euclid(0), None);
1.91.0 · Source

pub fn strict_div_euclid(self, rhs: i32) -> i32

Strict Euclidean division. Computes self.div_euclid(rhs), panicking if overflow occurred.

§Panics

This function will panic if rhs is zero.

§Overflow behavior

This function will always panic on overflow, regardless of whether overflow checks are enabled.

The only case where such an overflow can occur is when one divides MIN / -1 on a signed type (where MIN is the negative minimal value for the type); the result of this is -MIN, a positive value that is too large to represent in the type.

Note that this is equivalent to div_euclid: MIN.div_euclid(-1) will also panic both in debug and release builds.

§Examples
assert_eq!((i32::MIN + 1).strict_div_euclid(-1), 2147483647);

The following panics because of overflow:

ⓘ
let _ = i32::MIN.strict_div_euclid(-1);

The following panics because of division by zero:

ⓘ
let _ = (1i32).strict_div_euclid(0);
Source

pub fn checked_div_exact(self, rhs: i32) -> Option<i32>

🔬This is a nightly-only experimental API. (exact_div)

Checked integer division without remainder. Computes self / rhs, returning None if rhs == 0, the division results in overflow, or self % rhs != 0.

§Examples
#![feature(exact_div)]
assert_eq!((i32::MIN + 1).checked_div_exact(-1), Some(2147483647));
assert_eq!((-5i32).checked_div_exact(2), None);
assert_eq!(i32::MIN.checked_div_exact(-1), None);
assert_eq!((1i32).checked_div_exact(0), None);
Source

pub fn div_exact(self, rhs: i32) -> Option<i32>

🔬This is a nightly-only experimental API. (exact_div)

Integer division without remainder. Computes self / rhs, returning None if self % rhs != 0.

§Panics

This function will panic if rhs == 0.

§Overflow behavior

On overflow, this function will panic if overflow checks are enabled (default in debug mode) and wrap if overflow checks are disabled (default in release mode).

§Examples
#![feature(exact_div)]
assert_eq!(64i32.div_exact(2), Some(32));
assert_eq!(64i32.div_exact(32), Some(2));
assert_eq!((i32::MIN + 1).div_exact(-1), Some(2147483647));
assert_eq!(65i32.div_exact(2), None);
ⓘ
#![feature(exact_div)]
let _ = 64i32.div_exact(0);
ⓘ
#![feature(exact_div)]
let _ = i32::MIN.div_exact(-1);
Source

pub unsafe fn unchecked_div_exact(self, rhs: i32) -> i32

🔬This is a nightly-only experimental API. (exact_div)

Unchecked integer division without remainder. Computes self / rhs.

§Safety

This results in undefined behavior when rhs == 0, self % rhs != 0, or self == i32::MIN && rhs == -1, i.e. when checked_div_exact would return None.

1.7.0 · Source

pub fn checked_rem(self, rhs: i32) -> Option<i32>

Checked integer remainder. Computes self % rhs, returning None if rhs == 0 or the division results in overflow.

§Examples
assert_eq!(5i32.checked_rem(2), Some(1));
assert_eq!(5i32.checked_rem(0), None);
assert_eq!(i32::MIN.checked_rem(-1), None);
1.91.0 · Source

pub fn strict_rem(self, rhs: i32) -> i32

Strict integer remainder. Computes self % rhs, panicking if the division results in overflow.

§Panics

This function will panic if rhs is zero.

§Overflow behavior

This function will always panic on overflow, regardless of whether overflow checks are enabled.

The only case where such an overflow can occur is x % y for MIN / -1 on a signed type (where MIN is the negative minimal value), which is invalid due to implementation artifacts.

§Examples
assert_eq!(5i32.strict_rem(2), 1);

The following panics because of division by zero:

ⓘ
let _ = 5i32.strict_rem(0);

The following panics because of overflow:

ⓘ
let _ = i32::MIN.strict_rem(-1);
1.38.0 · Source

pub fn checked_rem_euclid(self, rhs: i32) -> Option<i32>

Checked Euclidean remainder. Computes self.rem_euclid(rhs), returning None if rhs == 0 or the division results in overflow.

§Examples
assert_eq!(5i32.checked_rem_euclid(2), Some(1));
assert_eq!(5i32.checked_rem_euclid(0), None);
assert_eq!(i32::MIN.checked_rem_euclid(-1), None);
1.91.0 · Source

pub fn strict_rem_euclid(self, rhs: i32) -> i32

Strict Euclidean remainder. Computes self.rem_euclid(rhs), panicking if the division results in overflow.

§Panics

This function will panic if rhs is zero.

§Overflow behavior

This function will always panic on overflow, regardless of whether overflow checks are enabled.

The only case where such an overflow can occur is x % y for MIN / -1 on a signed type (where MIN is the negative minimal value), which is invalid due to implementation artifacts.

§Examples
assert_eq!(5i32.strict_rem_euclid(2), 1);

The following panics because of division by zero:

ⓘ
let _ = 5i32.strict_rem_euclid(0);

The following panics because of overflow:

ⓘ
let _ = i32::MIN.strict_rem_euclid(-1);
1.7.0 · Source

pub fn checked_neg(self) -> Option<i32>

Checked negation. Computes -self, returning None if self == MIN.

§Examples
assert_eq!(5i32.checked_neg(), Some(-5));
assert_eq!(i32::MIN.checked_neg(), None);
1.93.0 · Source

pub unsafe fn unchecked_neg(self) -> i32

Unchecked negation. Computes -self, assuming overflow cannot occur.

§Safety

This results in undefined behavior when self == i32::MIN, i.e. when checked_neg would return None.

1.91.0 · Source

pub fn strict_neg(self) -> i32

Strict negation. Computes -self, panicking if self == MIN.

§Panics
§Overflow behavior

This function will always panic on overflow, regardless of whether overflow checks are enabled.

§Examples
assert_eq!(5i32.strict_neg(), -5);

The following panics because of overflow:

ⓘ
let _ = i32::MIN.strict_neg();
1.7.0 · Source

pub fn checked_shl(self, rhs: u32) -> Option<i32>

Checked shift left. Computes self << rhs, returning None if rhs is larger than or equal to the number of bits in self.

§Examples
assert_eq!(0x1i32.checked_shl(4), Some(0x10));
assert_eq!(0x1i32.checked_shl(129), None);
assert_eq!(0x10i32.checked_shl(31), Some(0));
1.91.0 · Source

pub fn strict_shl(self, rhs: u32) -> i32

Strict shift left. Computes self << rhs, panicking if rhs is larger than or equal to the number of bits in self.

§Panics
§Overflow behavior

This function will always panic on overflow, regardless of whether overflow checks are enabled.

§Examples
assert_eq!(0x1i32.strict_shl(4), 0x10);

The following panics because of overflow:

ⓘ
let _ = 0x1i32.strict_shl(129);
1.93.0 · Source

pub unsafe fn unchecked_shl(self, rhs: u32) -> i32

Unchecked shift left. Computes self << rhs, assuming that rhs is less than the number of bits in self.

§Safety

This results in undefined behavior if rhs is larger than or equal to the number of bits in self, i.e. when checked_shl would return None.

1.87.0 · Source

pub fn unbounded_shl(self, rhs: u32) -> i32

Unbounded shift left. Computes self << rhs, without bounding the value of rhs.

If rhs is larger or equal to the number of bits in self, the entire value is shifted out, and 0 is returned.

§Examples
assert_eq!(0x1_i32.unbounded_shl(4), 0x10);
assert_eq!(0x1_i32.unbounded_shl(129), 0);
assert_eq!(0b101_i32.unbounded_shl(0), 0b101);
assert_eq!(0b101_i32.unbounded_shl(1), 0b1010);
assert_eq!(0b101_i32.unbounded_shl(2), 0b10100);
assert_eq!(42_i32.unbounded_shl(32), 0);
assert_eq!(42_i32.unbounded_shl(1).unbounded_shl(31), 0);
assert_eq!((-13_i32).unbounded_shl(32), 0);
assert_eq!((-13_i32).unbounded_shl(1).unbounded_shl(31), 0);
Source

pub fn shl_exact(self, rhs: u32) -> Option<i32>

🔬This is a nightly-only experimental API. (exact_bitshifts)

Exact shift left. Computes self << rhs as long as it can be reversed losslessly.

Returns None if any bits that would be shifted out differ from the resulting sign bit or if rhs >= i32::BITS. Otherwise, returns Some(self << rhs).

§Examples
#![feature(exact_bitshifts)]

assert_eq!(0x1i32.shl_exact(4), Some(0x10));
assert_eq!(0x1i32.shl_exact(i32::BITS - 2), Some(1 << i32::BITS - 2));
assert_eq!(0x1i32.shl_exact(i32::BITS - 1), None);
assert_eq!((-0x2i32).shl_exact(i32::BITS - 2), Some(-0x2 << i32::BITS - 2));
assert_eq!((-0x2i32).shl_exact(i32::BITS - 1), None);
Source

pub unsafe fn unchecked_shl_exact(self, rhs: u32) -> i32

🔬This is a nightly-only experimental API. (exact_bitshifts)

Unchecked exact shift left. Computes self << rhs, assuming the operation can be losslessly reversed and rhs cannot be larger than i32::BITS.

§Safety

This results in undefined behavior when rhs >= self.leading_zeros() && rhs >= self.leading_ones() i.e. when i32::shl_exact would return None.

1.7.0 · Source

pub fn checked_shr(self, rhs: u32) -> Option<i32>

Checked shift right. Computes self >> rhs, returning None if rhs is larger than or equal to the number of bits in self.

§Examples
assert_eq!(0x10i32.checked_shr(4), Some(0x1));
assert_eq!(0x10i32.checked_shr(128), None);
1.91.0 · Source

pub fn strict_shr(self, rhs: u32) -> i32

Strict shift right. Computes self >> rhs, panicking if rhs is larger than or equal to the number of bits in self.

§Panics
§Overflow behavior

This function will always panic on overflow, regardless of whether overflow checks are enabled.

§Examples
assert_eq!(0x10i32.strict_shr(4), 0x1);

The following panics because of overflow:

ⓘ
let _ = 0x10i32.strict_shr(128);
1.93.0 · Source

pub unsafe fn unchecked_shr(self, rhs: u32) -> i32

Unchecked shift right. Computes self >> rhs, assuming that rhs is less than the number of bits in self.

§Safety

This results in undefined behavior if rhs is larger than or equal to the number of bits in self, i.e. when checked_shr would return None.

1.87.0 · Source

pub fn unbounded_shr(self, rhs: u32) -> i32

Unbounded shift right. Computes self >> rhs, without bounding the value of rhs.

If rhs is larger or equal to the number of bits in self, the entire value is shifted out, which yields 0 for a positive number, and -1 for a negative number.

§Examples
assert_eq!(0x10_i32.unbounded_shr(4), 0x1);
assert_eq!(0x10_i32.unbounded_shr(129), 0);
assert_eq!(i32::MIN.unbounded_shr(129), -1);
assert_eq!(0b1010_i32.unbounded_shr(0), 0b1010);
assert_eq!(0b1010_i32.unbounded_shr(1), 0b101);
assert_eq!(0b1010_i32.unbounded_shr(2), 0b10);
assert_eq!(42_i32.unbounded_shr(32), 0);
assert_eq!(42_i32.unbounded_shr(1).unbounded_shr(31), 0);
assert_eq!((-13_i32).unbounded_shr(32), -1);
assert_eq!((-13_i32).unbounded_shr(1).unbounded_shr(31), -1);
Source

pub fn shr_exact(self, rhs: u32) -> Option<i32>

🔬This is a nightly-only experimental API. (exact_bitshifts)

Exact shift right. Computes self >> rhs as long as it can be reversed losslessly.

Returns None if any non-zero bits would be shifted out or if rhs >= i32::BITS. Otherwise, returns Some(self >> rhs).

§Examples
#![feature(exact_bitshifts)]

assert_eq!(0x10i32.shr_exact(4), Some(0x1));
assert_eq!(0x10i32.shr_exact(5), None);
Source

pub unsafe fn unchecked_shr_exact(self, rhs: u32) -> i32

🔬This is a nightly-only experimental API. (exact_bitshifts)

Unchecked exact shift right. Computes self >> rhs, assuming the operation can be losslessly reversed and rhs cannot be larger than i32::BITS.

§Safety

This results in undefined behavior when rhs > self.trailing_zeros() || rhs >= i32::BITS i.e. when i32::shr_exact would return None.

1.13.0 · Source

pub fn checked_abs(self) -> Option<i32>

Checked absolute value. Computes self.abs(), returning None if self == MIN.

§Examples
assert_eq!((-5i32).checked_abs(), Some(5));
assert_eq!(i32::MIN.checked_abs(), None);
1.91.0 · Source

pub fn strict_abs(self) -> i32

Strict absolute value. Computes self.abs(), panicking if self == MIN.

§Panics
§Overflow behavior

This function will always panic on overflow, regardless of whether overflow checks are enabled.

§Examples
assert_eq!((-5i32).strict_abs(), 5);

The following panics because of overflow:

ⓘ
let _ = i32::MIN.strict_abs();
1.34.0 · Source

pub fn checked_pow(self, exp: u32) -> Option<i32>

Checked exponentiation. Computes self.pow(exp), returning None if overflow occurred.

§Examples
assert_eq!(8i32.checked_pow(2), Some(64));
assert_eq!(0_i32.checked_pow(0), Some(1));
assert_eq!(i32::MAX.checked_pow(2), None);
1.91.0 · Source

pub fn strict_pow(self, exp: u32) -> i32

Strict exponentiation. Computes self.pow(exp), panicking if overflow occurred.

§Panics
§Overflow behavior

This function will always panic on overflow, regardless of whether overflow checks are enabled.

§Examples
assert_eq!(8i32.strict_pow(2), 64);
assert_eq!(0_i32.strict_pow(0), 1);

The following panics because of overflow:

ⓘ
let _ = i32::MAX.strict_pow(2);
1.84.0 · Source

pub fn checked_isqrt(self) -> Option<i32>

Returns the integer square root of the number, rounded down.

This function returns the principal (non-negative) square root. For a given number n, although both x and -x satisfy x2 = n, this function always returns the non-negative value.

Returns None if self is negative.

§Examples
assert_eq!(10i32.checked_isqrt(), Some(3));
1.0.0 · Source

pub fn saturating_add(self, rhs: i32) -> i32

Saturating integer addition. Computes self + rhs, saturating at the numeric bounds instead of overflowing.

§Examples
assert_eq!(100i32.saturating_add(1), 101);
assert_eq!(i32::MAX.saturating_add(100), i32::MAX);
assert_eq!(i32::MIN.saturating_add(-1), i32::MIN);
1.66.0 · Source

pub fn saturating_add_unsigned(self, rhs: u32) -> i32

Saturating addition with an unsigned integer. Computes self + rhs, saturating at the numeric bounds instead of overflowing.

§Examples
assert_eq!(1i32.saturating_add_unsigned(2), 3);
assert_eq!(i32::MAX.saturating_add_unsigned(100), i32::MAX);
1.0.0 · Source

pub fn saturating_sub(self, rhs: i32) -> i32

Saturating integer subtraction. Computes self - rhs, saturating at the numeric bounds instead of overflowing.

§Examples
assert_eq!(100i32.saturating_sub(127), -27);
assert_eq!(i32::MIN.saturating_sub(100), i32::MIN);
assert_eq!(i32::MAX.saturating_sub(-1), i32::MAX);
1.66.0 · Source

pub fn saturating_sub_unsigned(self, rhs: u32) -> i32

Saturating subtraction with an unsigned integer. Computes self - rhs, saturating at the numeric bounds instead of overflowing.

§Examples
assert_eq!(100i32.saturating_sub_unsigned(127), -27);
assert_eq!(i32::MIN.saturating_sub_unsigned(100), i32::MIN);
1.45.0 · Source

pub fn saturating_neg(self) -> i32

Saturating integer negation. Computes -self, returning MAX if self == MIN instead of overflowing.

§Examples
assert_eq!(100i32.saturating_neg(), -100);
assert_eq!((-100i32).saturating_neg(), 100);
assert_eq!(i32::MIN.saturating_neg(), i32::MAX);
assert_eq!(i32::MAX.saturating_neg(), i32::MIN + 1);
1.45.0 · Source

pub fn saturating_abs(self) -> i32

Saturating absolute value. Computes self.abs(), returning MAX if self == MIN instead of overflowing.

§Examples
assert_eq!(100i32.saturating_abs(), 100);
assert_eq!((-100i32).saturating_abs(), 100);
assert_eq!(i32::MIN.saturating_abs(), i32::MAX);
assert_eq!((i32::MIN + 1).saturating_abs(), i32::MAX);
1.7.0 · Source

pub fn saturating_mul(self, rhs: i32) -> i32

Saturating integer multiplication. Computes self * rhs, saturating at the numeric bounds instead of overflowing.

§Examples
assert_eq!(10i32.saturating_mul(12), 120);
assert_eq!(i32::MAX.saturating_mul(10), i32::MAX);
assert_eq!(i32::MIN.saturating_mul(10), i32::MIN);
1.58.0 · Source

pub fn saturating_div(self, rhs: i32) -> i32

Saturating integer division. Computes self / rhs, saturating at the numeric bounds instead of overflowing.

§Panics

This function will panic if rhs is zero.

§Examples
assert_eq!(5i32.saturating_div(2), 2);
assert_eq!(i32::MAX.saturating_div(-1), i32::MIN + 1);
assert_eq!(i32::MIN.saturating_div(-1), i32::MAX);
1.34.0 · Source

pub fn saturating_pow(self, exp: u32) -> i32

Saturating integer exponentiation. Computes self.pow(exp), saturating at the numeric bounds instead of overflowing.

§Examples
assert_eq!((-4i32).saturating_pow(3), -64);
assert_eq!(0_i32.saturating_pow(0), 1);
assert_eq!(i32::MIN.saturating_pow(2), i32::MAX);
assert_eq!(i32::MIN.saturating_pow(3), i32::MIN);
1.0.0 · Source

pub fn wrapping_add(self, rhs: i32) -> i32

Wrapping (modular) addition. Computes self + rhs, wrapping around at the boundary of the type.

§Examples
assert_eq!(100i32.wrapping_add(27), 127);
assert_eq!(i32::MAX.wrapping_add(2), i32::MIN + 1);
1.66.0 · Source

pub fn wrapping_add_unsigned(self, rhs: u32) -> i32

Wrapping (modular) addition with an unsigned integer. Computes self + rhs, wrapping around at the boundary of the type.

§Examples
assert_eq!(100i32.wrapping_add_unsigned(27), 127);
assert_eq!(i32::MAX.wrapping_add_unsigned(2), i32::MIN + 1);
1.0.0 · Source

pub fn wrapping_sub(self, rhs: i32) -> i32

Wrapping (modular) subtraction. Computes self - rhs, wrapping around at the boundary of the type.

§Examples
assert_eq!(0i32.wrapping_sub(127), -127);
assert_eq!((-2i32).wrapping_sub(i32::MAX), i32::MAX);
1.66.0 · Source

pub fn wrapping_sub_unsigned(self, rhs: u32) -> i32

Wrapping (modular) subtraction with an unsigned integer. Computes self - rhs, wrapping around at the boundary of the type.

§Examples
assert_eq!(0i32.wrapping_sub_unsigned(127), -127);
assert_eq!((-2i32).wrapping_sub_unsigned(u32::MAX), -1);
1.0.0 · Source

pub fn wrapping_mul(self, rhs: i32) -> i32

Wrapping (modular) multiplication. Computes self * rhs, wrapping around at the boundary of the type.

§Examples
assert_eq!(10i32.wrapping_mul(12), 120);
assert_eq!(11i8.wrapping_mul(12), -124);
1.2.0 · Source

pub fn wrapping_div(self, rhs: i32) -> i32

Wrapping (modular) division. Computes self / rhs, wrapping around at the boundary of the type.

The only case where such wrapping can occur is when one divides MIN / -1 on a signed type (where MIN is the negative minimal value for the type); this is equivalent to -MIN, a positive value that is too large to represent in the type. In such a case, this function returns MIN itself.

§Panics

This function will panic if rhs is zero.

§Examples
assert_eq!(100i32.wrapping_div(10), 10);
assert_eq!((-128i8).wrapping_div(-1), -128);
1.38.0 · Source

pub fn wrapping_div_euclid(self, rhs: i32) -> i32

Wrapping Euclidean division. Computes self.div_euclid(rhs), wrapping around at the boundary of the type.

Wrapping will only occur in MIN / -1 on a signed type (where MIN is the negative minimal value for the type). This is equivalent to -MIN, a positive value that is too large to represent in the type. In this case, this method returns MIN itself.

§Panics

This function will panic if rhs is zero.

§Examples
assert_eq!(100i32.wrapping_div_euclid(10), 10);
assert_eq!((-128i8).wrapping_div_euclid(-1), -128);
1.2.0 · Source

pub fn wrapping_rem(self, rhs: i32) -> i32

Wrapping (modular) remainder. Computes self % rhs, wrapping around at the boundary of the type.

Such wrap-around never actually occurs mathematically; implementation artifacts make x % y invalid for MIN / -1 on a signed type (where MIN is the negative minimal value). In such a case, this function returns 0.

§Panics

This function will panic if rhs is zero.

§Examples
assert_eq!(100i32.wrapping_rem(10), 0);
assert_eq!((-128i8).wrapping_rem(-1), 0);
1.38.0 · Source

pub fn wrapping_rem_euclid(self, rhs: i32) -> i32

Wrapping Euclidean remainder. Computes self.rem_euclid(rhs), wrapping around at the boundary of the type.

Wrapping will only occur in MIN % -1 on a signed type (where MIN is the negative minimal value for the type). In this case, this method returns 0.

§Panics

This function will panic if rhs is zero.

§Examples
assert_eq!(100i32.wrapping_rem_euclid(10), 0);
assert_eq!((-128i8).wrapping_rem_euclid(-1), 0);
1.2.0 · Source

pub fn wrapping_neg(self) -> i32

Wrapping (modular) negation. Computes -self, wrapping around at the boundary of the type.

The only case where such wrapping can occur is when one negates MIN on a signed type (where MIN is the negative minimal value for the type); this is a positive value that is too large to represent in the type. In such a case, this function returns MIN itself.

§Examples
assert_eq!(100i32.wrapping_neg(), -100);
assert_eq!((-100i32).wrapping_neg(), 100);
assert_eq!(i32::MIN.wrapping_neg(), i32::MIN);
1.2.0 · Source

pub fn wrapping_shl(self, rhs: u32) -> i32

Panic-free bitwise shift-left; yields self << mask(rhs), where mask removes any high-order bits of rhs that would cause the shift to exceed the bitwidth of the type.

Beware that, unlike most other wrapping_* methods on integers, this does not give the same result as doing the shift in infinite precision then truncating as needed. Instead, the behaviour of this method matches what shift instructions do on many processors, and is what the << operator does when overflow checks are disabled, but numerically it’s weird. Consider, instead, using Self::unbounded_shl which has nicer behaviour.

Note that this is not the same as a rotate-left; the RHS of a wrapping shift-left is restricted to the range of the type, rather than the bits shifted out of the LHS being returned to the other end. The primitive integer types all implement a rotate_left function, which may be what you want instead.

§Examples
assert_eq!((-1_i32).wrapping_shl(7), -128);
assert_eq!(42_i32.wrapping_shl(32), 42);
assert_eq!(42_i32.wrapping_shl(1).wrapping_shl(31), 0);
assert_eq!((-1_i32).wrapping_shl(128), -1);
assert_eq!(5_i32.wrapping_shl(1025), 10);
1.2.0 · Source

pub fn wrapping_shr(self, rhs: u32) -> i32

Panic-free bitwise shift-right; yields self >> mask(rhs), where mask removes any high-order bits of rhs that would cause the shift to exceed the bitwidth of the type.

Beware that, unlike most other wrapping_* methods on integers, this does not give the same result as doing the shift in infinite precision then truncating as needed. Instead, the behaviour of this method matches what shift instructions do on many processors, and is what the >> operator does when overflow checks are disabled, but numerically it’s weird. Consider, instead, using Self::unbounded_shr which has nicer behaviour.

Note that this is not the same as a rotate-right; the RHS of a wrapping shift-right is restricted to the range of the type, rather than the bits shifted out of the LHS being returned to the other end. The primitive integer types all implement a rotate_right function, which may be what you want instead.

§Examples
assert_eq!((-128_i32).wrapping_shr(7), -1);
assert_eq!(42_i32.wrapping_shr(32), 42);
assert_eq!(42_i32.wrapping_shr(1).wrapping_shr(31), 0);
assert_eq!((-128_i16).wrapping_shr(64), -128);
assert_eq!(10_i32.wrapping_shr(1025), 5);
1.13.0 · Source

pub fn wrapping_abs(self) -> i32

Wrapping (modular) absolute value. Computes self.abs(), wrapping around at the boundary of the type.

The only case where such wrapping can occur is when one takes the absolute value of the negative minimal value for the type; this is a positive value that is too large to represent in the type. In such a case, this function returns MIN itself.

§Examples
assert_eq!(100i32.wrapping_abs(), 100);
assert_eq!((-100i32).wrapping_abs(), 100);
assert_eq!(i32::MIN.wrapping_abs(), i32::MIN);
assert_eq!((-128i8).wrapping_abs() as u8, 128);
1.51.0 · Source

pub fn unsigned_abs(self) -> u32

Computes the absolute value of self without any wrapping or panicking.

§Examples
assert_eq!(100i32.unsigned_abs(), 100u32);
assert_eq!((-100i32).unsigned_abs(), 100u32);
assert_eq!((-128i8).unsigned_abs(), 128u8);
1.34.0 · Source

pub fn wrapping_pow(self, exp: u32) -> i32

Wrapping (modular) exponentiation. Computes self.pow(exp), wrapping around at the boundary of the type.

§Examples
assert_eq!(3i32.wrapping_pow(4), 81);
assert_eq!(3i8.wrapping_pow(5), -13);
assert_eq!(3i8.wrapping_pow(6), -39);
assert_eq!(0_i32.wrapping_pow(0), 1);
1.7.0 · Source

pub fn overflowing_add(self, rhs: i32) -> (i32, bool)

Calculates self + rhs.

Returns a tuple of the addition along with a boolean indicating whether an arithmetic overflow would occur. If an overflow would have occurred then the wrapped value is returned (negative if overflowed above MAX, non-negative if below MIN).

§Examples
assert_eq!(5i32.overflowing_add(2), (7, false));
assert_eq!(i32::MAX.overflowing_add(1), (i32::MIN, true));
Source

pub fn carrying_add(self, rhs: i32, carry: bool) -> (i32, bool)

🔬This is a nightly-only experimental API. (signed_bigint_helpers)

Calculates self + rhs + carry and checks for overflow.

Performs “ternary addition” of two integer operands and a carry-in bit, and returns a tuple of the sum along with a boolean indicating whether an arithmetic overflow would occur. On overflow, the wrapped value is returned.

This allows chaining together multiple additions to create a wider addition, and can be useful for bignum addition. This method should only be used for the most significant word; for the less significant words the unsigned method u32::carrying_add should be used.

The output boolean returned by this method is not a carry flag, and should not be added to a more significant word.

If overflow occurred, the wrapped value is returned (negative if overflowed above MAX, non-negative if below MIN).

If the input carry is false, this method is equivalent to overflowing_add.

§Examples
#![feature(signed_bigint_helpers)]
// Only the most significant word is signed.
//
//   10  MAX    (a = 10 × 2^32 + 2^32 - 1)
// + -5    9    (b = -5 × 2^32 + 9)
// ---------
//    6    8    (sum = 6 × 2^32 + 8)

let (a1, a0): (i32, u32) = (10, u32::MAX);
let (b1, b0): (i32, u32) = (-5, 9);
let carry0 = false;

// u32::carrying_add for the less significant words
let (sum0, carry1) = a0.carrying_add(b0, carry0);
assert_eq!(carry1, true);

// i32::carrying_add for the most significant word
let (sum1, overflow) = a1.carrying_add(b1, carry1);
assert_eq!(overflow, false);

assert_eq!((sum1, sum0), (6, 8));
1.66.0 · Source

pub fn overflowing_add_unsigned(self, rhs: u32) -> (i32, bool)

Calculates self + rhs with an unsigned rhs.

Returns a tuple of the addition along with a boolean indicating whether an arithmetic overflow would occur. If an overflow would have occurred then the wrapped value is returned.

§Examples
assert_eq!(1i32.overflowing_add_unsigned(2), (3, false));
assert_eq!((i32::MIN).overflowing_add_unsigned(u32::MAX), (i32::MAX, false));
assert_eq!((i32::MAX - 2).overflowing_add_unsigned(3), (i32::MIN, true));
1.7.0 · Source

pub fn overflowing_sub(self, rhs: i32) -> (i32, bool)

Calculates self - rhs.

Returns a tuple of the subtraction along with a boolean indicating whether an arithmetic overflow would occur. If an overflow would have occurred then the wrapped value is returned (negative if overflowed above MAX, non-negative if below MIN).

§Examples
assert_eq!(5i32.overflowing_sub(2), (3, false));
assert_eq!(i32::MIN.overflowing_sub(1), (i32::MAX, true));
Source

pub fn borrowing_sub(self, rhs: i32, borrow: bool) -> (i32, bool)

🔬This is a nightly-only experimental API. (signed_bigint_helpers)

Calculates self − rhs − borrow and checks for overflow.

Performs “ternary subtraction” by subtracting both an integer operand and a borrow-in bit from self, and returns a tuple of the difference along with a boolean indicating whether an arithmetic overflow would occur. On overflow, the wrapped value is returned.

This allows chaining together multiple subtractions to create a wider subtraction, and can be useful for bignum subtraction. This method should only be used for the most significant word; for the less significant words the unsigned method u32::borrowing_sub should be used.

The output boolean returned by this method is not a borrow flag, and should not be subtracted from a more significant word.

If overflow occurred, the wrapped value is returned (negative if overflowed above MAX, non-negative if below MIN).

If the input borrow is false, this method is equivalent to overflowing_sub.

§Examples
#![feature(signed_bigint_helpers)]
// Only the most significant word is signed.
//
//    6    8    (a = 6 × 2^32 + 8)
// - -5    9    (b = -5 × 2^32 + 9)
// ---------
//   10  MAX    (diff = 10 × 2^32 + 2^32 - 1)

let (a1, a0): (i32, u32) = (6, 8);
let (b1, b0): (i32, u32) = (-5, 9);
let borrow0 = false;

// u32::borrowing_sub for the less significant words
let (diff0, borrow1) = a0.borrowing_sub(b0, borrow0);
assert_eq!(borrow1, true);

// i32::borrowing_sub for the most significant word
let (diff1, overflow) = a1.borrowing_sub(b1, borrow1);
assert_eq!(overflow, false);

assert_eq!((diff1, diff0), (10, u32::MAX));
1.66.0 · Source

pub fn overflowing_sub_unsigned(self, rhs: u32) -> (i32, bool)

Calculates self - rhs with an unsigned rhs.

Returns a tuple of the subtraction along with a boolean indicating whether an arithmetic overflow would occur. If an overflow would have occurred then the wrapped value is returned.

§Examples
assert_eq!(1i32.overflowing_sub_unsigned(2), (-1, false));
assert_eq!((i32::MAX).overflowing_sub_unsigned(u32::MAX), (i32::MIN, false));
assert_eq!((i32::MIN + 2).overflowing_sub_unsigned(3), (i32::MAX, true));
1.7.0 · Source

pub fn overflowing_mul(self, rhs: i32) -> (i32, bool)

Calculates the multiplication of self and rhs.

Returns a tuple of the multiplication along with a boolean indicating whether an arithmetic overflow would occur. If an overflow would have occurred then the wrapped value is returned.

§Examples
assert_eq!(5i32.overflowing_mul(2), (10, false));
assert_eq!(1_000_000_000i32.overflowing_mul(10), (1410065408, true));
Source

pub fn carrying_mul(self, rhs: i32, carry: i32) -> (u32, i32)

🔬This is a nightly-only experimental API. (signed_bigint_helpers)

Calculates the “full multiplication” self * rhs + carry without the possibility to overflow.

This returns the low-order (wrapping) bits and the high-order (overflow) bits of the result as two separate values, in that order.

Performs “long multiplication” which takes in an extra amount to add, and may return an additional amount of overflow. This allows for chaining together multiple multiplications to create “big integers” which represent larger values.

§Examples

Please note that this example is shared among integer types, which is why i32 is used.

#![feature(signed_bigint_helpers)]
assert_eq!(5i32.carrying_mul(-2, 0), (4294967286, -1));
assert_eq!(5i32.carrying_mul(-2, 10), (0, 0));
assert_eq!(1_000_000_000i32.carrying_mul(-10, 0), (2884901888, -3));
assert_eq!(1_000_000_000i32.carrying_mul(-10, 10), (2884901898, -3));
assert_eq!(i32::MAX.carrying_mul(i32::MAX, i32::MAX), (i32::MAX.unsigned_abs() + 1, i32::MAX / 2));
Source

pub fn carrying_mul_add(self, rhs: i32, carry: i32, add: i32) -> (u32, i32)

🔬This is a nightly-only experimental API. (signed_bigint_helpers)

Calculates the “full multiplication” self * rhs + carry + add without the possibility to overflow.

This returns the low-order (wrapping) bits and the high-order (overflow) bits of the result as two separate values, in that order.

Performs “long multiplication” which takes in an extra amount to add, and may return an additional amount of overflow. This allows for chaining together multiple multiplications to create “big integers” which represent larger values.

If you only need one carry, then you can use Self::carrying_mul instead.

§Examples

Please note that this example is shared among integer types, which is why i32 is used.

#![feature(signed_bigint_helpers)]
assert_eq!(5i32.carrying_mul_add(-2, 0, 0), (4294967286, -1));
assert_eq!(5i32.carrying_mul_add(-2, 10, 10), (10, 0));
assert_eq!(1_000_000_000i32.carrying_mul_add(-10, 0, 0), (2884901888, -3));
assert_eq!(1_000_000_000i32.carrying_mul_add(-10, 10, 10), (2884901908, -3));
assert_eq!(i32::MAX.carrying_mul_add(i32::MAX, i32::MAX, i32::MAX), (u32::MAX, i32::MAX / 2));
1.7.0 · Source

pub fn overflowing_div(self, rhs: i32) -> (i32, bool)

Calculates the divisor when self is divided by rhs.

Returns a tuple of the divisor along with a boolean indicating whether an arithmetic overflow would occur. If an overflow would occur then self is returned.

§Panics

This function will panic if rhs is zero.

§Examples
assert_eq!(5i32.overflowing_div(2), (2, false));
assert_eq!(i32::MIN.overflowing_div(-1), (i32::MIN, true));
1.38.0 · Source

pub fn overflowing_div_euclid(self, rhs: i32) -> (i32, bool)

Calculates the quotient of Euclidean division self.div_euclid(rhs).

Returns a tuple of the divisor along with a boolean indicating whether an arithmetic overflow would occur. If an overflow would occur then self is returned.

§Panics

This function will panic if rhs is zero.

§Examples
assert_eq!(5i32.overflowing_div_euclid(2), (2, false));
assert_eq!(i32::MIN.overflowing_div_euclid(-1), (i32::MIN, true));
1.7.0 · Source

pub fn overflowing_rem(self, rhs: i32) -> (i32, bool)

Calculates the remainder when self is divided by rhs.

Returns a tuple of the remainder after dividing along with a boolean indicating whether an arithmetic overflow would occur. If an overflow would occur then 0 is returned.

§Panics

This function will panic if rhs is zero.

§Examples
assert_eq!(5i32.overflowing_rem(2), (1, false));
assert_eq!(i32::MIN.overflowing_rem(-1), (0, true));
1.38.0 · Source

pub fn overflowing_rem_euclid(self, rhs: i32) -> (i32, bool)

Overflowing Euclidean remainder. Calculates self.rem_euclid(rhs).

Returns a tuple of the remainder after dividing along with a boolean indicating whether an arithmetic overflow would occur. If an overflow would occur then 0 is returned.

§Panics

This function will panic if rhs is zero.

§Examples
assert_eq!(5i32.overflowing_rem_euclid(2), (1, false));
assert_eq!(i32::MIN.overflowing_rem_euclid(-1), (0, true));
1.7.0 · Source

pub fn overflowing_neg(self) -> (i32, bool)

Negates self, overflowing if this is equal to the minimum value.

Returns a tuple of the negated version of self along with a boolean indicating whether an overflow happened. If self is the minimum value (e.g., i32::MIN for values of type i32), then the minimum value will be returned again and true will be returned for an overflow happening.

§Examples
assert_eq!(2i32.overflowing_neg(), (-2, false));
assert_eq!(i32::MIN.overflowing_neg(), (i32::MIN, true));
1.7.0 · Source

pub fn overflowing_shl(self, rhs: u32) -> (i32, bool)

Shifts self left by rhs bits.

Returns a tuple of the shifted version of self along with a boolean indicating whether the shift value was larger than or equal to the number of bits. If the shift value is too large, then value is masked (N-1) where N is the number of bits, and this value is then used to perform the shift.

§Examples
assert_eq!(0x1i32.overflowing_shl(4), (0x10, false));
assert_eq!(0x1i32.overflowing_shl(36), (0x10, true));
assert_eq!(0x10i32.overflowing_shl(31), (0, false));
1.7.0 · Source

pub fn overflowing_shr(self, rhs: u32) -> (i32, bool)

Shifts self right by rhs bits.

Returns a tuple of the shifted version of self along with a boolean indicating whether the shift value was larger than or equal to the number of bits. If the shift value is too large, then value is masked (N-1) where N is the number of bits, and this value is then used to perform the shift.

§Examples
assert_eq!(0x10i32.overflowing_shr(4), (0x1, false));
assert_eq!(0x10i32.overflowing_shr(36), (0x1, true));
1.13.0 · Source

pub fn overflowing_abs(self) -> (i32, bool)

Computes the absolute value of self.

Returns a tuple of the absolute version of self along with a boolean indicating whether an overflow happened. If self is the minimum value (e.g., i32::MIN for values of type i32), then the minimum value will be returned again and true will be returned for an overflow happening.

§Examples
assert_eq!(10i32.overflowing_abs(), (10, false));
assert_eq!((-10i32).overflowing_abs(), (10, false));
assert_eq!((i32::MIN).overflowing_abs(), (i32::MIN, true));
1.34.0 · Source

pub fn overflowing_pow(self, exp: u32) -> (i32, bool)

Raises self to the power of exp, using exponentiation by squaring.

Returns a tuple of the exponentiation along with a bool indicating whether an overflow happened.

§Examples
assert_eq!(3i32.overflowing_pow(4), (81, false));
assert_eq!(0_i32.overflowing_pow(0), (1, false));
assert_eq!(3i8.overflowing_pow(5), (-13, true));
1.0.0 · Source

pub fn pow(self, exp: u32) -> i32

Raises self to the power of exp, using exponentiation by squaring.

§Examples
let x: i32 = 2; // or any other integer type

assert_eq!(x.pow(5), 32);
assert_eq!(0_i32.pow(0), 1);
1.84.0 · Source

pub fn isqrt(self) -> i32

Returns the integer square root of the number, rounded down.

This function returns the principal (non-negative) square root. For a given number n, although both x and -x satisfy x2 = n, this function always returns the non-negative value.

§Panics

This function will panic if self is negative.

§Examples
assert_eq!(10i32.isqrt(), 3);
1.38.0 · Source

pub fn div_euclid(self, rhs: i32) -> i32

Calculates the quotient of Euclidean division of self by rhs.

This computes the integer q such that self = q * rhs + r, with r = self.rem_euclid(rhs) and 0 <= r < abs(rhs).

In other words, the result is self / rhs rounded to the integer q such that self >= q * rhs. If self > 0, this is equal to rounding towards zero (the default in Rust); if self < 0, this is equal to rounding away from zero (towards +/- infinity). If rhs > 0, this is equal to rounding towards -infinity; if rhs < 0, this is equal to rounding towards +infinity.

§Panics

This function will panic if rhs is zero or if self is Self::MIN and rhs is -1. This behavior is not affected by the overflow-checks flag.

§Examples
let a: i32 = 7; // or any other integer type
let b = 4;

assert_eq!(a.div_euclid(b), 1); // 7 >= 4 * 1
assert_eq!(a.div_euclid(-b), -1); // 7 >= -4 * -1
assert_eq!((-a).div_euclid(b), -2); // -7 >= 4 * -2
assert_eq!((-a).div_euclid(-b), 2); // -7 >= -4 * 2
1.38.0 · Source

pub fn rem_euclid(self, rhs: i32) -> i32

Calculates the least nonnegative remainder of self when divided by rhs.

This is done as if by the Euclidean division algorithm – given r = self.rem_euclid(rhs), the result satisfies self = rhs * self.div_euclid(rhs) + r and 0 <= r < abs(rhs).

§Panics

This function will panic if rhs is zero or if self is Self::MIN and rhs is -1. This behavior is not affected by the overflow-checks flag.

§Examples
let a: i32 = 7; // or any other integer type
let b = 4;

assert_eq!(a.rem_euclid(b), 3);
assert_eq!((-a).rem_euclid(b), 1);
assert_eq!(a.rem_euclid(-b), 3);
assert_eq!((-a).rem_euclid(-b), 1);

This will panic:

ⓘ
let _ = i32::MIN.rem_euclid(-1);
Source

pub fn div_floor(self, rhs: i32) -> i32

🔬This is a nightly-only experimental API. (int_roundings)

Calculates the quotient of self and rhs, rounding the result towards negative infinity.

§Panics

This function will panic if rhs is zero or if self is Self::MIN and rhs is -1. This behavior is not affected by the overflow-checks flag.

§Examples
#![feature(int_roundings)]
let a: i32 = 8;
let b = 3;

assert_eq!(a.div_floor(b), 2);
assert_eq!(a.div_floor(-b), -3);
assert_eq!((-a).div_floor(b), -3);
assert_eq!((-a).div_floor(-b), 2);
Source

pub fn div_ceil(self, rhs: i32) -> i32

🔬This is a nightly-only experimental API. (int_roundings)

Calculates the quotient of self and rhs, rounding the result towards positive infinity.

§Panics

This function will panic if rhs is zero or if self is Self::MIN and rhs is -1. This behavior is not affected by the overflow-checks flag.

§Examples
#![feature(int_roundings)]
let a: i32 = 8;
let b = 3;

assert_eq!(a.div_ceil(b), 3);
assert_eq!(a.div_ceil(-b), -2);
assert_eq!((-a).div_ceil(b), -2);
assert_eq!((-a).div_ceil(-b), 3);
Source

pub fn next_multiple_of(self, rhs: i32) -> i32

🔬This is a nightly-only experimental API. (int_roundings)

If rhs is positive, calculates the smallest value greater than or equal to self that is a multiple of rhs. If rhs is negative, calculates the largest value less than or equal to self that is a multiple of rhs.

§Panics

This function will panic if rhs is zero.

§Overflow behavior

On overflow, this function will panic if overflow checks are enabled (default in debug mode) and wrap if overflow checks are disabled (default in release mode).

§Examples
#![feature(int_roundings)]
assert_eq!(16_i32.next_multiple_of(8), 16);
assert_eq!(23_i32.next_multiple_of(8), 24);
assert_eq!(16_i32.next_multiple_of(-8), 16);
assert_eq!(23_i32.next_multiple_of(-8), 16);
assert_eq!((-16_i32).next_multiple_of(8), -16);
assert_eq!((-23_i32).next_multiple_of(8), -16);
assert_eq!((-16_i32).next_multiple_of(-8), -16);
assert_eq!((-23_i32).next_multiple_of(-8), -24);
Source

pub fn checked_next_multiple_of(self, rhs: i32) -> Option<i32>

🔬This is a nightly-only experimental API. (int_roundings)

If rhs is positive, calculates the smallest value greater than or equal to self that is a multiple of rhs. If rhs is negative, calculates the largest value less than or equal to self that is a multiple of rhs. Returns None if rhs is zero or the operation would result in overflow.

§Examples
#![feature(int_roundings)]
assert_eq!(16_i32.checked_next_multiple_of(8), Some(16));
assert_eq!(23_i32.checked_next_multiple_of(8), Some(24));
assert_eq!(16_i32.checked_next_multiple_of(-8), Some(16));
assert_eq!(23_i32.checked_next_multiple_of(-8), Some(16));
assert_eq!((-16_i32).checked_next_multiple_of(8), Some(-16));
assert_eq!((-23_i32).checked_next_multiple_of(8), Some(-16));
assert_eq!((-16_i32).checked_next_multiple_of(-8), Some(-16));
assert_eq!((-23_i32).checked_next_multiple_of(-8), Some(-24));
assert_eq!(1_i32.checked_next_multiple_of(0), None);
assert_eq!(i32::MAX.checked_next_multiple_of(2), None);
1.67.0 · Source

pub fn ilog(self, base: i32) -> u32

Returns the logarithm of the number with respect to an arbitrary base, rounded down.

This method might not be optimized owing to implementation details; ilog2 can produce results more efficiently for base 2, and ilog10 can produce results more efficiently for base 10.

§Panics

This function will panic if self is less than or equal to zero, or if base is less than 2.

§Examples
assert_eq!(5i32.ilog(5), 1);
1.67.0 · Source

pub fn ilog2(self) -> u32

Returns the base 2 logarithm of the number, rounded down.

§Panics

This function will panic if self is less than or equal to zero.

§Examples
assert_eq!(2i32.ilog2(), 1);
1.67.0 · Source

pub fn ilog10(self) -> u32

Returns the base 10 logarithm of the number, rounded down.

§Panics

This function will panic if self is less than or equal to zero.

§Example
assert_eq!(10i32.ilog10(), 1);
1.67.0 · Source

pub fn checked_ilog(self, base: i32) -> Option<u32>

Returns the logarithm of the number with respect to an arbitrary base, rounded down.

Returns None if the number is negative or zero, or if the base is not at least 2.

This method might not be optimized owing to implementation details; checked_ilog2 can produce results more efficiently for base 2, and checked_ilog10 can produce results more efficiently for base 10.

§Examples
assert_eq!(5i32.checked_ilog(5), Some(1));
1.67.0 · Source

pub fn checked_ilog2(self) -> Option<u32>

Returns the base 2 logarithm of the number, rounded down.

Returns None if the number is negative or zero.

Note that for non-negative numbers, this is equivalent to highest_one.

§Examples
assert_eq!(2i32.checked_ilog2(), Some(1));
1.67.0 · Source

pub fn checked_ilog10(self) -> Option<u32>

Returns the base 10 logarithm of the number, rounded down.

Returns None if the number is negative or zero.

§Example
assert_eq!(10i32.checked_ilog10(), Some(1));
1.0.0 · Source

pub fn abs(self) -> i32

Computes the absolute value of self.

§Overflow behavior

The absolute value of i32::MIN cannot be represented as an i32, and attempting to calculate it will cause an overflow. This means that code in debug mode will trigger a panic on this case and optimized code will return i32::MIN without a panic. If you do not want this behavior, consider using unsigned_abs instead.

§Examples
assert_eq!(10i32.abs(), 10);
assert_eq!((-10i32).abs(), 10);
1.60.0 · Source

pub fn abs_diff(self, other: i32) -> u32

Computes the absolute difference between self and other.

This function always returns the correct answer without overflow or panics by returning an unsigned integer.

§Examples
assert_eq!(100i32.abs_diff(80), 20u32);
assert_eq!(100i32.abs_diff(110), 10u32);
assert_eq!((-100i32).abs_diff(80), 180u32);
assert_eq!((-100i32).abs_diff(-120), 20u32);
assert_eq!(i32::MIN.abs_diff(i32::MAX), u32::MAX);
1.0.0 · Source

pub fn signum(self) -> i32

Returns a number representing sign of self.

  • 0 if the number is zero
  • 1 if the number is positive
  • -1 if the number is negative
§Examples
assert_eq!(10i32.signum(), 1);
assert_eq!(0i32.signum(), 0);
assert_eq!((-10i32).signum(), -1);
1.0.0 · Source

pub fn is_positive(self) -> bool

Returns true if self is positive and false if the number is zero or negative.

§Examples
assert!(10i32.is_positive());
assert!(!(-10i32).is_positive());
1.0.0 · Source

pub fn is_negative(self) -> bool

Returns true if self is negative and false if the number is zero or positive.

§Examples
assert!((-10i32).is_negative());
assert!(!10i32.is_negative());
1.32.0 · Source

pub fn to_be_bytes(self) -> [u8; 4]

Returns the memory representation of this integer as a byte array in big-endian (network) byte order.

§Examples
let bytes = 0x12345678i32.to_be_bytes();
assert_eq!(bytes, [0x12, 0x34, 0x56, 0x78]);
1.32.0 · Source

pub fn to_le_bytes(self) -> [u8; 4]

Returns the memory representation of this integer as a byte array in little-endian byte order.

§Examples
let bytes = 0x12345678i32.to_le_bytes();
assert_eq!(bytes, [0x78, 0x56, 0x34, 0x12]);
1.32.0 · Source

pub fn to_ne_bytes(self) -> [u8; 4]

Returns the memory representation of this integer as a byte array in native byte order.

As the target platform’s native endianness is used, portable code should use to_be_bytes or to_le_bytes, as appropriate, instead.

§Examples
let bytes = 0x12345678i32.to_ne_bytes();
assert_eq!(
    bytes,
    if cfg!(target_endian = "big") {
        [0x12, 0x34, 0x56, 0x78]
    } else {
        [0x78, 0x56, 0x34, 0x12]
    }
);
Source

pub fn clamp_magnitude(self, limit: u32) -> i32

🔬This is a nightly-only experimental API. (clamp_magnitude)

Clamps this number to a symmetric range centred around zero.

The method clamps the number’s magnitude (absolute value) to be at most limit.

This is functionally equivalent to self.clamp(-limit, limit), but is more explicit about the intent.

§Examples
#![feature(clamp_magnitude)]
assert_eq!(120i32.clamp_magnitude(100), 100);
assert_eq!((-120i32).clamp_magnitude(100), -100);
assert_eq!(80i32.clamp_magnitude(100), 80);
assert_eq!((-80i32).clamp_magnitude(100), -80);
Source

pub fn truncate<Target>(self) -> Target
where i32: TruncateTarget<Target>,

🔬This is a nightly-only experimental API. (integer_widen_truncate)

Truncate an integer to an integer of the same size or smaller, preserving the least significant bits.

§Examples
#![feature(integer_widen_truncate)]
assert_eq!(120i8, 120i32.truncate());
assert_eq!(-120i8, (-120i32).truncate());
assert_eq!(120i8, 376i32.truncate());
Source

pub fn saturating_truncate<Target>(self) -> Target
where i32: TruncateTarget<Target>,

🔬This is a nightly-only experimental API. (integer_widen_truncate)

Truncate an integer to an integer of the same size or smaller, saturating at numeric bounds instead of truncating.

§Examples
#![feature(integer_widen_truncate)]
assert_eq!(120i8, 120i32.saturating_truncate());
assert_eq!(-120i8, (-120i32).saturating_truncate());
assert_eq!(127i8, 376i32.saturating_truncate());
assert_eq!(-128i8, (-1000i32).saturating_truncate());
Source

pub fn checked_truncate<Target>(self) -> Option<Target>
where i32: TruncateTarget<Target>,

🔬This is a nightly-only experimental API. (integer_widen_truncate)

Truncate an integer to an integer of the same size or smaller, returning None if the value is outside the bounds of the smaller type.

§Examples
#![feature(integer_widen_truncate)]
assert_eq!(Some(120i8), 120i32.checked_truncate());
assert_eq!(Some(-120i8), (-120i32).checked_truncate());
assert_eq!(None, 376i32.checked_truncate::<i8>());
assert_eq!(None, (-1000i32).checked_truncate::<i8>());
Source

pub fn widen<Target>(self) -> Target
where i32: WidenTarget<Target>,

🔬This is a nightly-only experimental API. (integer_widen_truncate)

Widen to an integer of the same size or larger, preserving its value.

§Examples
#![feature(integer_widen_truncate)]
assert_eq!(120i128, 120i8.widen());
assert_eq!(-120i128, (-120i8).widen());
Source

pub fn saturating_cast<T>(self) -> T

🔬This is a nightly-only experimental API. (integer_casts)

Converts self to the target integer type, saturating at the numeric bounds instead of overflowing.

§Examples
#![feature(integer_casts)]
assert_eq!(i8::MAX, i32::MAX.saturating_cast());
assert_eq!(i8::MIN, i32::MIN.saturating_cast());
assert_eq!(42u8, 42i32.saturating_cast());
assert_eq!(0u8, (-42i32).saturating_cast());
Source

pub fn wrapping_cast<T>(self) -> T

🔬This is a nightly-only experimental API. (integer_casts)

Converts self to the target integer type, wrapping around at the boundary of the target type.

§Examples
#![feature(integer_casts)]
assert_eq!(i32::MAX as i8, i32::MAX.wrapping_cast());
assert_eq!(i32::MIN as i8, i32::MIN.wrapping_cast());
assert_eq!(42u8, 42i32.wrapping_cast());
assert_eq!(u8::MAX - 41, (-42i32).wrapping_cast());
Source

pub fn checked_cast<T>(self) -> Option<T>

🔬This is a nightly-only experimental API. (integer_casts)

Converts self to the target integer type, returning None if the value is not representable by the target type.

§Examples
#![feature(integer_casts)]
assert_eq!(Some(42u8), 42i32.checked_cast());
assert_eq!((-42i32).checked_cast::<u8>(), None);
Source

pub fn strict_cast<T>(self) -> T

🔬This is a nightly-only experimental API. (integer_casts)

Converts self to the target integer type, panicking if the value is not representable by the target type.

§Panics

This function will panic if the value is not representable by the target type.

§Examples
#![feature(integer_casts)]
assert_eq!(42u8, 42i32.strict_cast());

The following will panic:

ⓘ
#![feature(integer_casts)]
let _ = (-42i32).strict_cast::<u8>();
Source

pub unsafe fn unchecked_cast<T>(self) -> T

🔬This is a nightly-only experimental API. (integer_casts)

Converts self to the target integer type, assuming the value is representable by the target type.

§Safety

This results in undefined behavior if the integer value of self is bigger than T::MAX, or smaller than T::MIN, where T is the target type.

1.87.0 · Source

pub fn midpoint(self, rhs: i32) -> i32

Calculates the midpoint (average) between self and rhs.

midpoint(a, b) is (a + b) / 2 as if it were performed in a sufficiently-large signed integral type. This implies that the result is always rounded towards zero and that no overflow will ever occur.

§Examples
assert_eq!(0i32.midpoint(4), 2);
assert_eq!((-1i32).midpoint(2), 0);
assert_eq!((-7i32).midpoint(0), -3);
assert_eq!(0i32.midpoint(-7), -3);
assert_eq!(0i32.midpoint(7), 3);
Source

pub fn widening_mul(self, rhs: i32) -> i64

🔬This is a nightly-only experimental API. (widening_mul)

Widening multiplication. Computes self * rhs, widening to a larger integer.

The returned value is always exact and can never overflow.

Note that this method is semantically equivalent to carrying_mul with a carry of zero, with the latter instead returning a tuple denoting the low and high parts of the result. Consider using it instead if you need interoperability with other big int helper functions, or if this method isn’t available for a given type.

§Examples
#![feature(widening_mul)]

assert_eq!(i32::MAX.widening_mul(0_i32), 0);
assert_eq!(i32::MAX.widening_mul(i32::MAX), i32::MAX as i64 * i32::MAX as i64);
1.98.0 · Source

pub fn format_into(self, buf: &mut NumBuffer<i32>) -> &str

Formats this integer as a signed decimal number, using the memory pointed to by buf as storage for the returned string slice.

This method can be used to convert integers to strings without involving the dynamic dispatch that using Display would. This may be more efficient in situations where fmt is not otherwise used.

§Examples
use core::fmt::NumBuffer;

let n = 0i32;
let mut buf = NumBuffer::new();
assert_eq!(n.format_into(&mut buf), "0");

let n1 = 32i32;
assert_eq!(n1.format_into(&mut buf), "32");

let n2 = i32::MAX;
assert_eq!(n2.format_into(&mut buf), i32::MAX.to_string());

Trait Implementations§

Source§

impl Clone for Phase

Source§

fn clone(&self) -> Self

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Component for Phase
where Self: Send + Sync + 'static,

Source§

const STORAGE_TYPE: StorageType = bevy_ecs::component::StorageType::Table

A constant indicating the storage type used for this component.
Source§

type Mutability = Mutable

A marker type to assist Bevy with determining if this component is mutable, or immutable. Mutable components will have [Component<Mutability = Mutable>], while immutable components will instead have [Component<Mutability = Immutable>]. Read more
Source§

fn register_required_components( _requiree: ComponentId, required_components: &mut RequiredComponentsRegistrator<'_, '_>, )

Registers required components. Read more
Source§

fn clone_behavior() -> ComponentCloneBehavior

Called when registering this component, allowing to override clone function (or disable cloning altogether) for this component. Read more
Source§

fn relationship_accessor() -> Option<ComponentRelationshipAccessor<Self>>

Returns [ComponentRelationshipAccessor] required for working with relationships in dynamic contexts. Read more
§

fn on_add() -> Option<for<'w> fn(DeferredWorld<'w>, HookContext)>

Gets the on_add [ComponentHook] for this [Component] if one is defined.
§

fn on_insert() -> Option<for<'w> fn(DeferredWorld<'w>, HookContext)>

Gets the on_insert [ComponentHook] for this [Component] if one is defined.
§

fn on_discard() -> Option<for<'w> fn(DeferredWorld<'w>, HookContext)>

Gets the on_discard [ComponentHook] for this [Component] if one is defined.
§

fn on_remove() -> Option<for<'w> fn(DeferredWorld<'w>, HookContext)>

Gets the on_remove [ComponentHook] for this [Component] if one is defined.
§

fn on_despawn() -> Option<for<'w> fn(DeferredWorld<'w>, HookContext)>

Gets the on_despawn [ComponentHook] for this [Component] if one is defined.
§

fn map_entities<E>(_this: &mut Self, _mapper: &mut E)
where E: EntityMapper,

Maps the entities on this component using the given [EntityMapper]. This is used to remap entities in contexts like scenes and entity cloning. When deriving [Component], this is populated by annotating fields containing entities with #[entities] Read more
§

const HAS_SUMMARY_TICK: bool = false

Set this constant to true if the component should track a summary tick. Read more
Source§

impl Deref for Phase

Source§

type Target = i32

The resulting type after dereferencing.
Source§

fn deref(&self) -> &Self::Target

Dereferences the value.
Source§

impl DerefMut for Phase

Source§

fn deref_mut(&mut self) -> &mut Self::Target

Mutably dereferences the value.
Source§

impl PartialEq for Phase

Source§

fn eq(&self, other: &Self) -> bool

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Inequality operator !=. Read more
Source§

impl StructuralPartialEq for Phase

Auto Trait Implementations§

§

impl Freeze for Phase

§

impl RefUnwindSafe for Phase

§

impl Send for Phase

§

impl Sync for Phase

§

impl Unpin for Phase

§

impl UnsafeUnpin for Phase

§

impl UnwindSafe for Phase

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
§

impl<C> Bundle for C
where C: Component,

§

fn component_ids( components: &mut ComponentsRegistrator<'_>, ) -> impl Iterator<Item = ComponentId> + use<C>

§

fn get_component_ids( components: &Components, ) -> impl Iterator<Item = Option<ComponentId>>

Returns an iterator over this [Bundle]’s component ids. This will be None if the component has not been registered.
§

impl<C> BundleFromComponents for C
where C: Component,

§

unsafe fn from_components<T, F>(ctx: &mut T, func: &mut F) -> C
where F: for<'a> FnMut(&'a mut T) -> OwningPtr<'a>, C: Sized,

§

impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
§

impl<T> ConditionalSend for T
where T: Send,

§

impl<T> Downcast for T
where T: Any,

§

fn into_any(self: Box<T>) -> Box<dyn Any>

Converts Box<dyn Trait> (where Trait: Downcast) to Box<dyn Any>, which can then be downcast into Box<dyn ConcreteType> where ConcreteType implements Trait.
§

fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>

Converts Rc<Trait> (where Trait: Downcast) to Rc<Any>, which can then be further downcast into Rc<ConcreteType> where ConcreteType implements Trait.
§

fn as_any(&self) -> &(dyn Any + 'static)

Converts &Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &Any’s vtable from &Trait’s.
§

fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)

Converts &mut Trait (where Trait: Downcast) to &Any. This is needed since Rust cannot generate &mut Any’s vtable from &mut Trait’s.
§

impl<T> DowncastSend for T
where T: Any + Send,

§

fn into_any_send(self: Box<T>) -> Box<dyn Any + Send>

Converts Box<Trait> (where Trait: DowncastSend) to Box<dyn Any + Send>, which can then be downcast into Box<ConcreteType> where ConcreteType implements Trait.
§

impl<C> DynamicBundle for C
where C: Component,

§

type Effect = ()

An operation on the entity that happens after inserting this bundle.
§

unsafe fn get_components( ptr: MovingPtr<'_, C>, func: &mut impl FnMut(StorageType, OwningPtr<'_>), ) -> <C as DynamicBundle>::Effect

Moves the components out of the bundle. Read more
§

unsafe fn apply_effect( _ptr: MovingPtr<'_, MaybeUninit<C>>, _entity: &mut EntityWorldMut<'_>, )

Applies the after-effects of spawning this bundle. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

fn instrument(self, span: Span) -> Instrumented<Self> ⓘ

Instruments this type with the provided [Span], returning an Instrumented wrapper. Read more
§

fn in_current_span(self) -> Instrumented<Self> ⓘ

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

§

impl<T> IntoResult<T> for T

§

fn into_result(self) -> Result<T, RunSystemError>

Converts this type into the system output type.
§

impl<A> Is for A
where A: Any,

§

fn is<T>() -> bool
where T: Any,

Checks if the current type “is” another type, using a TypeId equality comparison. This is most useful in the context of generic logic. Read more
§

impl<T> PolicyExt for T
where T: ?Sized,

§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns [Action::Follow] only if self and other return Action::Follow. Read more
§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Sized + Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns [Action::Follow] if either self or other returns Action::Follow. Read more
§

impl<T> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

Source§

impl<P, T> Receiver for P
where P: Deref<Target = T> + ?Sized, T: ?Sized,

Source§

type Target = T

🔬This is a nightly-only experimental API. (arbitrary_self_types)
The target type on which the method may be called.
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
§

impl<T> Template for T
where T: Clone + Unpin,

§

type Output = T

The type of value produced by this [Template].
§

fn build_template( &self, _context: &mut TemplateContext<'_, '_>, ) -> Result<<T as Template>::Output, BevyError>

Uses this template and the given entity context to produce a [Template::Output].
§

fn clone_template(&self) -> T

Clones this template. See Clone.
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
§

impl<T> TypeData for T
where T: 'static + Send + Sync + Clone,

§

fn clone_type_data(&self) -> Box<dyn TypeData>

Creates a type-erased clone of self.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘ
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a [WithDispatch] wrapper. Read more
§

fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ

Attaches the current default Subscriber to this type, returning a [WithDispatch] wrapper. Read more