# Struct Subspace :: sus :: num :: i8

An 8-bit signed integer.

See the namespace level documentation for more.

# Static Data Members

# Static Methods

Construction from unsigned types where no bits are lost.

For conversions from types with a larger range use
`try_from`

. For lossy conversions use the
`Cast`

concept with
`sus::cast<i8>(x)`

.

Construction from unsigned enum class types where no bits are lost.

For conversions from types with a larger range use
`try_from`

. For lossy conversions
use the `Cast`

concept with
`sus::cast<i8>(x)`

.

Construction from signed enum class types where no bits are lost.

For conversions from types with a larger range use
`try_from`

. For lossy conversions use
the `Cast`

concept with
`sus::cast<i8>(x)`

.

Construction from signed enum types where no bits are lost.

`try_from`

. For lossy conversions use the
`Cast`

concept with
`sus::cast<i8>(x)`

.

Construction from signed primitive types where no bits are lost.

`try_from`

. For lossy conversions use
the `Cast`

concept with
`sus::cast<i8>(x)`

.

Construction from signed types where no bits are lost.

`try_from`

. For lossy conversions use the
`Cast`

concept with
`sus::cast<i8>(x)`

.

Construction from unsigned enum types where no bits are lost.

`try_from`

. For lossy conversions use the
`Cast`

concept with
`sus::cast<i8>(x)`

.

Default constructor, which sets the integer to 0.

Satisfies the `Default`

concept.

The trivial copy and move constructors are implicitly declared, as is the trivial destructor.

Construction from unsigned primitive types where no bits are lost.

`try_from`

. For lossy conversions use
the `Cast`

concept with
`sus::cast<i8>(x)`

.

Constructs a `i8`

from a signed integer type (i8, i16, i32, etc)
where no bits are lost.

`try_from`

. For lossy conversions use the
`Cast`

concept with
`sus::cast<i8>(x)`

.

Constructs a `i8`

from an unsigned integer type (unsigned
int, unsigned long, etc) where no bits are lost.

`try_from`

. For lossy conversions use the
`Cast`

concept with
`sus::cast<i8>(x)`

.

Constructs a `i8`

from a signed primitive integer type (int, long, etc)
where no bits are lost.

`try_from`

. For lossy
conversions use
the `Cast`

concept with
`sus::cast<i8>(x)`

.

Constructs a `i8`

from a signed enum type (or enum class) where no bits
are lost.

`try_from`

. For lossy conversions use
the `Cast`

concept with
`sus::cast<i8>(x)`

.

Constructs a `i8`

from an unsigned primitive integer type (unsigned
int, unsigned long, etc) where no bits are lost.

`try_from`

. For lossy conversions use
the `Cast`

concept with
`sus::cast<i8>(x)`

.

Constructs a `i8`

from an unsigned enum type (or enum class) where no
bits are lost.

`try_from`

. For lossy conversions use the
`Cast`

concept with
`sus::cast<i8>(x)`

.

Converts an integer from big endian to the target's endianness.

On big endian this is a no-op. On little endian the bytes are swapped.

Create an integer value from its representation as a byte array in big endian.

Converts an integer from little endian to the target's endianness.

On little endian this is a no-op. On big endian the bytes are swapped.

Create an integer value from its representation as a byte array in little endian.

Create an integer value from its memory representation as a byte array in native endianness.

As the target platform's native endianness is used, portable code likely
wants to use `from_be_bytes`

or
`from_le_bytes`

, as appropriate
instead.

Constructs a `i8`

from an `Iterator`

by computing the product of all
elements in the itertor.

This method should rarely be called directly, as it is used to satisfy the
`Product`

concept so that
`Iterator::product`

can be
called for iterators over i8.

To handle overflow without panicing, instead of `iter.product()`

, use
`iter.product<OverflowInteger<i8>>()`

.

# Panics

This method will panic if the product of all values overflows and overflow checks are enabled (they are by default), and will wrap if overflow checks are disabled (not the default).

See overflow checks for controlling this behaviour.

Constructs a `i8`

from an `Iterator`

by computing the sum of all
elements in the itertor.

This method should rarely be called directly, as it is used to satisfy the
`Sum`

concept so that
`Iterator::sum`

can be called for
iterators over i8.

To handle overflow without panicing, instead of `iter.sum()`

, use
`iter.sum<OverflowInteger<i8>>()`

.

# Panics

