ruby-changes:12489
From: nobu <ko1@a...>
Date: Sat, 18 Jul 2009 09:16:48 +0900 (JST)
Subject: [ruby-changes:12489] Ruby:r24189 (trunk): * random.c (rb_random_{int32,real,bytes,int}): added functions for
nobu 2009-07-18 09:16:25 +0900 (Sat, 18 Jul 2009) New Revision: 24189 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=24189 Log: * random.c (rb_random_{int32,real,bytes,int}): added functions for extension libraries. Modified files: trunk/ChangeLog trunk/include/ruby/intern.h trunk/random.c Index: include/ruby/intern.h =================================================================== --- include/ruby/intern.h (revision 24188) +++ include/ruby/intern.h (revision 24189) @@ -524,9 +524,13 @@ VALUE rb_range_beg_len(VALUE, long*, long*, long, int); int rb_range_values(VALUE range, VALUE *begp, VALUE *endp, int *exclp); /* random.c */ -unsigned long rb_genrand_int32(void); +unsigned int rb_genrand_int32(void); double rb_genrand_real(void); void rb_reset_random_seed(void); +VALUE rb_random_bytes(VALUE rnd, long n); +VALUE rb_random_int(VALUE rnd, VALUE max); +unsigned int rb_random_int32(VALUE rnd); +double rb_random_real(VALUE rnd); /* re.c */ #define rb_memcmp memcmp int rb_memcicmp(const void*,const void*,long); Index: ChangeLog =================================================================== --- ChangeLog (revision 24188) +++ ChangeLog (revision 24189) @@ -1,3 +1,8 @@ +Sat Jul 18 09:16:18 2009 Nobuyoshi Nakada <nobu@r...> + + * random.c (rb_random_{int32,real,bytes,int}): added functions for + extension libraries. + Sat Jul 18 09:07:00 2009 Nobuyoshi Nakada <nobu@r...> * random.c (fill_random_seed): use cryptographic service on Windows. Index: random.c =================================================================== --- random.c (revision 24188) +++ random.c (revision 24189) @@ -211,7 +211,7 @@ static struct Random default_rand; -unsigned long +unsigned int rb_genrand_int32(void) { return genrand_int32(&default_rand.rnd.mt); @@ -767,6 +767,20 @@ return limited_rand(mt, i); } +unsigned int +rb_random_int32(VALUE obj) +{ + rb_random_t *rnd = get_rnd(obj); + return genrand_int32(&rnd->mt); +} + +double +rb_random_real(VALUE obj) +{ + rb_random_t *rnd = get_rnd(obj); + return genrand_real(&rnd->mt); +} + /* * call-seq: prng.bytes(size) -> prng * @@ -776,8 +790,13 @@ static VALUE random_bytes(VALUE obj, VALUE len) { + return rb_random_bytes(obj, FIX2LONG(rb_to_int(len))); +} + +VALUE +rb_random_bytes(VALUE obj, long n) +{ rb_random_t *rnd = get_rnd(obj); - long n = FIX2LONG(rb_to_int(len)); VALUE bytes = rb_str_new(0, n); char *ptr = RSTRING_PTR(bytes); unsigned int r, i; @@ -868,8 +887,8 @@ * * Otherwise, it raises an ArgumentError. */ -static VALUE -random_int(VALUE obj, VALUE vmax) +VALUE +rb_random_int(VALUE obj, VALUE vmax) { VALUE v, beg = Qundef; rb_random_t *rnd = get_rnd(obj); @@ -887,6 +906,8 @@ return add_to_begin(beg, v); } +#define random_int rb_random_int + /* * call-seq: * prng.float -> float -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/