random getstate/setstate

telengard bsturk at comcast.net
Sun Aug 10 21:02:17 PDT 2008


Thank you very much Wyverex for the help.

If I'm reading the code correctly the index is doing all the magic to keep track of where to resume?

thanks,
~telengard

> import
>    std.c.time,
>    std.random,
>    std.stdio;
> 
> 
> class Random
> {
>    private uint seed, index;
> 
>    this()
>    {
>       seed = time( null );
>       rand_seed( seed, index );
>    }
> 
>    this( uint _seed, uint _index = 0 )
>    {
>      seed = _seed;
>      index = _index;
>      rand_seed( seed, index );
>    }
> 
>    void reseed( )
>    {
>      seed = time( null );
>      index = 0;
>      rand_seed( seed, index );
>    }
> 
>    void reseed( uint _seed, uint _index = 0 )
>    {
>      seed = _seed;
>      index = _index;
>      rand_seed( seed, index );
>    }
> 
>    synchronized int next() { ++index; return rand(); }
> 
>    uint getseed() { return seed; }
>    uint getindex() { return index; }
> }
> 
> void main()
> {
>    //first random
>    auto r = new Random;
>    writefln("%d %d %d", r.next, r.next, r.next);
>    //reset seed..
>    auto r2 = new Random(r.getseed);
>    writefln("%d %d %d", r2.next, r2.next, r2.next);
> 
>    //get next 3
>    writefln("%d %d %d", r.next, r.next, r.next);
> 
>    //use index to get same numbers with seed
>    r.reseed(r.getseed, r.getindex-3);
>    writefln("%d %d %d", r.next, r.next, r.next);
> }
> 



More information about the Digitalmars-d-learn mailing list