random getstate/setstate
Wyverex
wyverex.cypher at gmail.com
Sun Aug 10 20:22:12 PDT 2008
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