ruby-changes:17093
From: nobu <ko1@a...>
Date: Wed, 25 Aug 2010 18:00:23 +0900 (JST)
Subject: [ruby-changes:17093] Ruby:r29093 (trunk): * array.c (rb_ary_{shuffle_bang,sample}): use Random class object.
nobu 2010-08-25 18:00:17 +0900 (Wed, 25 Aug 2010) New Revision: 29093 http://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=rev&revision=29093 Log: * array.c (rb_ary_{shuffle_bang,sample}): use Random class object. * random.c (try_get_rnd): use default_rand for Random as same as singleton methods. Modified files: trunk/ChangeLog trunk/array.c trunk/random.c Index: array.c =================================================================== --- array.c (revision 29092) +++ array.c (revision 29093) @@ -3748,7 +3748,7 @@ static VALUE rb_ary_shuffle_bang(int argc, VALUE *argv, VALUE ary) { - VALUE *ptr, opts, randgen = Qnil; + VALUE *ptr, opts, randgen = rb_cRandom; long i = RARRAY_LEN(ary); if (OPTHASH_GIVEN_P(opts)) { @@ -3811,7 +3811,7 @@ rb_ary_sample(int argc, VALUE *argv, VALUE ary) { VALUE nv, result, *ptr; - VALUE opts, randgen = Qnil; + VALUE opts, randgen = rb_cRandom; long n, len, i, j, k, idx[10]; len = RARRAY_LEN(ary); Index: ChangeLog =================================================================== --- ChangeLog (revision 29092) +++ ChangeLog (revision 29093) @@ -1,5 +1,10 @@ -Wed Aug 25 17:56:40 2010 Nobuyoshi Nakada <nobu@r...> +Wed Aug 25 17:59:50 2010 Nobuyoshi Nakada <nobu@r...> + * array.c (rb_ary_{shuffle_bang,sample}): use Random class object. + + * random.c (try_get_rnd): use default_rand for Random as same as + singleton methods. + * array.c (rb_ary_sample): use frozen shared array to get rid of reallocation. Index: random.c =================================================================== --- random.c (revision 29092) +++ random.c (revision 29093) @@ -229,17 +229,22 @@ static VALUE rand_init(struct MT *mt, VALUE vseed); static VALUE random_seed(void); -static struct MT * -default_mt(void) +static rb_random_t * +rand_start(rb_random_t *r) { - rb_random_t *r = &default_rand; struct MT *mt = &r->mt; if (!genrand_initialized(mt)) { r->seed = rand_init(mt, random_seed()); } - return mt; + return r; } +static struct MT * +default_mt(void) +{ + return &rand_start(&default_rand)->mt; +} + unsigned int rb_genrand_int32(void) { @@ -363,6 +368,9 @@ static rb_random_t * try_get_rnd(VALUE obj) { + if (obj == rb_cRandom) { + return rand_start(&default_rand); + } if (!rb_typeddata_is_kind_of(obj, &random_data_type)) return NULL; return DATA_PTR(obj); } -- ML: ruby-changes@q... Info: http://www.atdot.net/~ko1/quickml/