summaryrefslogtreecommitdiff
path: root/random.c
diff options
context:
space:
mode:
authornobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2009-07-18 00:16:25 +0000
committernobu <nobu@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2009-07-18 00:16:25 +0000
commitf3d022543ef2afde3d53e7f6b3028eafe39d0ef4 (patch)
treeb8b953ffb6bd74579a97e173543db10f0f41c93f /random.c
parent8195282dfc4752ae8ec7fc1cb18f7c8e5f3d9d65 (diff)
* 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.c29
1 files changed, 25 insertions, 4 deletions
diff --git a/random.c b/random.c
index 57ab673831..ceec247fa1 100644
--- a/random.c
+++ b/random.c
@@ -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