typecons.Option: Implement toHash forwarder
This commit is contained in:
parent
b0dc7b59e5
commit
180c4d3956
@ -338,6 +338,24 @@ struct Option(T)
|
||||
return this;
|
||||
}
|
||||
|
||||
version (D_Ddoc)
|
||||
{
|
||||
/**
|
||||
* If $(D_PARAM T) has a `toHash()` method, $(D_PSYMBOL Option) defines
|
||||
* `toHash()` which returns `T.toHash()` if it is set or 0 otherwise.
|
||||
*
|
||||
* Returns: Hash value.
|
||||
*/
|
||||
size_t toHash() const;
|
||||
}
|
||||
else static if (is(typeof(T.init.toHash()) == size_t))
|
||||
{
|
||||
size_t toHash() const
|
||||
{
|
||||
return isNothing ? 0U : this.value.toHash();
|
||||
}
|
||||
}
|
||||
|
||||
alias get this;
|
||||
}
|
||||
|
||||
@ -452,3 +470,23 @@ struct Option(T)
|
||||
assert(((ref e) => e)(Option!int().or(i)) == 5);
|
||||
}
|
||||
}
|
||||
|
||||
// Implements toHash() for nothing
|
||||
@nogc nothrow pure @safe unittest
|
||||
{
|
||||
static struct ToHash
|
||||
{
|
||||
size_t toHash() const @nogc nothrow pure @safe
|
||||
{
|
||||
return 1U;
|
||||
}
|
||||
}
|
||||
{
|
||||
Option!ToHash toHash;
|
||||
assert(toHash.toHash() == 0U);
|
||||
}
|
||||
{
|
||||
auto toHash = Option!ToHash(ToHash());
|
||||
assert(toHash.toHash() == 1U);
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user