From 4cb927722d1e9423f77387020d19472fd6f78702 Mon Sep 17 00:00:00 2001 From: Doug Coleman Date: Fri, 2 Oct 2009 01:54:17 -0500 Subject: [PATCH] add seed-random method to random.sfmt, fix formatting --- basis/random/sfmt/sfmt.factor | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/basis/random/sfmt/sfmt.factor b/basis/random/sfmt/sfmt.factor index 5335e22632..6b0fc66be2 100644 --- a/basis/random/sfmt/sfmt.factor +++ b/basis/random/sfmt/sfmt.factor @@ -22,9 +22,9 @@ STRUCT: sfmt-state { r2 uint-4 } ; TUPLE: sfmt -{ state sfmt-state } -{ uint-array uint-array } -{ uint-4-array uint-4-array } ; + { state sfmt-state } + { uint-array uint-array } + { uint-4-array uint-4-array } ; : wA ( w -- wA ) dup 1 hlshift vbitxor ; inline @@ -99,12 +99,15 @@ M:: sfmt generate ( sfmt -- ) swap >>seed 0 >>ix ; +: init-sfmt ( sfmt -- sfmt' ) + dup [ >>uint-array ] [ >>uint-4-array ] bi* + [ generate ] keep ; inline + : ( seed n m mask -- sfmt ) sfmt new swap >>state - dup [ >>uint-array ] [ >>uint-4-array ] bi* - [ generate ] keep ; inline + init-sfmt ; inline : refill-sfmt? ( sfmt -- ? ) state>> [ ix>> ] [ n>> 4 * ] bi >= ; @@ -120,6 +123,10 @@ PRIVATE> M: sfmt random-32* ( sfmt -- n ) dup refill-sfmt? [ dup generate ] when next ; inline +M: sfmt seed-random ( sfmt seed -- sfmt ) + [ [ state>> ] dip >>seed drop ] + [ drop init-sfmt ] 2bi ; + : ( seed -- sfmt ) 348 330 uint-4{ HEX: BFFFFFF6 HEX: BFFAFFFF HEX: DDFECB7F HEX: DFFFFFEF } ; inline