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