Struct Subspace :: sus :: num :: isize
An address-sized signed integer.
This type is capable of holding any offset or distance in a single memory
allocation, since memory allocations are bounded at
isize::MAX
.
Note that it is possible for a pointer to be larger than an address under some architectures, with a pointer holding additional data such as capabilities. See CHERI for an example. So this type is not always the same size as a pointer.
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<isize>(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<isize>(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<isize>(x)
.
Construction from signed enum 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<isize>(x)
.
Construction from signed primitive 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<isize>(x)
.
Construction from signed 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<isize>(x)
.
Construction from unsigned enum 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<isize>(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.
For conversions from types with a larger range use
try_from
. For lossy conversions use
the Cast
concept with
sus::cast<isize>(x)
.
Constructs a isize
from a signed integer type (i8, i16, i32, etc)
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<isize>(x)
.
Constructs a isize
from an unsigned integer type (unsigned
int, unsigned long, etc) 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<isize>(x)
.
Constructs a isize
from a signed primitive integer type (int, long, etc)
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<isize>(x)
.
Constructs a isize
from a signed enum type (or enum class) 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<isize>(x)
.
Constructs a isize
from an unsigned primitive integer type (unsigned
int, unsigned long, etc) 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<isize>(x)
.
Constructs a isize
from an unsigned enum type (or enum class) 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<isize>(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.
sus::mem::IsMoveRef<decltype(it)>
Constructs a isize
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 isize.
To handle overflow without panicing, instead of iter.product()
, use
iter.product<OverflowInteger<isize>>()
.
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 isize
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 isize.
To handle overflow without panicing, instead of iter.sum()
, use
iter.sum<OverflowInteger<isize>>()
.
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 isize from a signed integer type (i8, i16, i32, etc).
Returns an error if the source value is outside of the range of isize.
sus::num::Unsigned<U>
Try to construct a isize
from an unsigned integer type (u8
, u16
,
u32
, etc).
Returns an error if the source value is outside of the range of isize
.
sus::num::SignedPrimitiveInteger<S>
Tries to construct a isize
from a signed primitive integer type (int,
long, etc).
Returns an error if the source value is outside of the range of isize.
SignedPrimitiveEnum<S> || SignedPrimitiveEnumClass<S>
Tries to construct a isize from a signed enum type (or enum class).
Returns an error if the source value is outside of the range of isize.
sus::num::UnsignedPrimitiveInteger<U>
Constructs a isize
from an unsigned primitive integer type (unsigned
int, unsigned long, etc).
Returns an error if the source value is outside of the range of isize.
UnsignedPrimitiveEnum<U> || UnsignedPrimitiveEnumClass<U>
Constructs a isize
from an unsigned enum type (or enum class).
Returns an error if the source value is outside of the range of isize.
Methods
Computes the absolute value of itself.
Panics
The absolute value of isize::MIN
cannot be represented as an
isize
, 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. isize::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. isize::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 >
isize::MAX
or
self + rhs <
isize::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 >
isize::MAX
or self * rhs <
isize::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 >
isize::MAX
or
self - rhs <
isize::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
isize
.
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<isize>
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<isize>
concept.
Panics
This operator will panic when dividing by zero or when division will overflow.
Multiplies itself by r
.
Satisfies the MulAssign<isize>
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<isize>
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<isize>
concept.
Panics
This operation will panic on overflow (self == isize::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<isize>
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<isize>
concept.
Panics
This operator will panic when dividing by zero or when division will overflow.
Shifts itself left by r
bits.
Satisfies the ShlAssign<isize>
concept.
Panics
This function will panic when r
is not less than the number of bits in
isize
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.
For conversions from types with a larger range use
try_from
. For lossy conversions use the
Cast
concept with
sus::cast<isize>(x)
.
Assignment from signed primitive 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<isize>(x)
.
Assignment from signed enum 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<isize>(x)
.
Shifts itself right by r
bits.
Performs sign extension, copying the sign bit to the right if its set.
Satisfies the ShrAssign<isize>
concept.
Panics
This function will panic when r
is not less than the number of bits in
isize
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<isize>
concept.
Assigns the bitwise OR of itself and r
.
Satisfies the BitOrAssign<isize>
concept.
Computes the bitwise complement (bitwise inverse) of the current value.
Satisfies the BitNot<isize>
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
.