dxorshift: random number generators from the extended Xorshift family
Basile B. via Digitalmars-d-announce
digitalmars-d-announce at puremagic.com
Sun May 15 07:25:44 PDT 2016
On Sunday, 15 May 2016 at 13:26:52 UTC, Joseph Rushton Wakeling
wrote:
> On Sunday, 15 May 2016 at 11:15:38 UTC, Joseph Rushton Wakeling
> wrote:
>> On Sunday, 15 May 2016 at 10:43:55 UTC, Joseph Rushton
>> Wakeling wrote:
>>> Probably the best way to handle this is to handle the
>>> take-the-address side of things by a @trusted wrapper that
>>> uses `return ref` to guarantee the pointer remains valid for
>>> the lifetime of the wrapper itself.
>>
>> Note, I've been mulling over this myself for a while, so I'll
>> probably put something together in a future dxorshift release
>> (and probably try to get it in Phobos ASAP, as it will be very
>> helpful in avoiding the worst cases of the existing RNG
>> functionality).
>
> Sneak preview to try out, before I tidy this up for actual
> inclusion in the library (needs docs, etc):
The wrapper could be smaller with an alias this:
----
public struct SafeUniformRNG (BaseRNG)
if (isUniformRNG!BaseRNG)
{
public:
this (return ref BaseRNG generator) @trusted
{
this.gen = &generator;
}
enum isUniformRandom = BaseRNG.isUniformRandom;
ref BaseRNG getGen()
{
return *gen;
}
alias getGen this;
private:
BaseRNG* gen;
invariant()
{
assert(this.gen !is null);
}
}
----
even if I'm not 100% sure if this is conform with previous
version. At least the tests pass.
More information about the Digitalmars-d-announce
mailing list