This method will panic if the sum of all values overflows and overflow checks are enabled (they are by default), and will wrap if overflow checks are disabled (not the default).

See overflow checks for controlling this behaviour.

sus::num::Signed<S>

Try to construct a i8 from a signed integer type (i8, i16, i32, etc).

Returns an error if the source value is outside of the range of i8.

sus::num::Unsigned<U>

Try to construct a `i8`

from an unsigned integer type (`u8`

, `u16`

,
`u32`

, etc).

Returns an error if the source value is outside of the range of `i8`

.

sus::num::SignedPrimitiveInteger<S>

Tries to construct a `i8`

from a signed primitive integer type (int,
long, etc).

Returns an error if the source value is outside of the range of i8.

SignedPrimitiveEnum<S> || SignedPrimitiveEnumClass<S>

Tries to construct a i8 from a signed enum type (or enum class).

Returns an error if the source value is outside of the range of i8.

sus::num::UnsignedPrimitiveInteger<U>

Constructs a `i8`

from an unsigned primitive integer type (unsigned
int, unsigned long, etc).

Returns an error if the source value is outside of the range of i8.

UnsignedPrimitiveEnum<U> || UnsignedPrimitiveEnumClass<U>

Constructs a `i8`

from an unsigned enum type (or enum class).

Returns an error if the source value is outside of the range of i8.

# Methods

Computes the absolute value of itself.

# Panics

The absolute value of `i8::MIN`

cannot be represented as an
`i8`

, and attempting to calculate it will panic when overflow checks
are enabled. When disabled (not the default), wrapping abs is performed.

See overflow checks for controlling this behaviour.

Computes the absolute difference between `self`

and `other`

.

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

Returns a mutable pointer to the underlying C++ primitive value type.

This allows Subspace numerics be used with APIs that expect a pointer to a C++ primitive type.

Returns a const pointer to the underlying C++ primitive value type.

This allows Subspace numerics be used with APIs that expect a pointer to a C++ primitive type.

Checked integer addition. Computes `self + rhs`

, returning `None`

if
overflow occurred.

Checked integer addition with an unsigned `rhs`

. Computes `self + rhs`

,
returning `None`

if overflow occurred.

Checked integer division. Computes `self / rhs`

, returning `None`

if
`rhs == 0`

or the division results in overflow.

Checked Euclidean division. Computes `self.`

`div_euclid`

`(rhs)`

, returning
`None`

if `rhs == 0`

