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