Report a bug
If you spot a problem with this page, click here to create a GitHub issue.
Improve this page
Quickly fork, edit online, and submit a pull request for this page.
Requires a signed-in GitHub account. This works well for small changes.
If you'd like to make larger changes you may want to consider using
a local clone.
mir.checkedint
This module implements integral arithmetic primitives that check
for out-of-range results.
Integral arithmetic operators operate on fixed width types.
Results that are not representable in those fixed widths are silently
truncated to fit.
This module offers integral arithmetic primitives that produce the
same results, but set an 'overflow' flag when such truncation occurs.
The setting is sticky, meaning that numerous operations can be cascaded
and then the flag need only be checked at the end.
Whether the operation is signed or unsigned is indicated by an 's' or 'u'
suffix, respectively. While this could be achieved without such suffixes by
using overloading on the signedness of the types, the suffix makes it clear
which is happening without needing to examine the types.
While the generic versions of these functions are computationally expensive
relative to the cost of the operation itself, compiler implementations are free
to recognize them and generate equivalent and faster code.
References Fast Integer Overflow Checks
License:
Authors:
Walter Bright
Source core/checkedint.d
- pure nothrow @nogc @safe int
adds
(intx
, inty
, ref scope booloverflow
);
pure nothrow @nogc @safe longadds
(longx
, longy
, ref scope booloverflow
); - Add two signed integers, checking for overflow.The overflow is sticky, meaning a sequence of operations can be done and overflow need only be checked at the end.Parameters:
int x
left operand int y
right operand bool overflow
set if an overflow occurs, is not affected otherwise Returns:the sum - pure nothrow @nogc @safe uint
addu
(uintx
, uinty
, ref scope booloverflow
);
pure nothrow @nogc @safe ulongaddu
(ulongx
, ulongy
, ref scope booloverflow
); - Add two unsigned integers, checking for overflow (aka carry).The overflow is sticky, meaning a sequence of operations can be done and overflow need only be checked at the end.Parameters:
uint x
left operand uint y
right operand bool overflow
set if an overflow occurs, is not affected otherwise Returns:the sum - pure nothrow @nogc @safe int
subs
(intx
, inty
, ref scope booloverflow
);
pure nothrow @nogc @safe longsubs
(longx
, longy
, ref scope booloverflow
); - Subtract two signed integers, checking for overflow.The overflow is sticky, meaning a sequence of operations can be done and overflow need only be checked at the end.Parameters:
int x
left operand int y
right operand bool overflow
set if an overflow occurs, is not affected otherwise Returns:the difference - pure nothrow @nogc @safe uint
subu
(uintx
, uinty
, ref scope booloverflow
);
pure nothrow @nogc @safe ulongsubu
(ulongx
, ulongy
, ref scope booloverflow
); - Subtract two unsigned integers, checking for overflow (aka borrow).The overflow is sticky, meaning a sequence of operations can be done and overflow need only be checked at the end.Parameters:
uint x
left operand uint y
right operand bool overflow
set if an overflow occurs, is not affected otherwise Returns:the difference - pure nothrow @nogc @safe int
negs
(intx
, ref scope booloverflow
);
pure nothrow @nogc @safe longnegs
(longx
, ref scope booloverflow
); - Negate an integer.Parameters:
int x
operand bool overflow
set if x cannot be negated, is not affected otherwise Returns:the negation of x - pure nothrow @nogc @safe int
muls
(intx
, inty
, ref scope booloverflow
);
pure nothrow @nogc @safe longmuls
(longx
, longy
, ref scope booloverflow
); - Multiply two signed integers, checking for overflow.The overflow is sticky, meaning a sequence of operations can be done and overflow need only be checked at the end.Parameters:
int x
left operand int y
right operand bool overflow
set if an overflow occurs, is not affected otherwise Returns:the product - pure nothrow @nogc @safe uint
mulu
(uintx
, uinty
, ref scope booloverflow
);
pure nothrow @nogc @safe ulongmulu
(ulongx
, uinty
, ref scope booloverflow
);
pure nothrow @nogc @safe ulongmulu
(ulongx
, ulongy
, ref scope booloverflow
); - Multiply two unsigned integers, checking for overflow (aka carry).The overflow is sticky, meaning a sequence of operations can be done and overflow need only be checked at the end.Parameters:
uint x
left operand uint y
right operand bool overflow
set if an overflow occurs, is not affected otherwise Returns:the product
Copyright © 2016-2023 by Ilya Yaroshenko | Page generated by
Ddoc on Mon Nov 6 15:24:34 2023