View source code
Display the source code in std/checkedint.d from which this
page was generated on github.
Report a bug
If you spot a problem with this page, click here to create a
Bugzilla 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
local clone.
std.checkedint.Checked/checked - multiple declarations
Function checked
Convenience function that turns an integral into the corresponding Checked
instance by using template argument deduction. The hook type may be specified
(by default Abort).
Parameters
| Name | Description |
|---|---|
| Hook | type that customizes the behavior, by default Abort |
| T | type represetinfg the underlying represantion of the Checked instance |
| value | the actual value of the representation |
Returns
A Checked instance customized by the provided Hook and value
Example
static assert(is(typeof(checked(42)) == Checked!int));
writeln(checked(42)); // Checked!int(42)
static assert(is(typeof(checked!WithNaN(42)) == Checked!(int, WithNaN)));
writeln(checked!WithNaN(42)); // Checked!(int, WithNaN)(42)
Struct Checked
Checked integral type wraps an integral T and customizes its behavior with the
help of a Hook type. The type wrapped must be one of the predefined integrals
(unqualified), or another instance of Checked.
struct Checked(T, Hook)
if (isIntegral!T || is(T == Checked!(U, H), U, H));
Constructors
| Name | Description |
|---|---|
this
(rhs)
|
Constructor taking a value properly convertible to the underlying type. U
may be either an integral that can be converted to T without a loss, or
another Checked instance whose representation may be in turn converted to
T without a loss.
|
this
(str)
|
Construct from a decimal string. The conversion follows the same rules as
to converting a string to the wrapped T type.
|
Fields
| Name | Type | Description |
|---|---|---|
hook
|
Hook | hook is a member variable if it has state, or an alias for Hook
otherwise.
|
Methods
| Name | Description |
|---|---|
get
()
|
|
opAssign
(rhs)
|
Assignment operator. Has the same constraints as the constructor. |
opBinary
(rhs)
|
Defines binary operators +, -, *, /, %, ^^, &, |, ^, <<, >>,
and >>>. If Hook defines hookOpBinary, opBinary forwards to Checked!(typeof(hook.
|
opBinaryRight
(lhs)
|
Defines binary operators +, -, *, /, %, ^^, &, |, ^, <<,
>>, and >>> for the case when a built-in numeric or Boolean type is on
the left-hand side, and a Checked instance is on the right-hand side.
|
opCast
()
|
Casting operator to integral, bool, or floating point type.
|
opCmp
(rhs)
|
Compares this against rhs for ordering. If Hook defines hookOpCmp,
the function forwards to hook. Otherwise, the
result of the built-in comparison operation is returned.
|
opEquals
(rhs)
|
Compares this against rhs for equality.
|
opOpAssign
(rhs)
|
Defines operators +=, -=, *=, /=, %=, ^^=, &=, |=, ^=,
<<=, >>=, and >>>=.
|
opUnary
()
|
Defines unary operators +, -, ~, ++, and --. Unary + is not
overridable and always has built-in behavior (returns this). For the
others, if Hook defines hookOpUnary, opUnary forwards to Checked!(typeof(hook.
|
toHash
()
|
Generates a hash for this. If Hook defines hookToHash, the call
immediately returns hook. If Hook does not
implement hookToHash, but it has state, a hash will be generated for
the Hook using the built-in function and it will be xored with the
hash of the payload.
|
toString
(sink, fmt)
|
Writes a string representation of this to a sink.
|
Aliases
| Name | Description |
|---|---|
Representation
|
The type of the integral subject to checking. |
Parameters
| Name | Description |
|---|---|
| T | type that is wrapped in the Checked type |
| Hook | hook type that customizes the behavior of the Checked type |
Example
// Hook that ignores all problems.
static struct Ignore
{
@nogc nothrow pure @safe static:
Dst onBadCast(Dst, Src)(Src src) { return cast(Dst) src; }
Lhs onLowerBound(Rhs, T)(Rhs rhs, T bound) { return cast(T) rhs; }
T onUpperBound(Rhs, T)(Rhs rhs, T bound) { return cast(T) rhs; }
bool hookOpEquals(Lhs, Rhs)(Lhs lhs, Rhs rhs) { return lhs == rhs; }
int hookOpCmp(Lhs, Rhs)(Lhs lhs, Rhs rhs) { return (lhs > rhs) - (lhs < rhs); }
typeof(~Lhs()) onOverflow(string x, Lhs)(ref Lhs lhs) { return mixin(x ~ "lhs"); }
typeof(Lhs() + Rhs()) onOverflow(string x, Lhs, Rhs)(Lhs lhs, Rhs rhs)
{
static if (x == "/")
return typeof(lhs / rhs) .min;
else
return mixin("lhs" ~ x ~ "rhs");
}
}
auto x = Checked!(int, Ignore)(5) + 7;
Authors
License
Copyright © 1999-2024 by the D Language Foundation | Page generated by ddox.