or the division results in overflow.

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_log2`

can produce results
more efficiently for base 2, and
`checked_log10`

can produce results
more efficiently for base 10.

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

Returns `None`

if the number is negative or zero.

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

Returns `None`

if the number is negative or zero.

Checked integer multiplication. Computes `self * rhs`

, returning None if
overflow occurred.

Checked negation. Computes `-self`

, returning `None`

if `self == `

`MIN`

.

Checked exponentiation. Computes `pow`

,
returning `None`

if overflow occurred.

Checked integer remainder. Computes `self % rhs`

, returning `None`

if
`rhs == 0`

or the division results in overflow.

Checked Euclidean remainder. Computes `self.`

`rem_euclid`

`(rhs)`

, returning
`None`

if `rhs == 0`

or the division results in overflow.

Checked shift left. Computes `self << rhs`

, returning `None`

if `rhs`

is
larger than or equal to the number of bits in `self`

.

Checked shift right. Computes `self >> rhs`

, returning `None`

if `rhs`

is
larger than or equal to the number of bits in `self`

.

Checked integer subtraction. Computes `self - rhs`

, returning `None`

if
overflow occurred.

Checked integer subtraction with an unsigned `rhs`

. Computes `self - rhs`

,
returning `None`

if overflow occurred.

Returns the number of ones in the binary representation of the current value.

Returns the number of zeros in the binary representation of the current value.

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 round towards zero;
if `self < 0`

, this is equal to round towards +/- infinity.

# Panics

This function will panic if `rhs`

is 0 or the division results in overflow.

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

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

Returns the number of leading ones in the binary representation of the current value.

Returns the number of leading zeros in the binary representation of the current value.

Returns the logarithm of the number with respect to an arbitrary `base`

,
rounded down.

This method might not be optimized owing to implementation details;
`log2`

can produce results more efficiently for base 2, and
`log10`

can produce
results more efficiently for base 10.

# Panics

When the number is negative, zero, or if the `base`

is not at least 2.

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

# Panics

When the number is zero or negative the function will panic.

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

# Panics

When the number is zero or negative the function will panic.

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
(i.e. `i8::MIN`

, then the minimum value
will be returned again and true will be returned for an overflow happening.

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.

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.

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 0.

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 0.

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.

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
(i.e. `i8::MIN`

, then the minimum value
will be returned again and true will be returned for an overflow happening.

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.

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 0.

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 0.

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 by `(N-1)`

where `N`

is the number of bits, and this value is then used to perform the
shift.

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 by `(N-1)`

where `N`

is the number of bits, and this value is then used to perform the
shift.

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.

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.

Raises self to the power of `exp`

, using exponentiation by squaring.

# Panics

This function will panic on overflow if overflow checks are enabled (they are by default) and will wrap if overflow checks are disabled (not the default).

See overflow checks for controlling this behaviour.

Calculates the least nonnegative remainder of `self`

(mod `rhs`

).

This is done as if by the Euclidean division algorithm – given
`r = self.rem_euclid(rhs)`

, `self = rhs * self.div_euclid(rhs) + r`

, and
`0 <= r < abs(rhs)`

.

# Panics

This function will panic if `rhs`

is 0 or the division results in overflow.

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.

Shifts the bits to the left by a specified amount, `n`

, wrapping the
truncated bits to the end of the resulting integer.

Please note this isn't the same operation as the `<<`

shifting operator!

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

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

Saturating absolute value. Computes `abs`

, returning `MAX`

if the current value is `MIN`

instead of overflowing.

Saturating integer addition. Computes `self + rhs`

, saturating at the
numeric bounds instead of overflowing.

Saturating integer addition with an unsigned `rhs`

. Computes `self + rhs`

,
saturating at the numeric bounds instead of overflowing.

Saturating integer division. Computes `self / rhs`

, saturating at the
numeric bounds instead of overflowing.

# Panics

This function will panic if `rhs`

is 0.

Saturating integer multiplication. Computes `self * rhs`

, saturating at
the numeric bounds instead of overflowing.

Saturating integer subtraction. Computes `self - rhs`

, saturating at the
numeric bounds instead of overflowing.

Saturating integer subtraction with an unsigned `rhs`

. Computes
`self - rhs`

, saturating at the numeric bounds instead of overflowing.

Returns a number representing sign of the current value.

- 0 if the number is zero
- 1 if the number is positive
- -1 if the number is negative

Reverses the byte order of the integer.

Converts self to big endian from the target's endianness.

On big endian this is a no-op. On little endian the bytes are swapped.

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

Converts self to little endian from the target's endianness.

On little endian this is a no-op. On big endian the bytes are swapped.

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

Return 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.

Returns the number of trailing ones in the binary representation of the current value.

Returns the number of trailing zeros in the binary representation of the current value.

Unchecked integer addition. Computes `self + rhs`

, assuming overflow
cannot occur.

# Safety

This results in undefined behavior when `self + rhs > `

`i8::MAX`

or
`self + rhs < `

`i8::MIN`

, i.e. when `checked_add`

would return `None`

.

Unchecked integer multiplication. Computes `self * rhs`

, assuming overflow
cannot occur.

# Safety

This results in undefined behavior when `self * rhs > `

`i8::MAX`

or `self * rhs < `

`i8::MIN`

, i.e. when `checked_mul`

would return `None`

.

Unchecked integer subtraction. Computes `self - rhs`

, assuming overflow
cannot occur.

# Safety

This results in undefined behavior when `self - rhs > `

`i8::MAX`

or
`self - rhs < `

`i8::MIN`

, i.e. when `checked_sub`

would return `None`

.

Computes the absolute value of `self`

without any wrapping or panicking.

Wrapping (modular) absolute value. Computes `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.

Wrapping (modular) addition. Computes `self + rhs`

, wrapping around at the
boundary of the type.

Wrapping (modular) addition with an unsigned `rhs`

. Computes `self + rhs`

,
wrapping around at the boundary of the type.

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 0.

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 0.

Wrapping (modular) multiplication. Computes `self * rhs`

, wrapping around
at the boundary of the type.

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.

Wrapping (modular) exponentiation. Computes
`pow`

, wrapping around at the boundary of the
type.

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.

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 0.

what you want instead.

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.

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 Subspace
integer types all implement a
`rotate_right`

