diff options
author | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2009-07-18 00:16:25 +0000 |
---|---|---|
committer | nobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2009-07-18 00:16:25 +0000 |
commit | f3d022543ef2afde3d53e7f6b3028eafe39d0ef4 (patch) | |
tree | b8b953ffb6bd74579a97e173543db10f0f41c93f /random.c | |
parent | 8195282dfc4752ae8ec7fc1cb18f7c8e5f3d9d65 (diff) | |
download | ruby-f3d022543ef2afde3d53e7f6b3028eafe39d0ef4.tar.gz |
* random.c (rb_random_{int32,real,bytes,int}): added functions for
extension libraries.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@24189 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'random.c')
-rw-r--r-- | random.c | 29 |
1 files changed, 25 insertions, 4 deletions
@@ -211,7 +211,7 @@ struct Random { static struct Random default_rand; -unsigned long +unsigned int rb_genrand_int32(void) { return genrand_int32(&default_rand.rnd.mt); @@ -767,6 +767,20 @@ rb_rand_internal(unsigned long i) 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 @@ rb_rand_internal(unsigned long i) 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 @@ rand_int(struct MT *mt, VALUE vmax) * * 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 @@ random_int(VALUE obj, VALUE vmax) return add_to_begin(beg, v); } +#define random_int rb_random_int + /* * call-seq: * prng.float -> float |