! Copyright (C) 2009 Doug Coleman.
! See http://factorcode.org/license.txt for BSD license.
-USING: accessors alien.c-types arrays fry kernel locals math
-math.bitwise random sequences sequences.private
+USING: accessors alien.c-types alien.data kernel
+math math.bitwise random sequences sequences.private
specialized-arrays ;
SPECIALIZED-ARRAY: uint
IN: random.cmwc
swap >>c
swap >>b
swap >>a
- swap [ 1 - >>i ] [ <uint-array> >>Q ] bi
+ swap [ 1 - >>i ] [ uint <c-array> >>Q ] bi
dup b>> 1 - >>r
dup Q>> length 1 - >>mod ; inline
[ c>> + ] tri
[ >fixnum -32 shift cmwc c<< ]
- [ cmwc [ b>> bitand ] [ c>> + ] bi 32 bits ] bi
+ [ cmwc [ b>> bitand ] [ c>> w+ ] bi ] bi
dup cmwc r>> > [
cmwc [ 1 + ] change-c drop
- cmwc b>> - 32 bits
+ cmwc b>> w-
] when
- cmwc swap '[ r>> _ - 32 bits dup ] [ i>> ] [ Q>> ] tri set-nth-unsafe ;
+ cmwc swap '[ r>> _ w- dup ] [ i>> ] [ Q>> ] tri set-nth-unsafe ;
: cmwc-4096 ( -- cmwc )
4096