function, which may be
what you want instead.

Wrapping (modular) subtraction. Computes `self - rhs`

, wrapping around at
the boundary of the type.

Wrapping (modular) subtraction with an unsigned `rhs`

. Computes
`self - rhs`

, wrapping around at the boundary of the type.

# Conversions

sus::num::SignedPrimitiveInteger<U>

::sus::mem::size_of<U>() >= ::sus::mem::size_of<_primitive>()

Conversion from the numeric type to a C++ primitive type.

This converts to signed primitives which are at least as large as the
`i8`

.

```
auto d = int32_t{3_i32}; // Compiles.
auto e = int32_t(3_i32); // Compiles.
int32_t f = 3_i32; // Compiles.
auto d = uint16_t{3_i32}; // Does not compile.
auto e = uint16_t(3_i32); // Does not compile.
uint16_t f = 3_i32; // Does not compile.
```

Potentially-lossy type conversions can be forced through the
`Cast`

concept, such as
`sus::cast<uint32_t>(3_i32)`

or `sus::cast<int16_t>(3_i32)`

, or even
`sus::cast<u32>(3_i32)`

.

# Operators

Assigns the remainder of dividing itself by `r`

.

Satisfies the `RemAssign<i8>`

concept.

# Panics

This operator will panic when dividing by zero or when division will overflow.

Assigns the bitwise AND of itself and `r`

.

Satisfies the `BitAndAssign<i8>`

concept.

# Panics

This operator will panic when dividing by zero or when division will overflow.

Multiplies itself by `r`

.

Satisfies the `MulAssign<i8>`

concept.

# Panics

This operation will panic on overflow if overflow checks are enabled (they are by default) and will wrap if overflow checks are disabled (not the default).

See overflow checks for controlling this behaviour.

Adds `r`

to itself.

Satisfies the `AddAssign<i8>`

concept.

# Panics

This operation will panic on overflow if overflow checks are enabled (they are by default) and will wrap if overflow checks are disabled (not the default).

See overflow checks for controlling this behaviour.

Computes the negation of the current value.

Satisfies the `Neg<i8>`

concept.

# Panics

This operation will panic on overflow (`self == i8::MIN`

) if overflow
checks are enabled (they are by default) and will wrap if overflow checks
are disabled (not the default).

See overflow checks for controlling this behaviour.

Subtracts `r`

from itself.

Satisfies the `SubAssign<i8>`

concept.

# Panics

This operation will panic on overflow if overflow checks are enabled (they are by default) and will wrap if overflow checks are disabled (not the default).

See overflow checks for controlling this behaviour.

Divides itself by `r`

.

Satisfies the `DivAssign<i8>`

concept.

# Panics

This operator will panic when dividing by zero or when division will overflow.

Shifts itself left by `r`

bits.

Satisfies the `ShlAssign<i8>`

concept.

# Panics

This function will panic when `r`

is not less than the number of bits in
`i8`

if overflow checks are enabled (they are by default) and will
perform a wrapping shift if overflow checks are disabled (not the default).

See overflow checks for controlling this behaviour.

Assignment from signed types where no bits are lost.

`try_from`

. For lossy conversions use the
`Cast`

concept with
`sus::cast<i8>(x)`

.

Assignment from signed primitive types where no bits are lost.

`try_from`

. For lossy conversions use
the `Cast`

concept with
`sus::cast<i8>(x)`

.

Assignment from signed enum types where no bits are lost.

`try_from`

. For lossy conversions use the
`Cast`

concept with
`sus::cast<i8>(x)`

.

Shifts itself right by `r`

bits.

Performs sign extension, copying the sign bit to the right if its set.

Satisfies the `ShrAssign<i8>`

concept.

# Panics

This function will panic when `r`

is not less than the number of bits in
`i8`

if overflow checks are enabled (they are by default) and will
perform a wrapping shift if overflow checks are disabled (not the default).

Assigns the bitwise XOR of itself and `r`

.

Satisfies the `BitXorAssign<i8>`

concept.

Assigns the bitwise OR of itself and `r`

.

Satisfies the `BitOrAssign<i8>`

concept.

Computes the bitwise complement (bitwise inverse) of the current value.

Satisfies the `BitNot<i8>`

concept.

# Data Members

The inner primitive value. Prefer to cast to the desired primitive type,
such as with `int32_t{n}`

for a numeric value `n`

.