Class: ISAAC
Direct Known Subclasses
Instance Method Summary collapse
-
#marshal_dump ⇒ Object
:nodoc:.
-
#marshal_load(ary) ⇒ Object
:nodoc:.
-
#rand ⇒ Object
Return a random float in the range 0..1.
-
#rand32 ⇒ Object
Return a random integer in the range 0..2**32-1.
-
#srand(ary) ⇒ Object
Seed the generator with an array of up to ISAAC::RANDSIZ integers in the range 0..2**32-1.
Instance Method Details
#marshal_dump ⇒ Object
:nodoc:
77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 |
# File 'ext/redshift/util/isaac/isaac.c', line 77
static VALUE
ISAAC_marshal_dump(VALUE self)
{
randctx *ctx;
int i;
int ary_size = sizeof(randctx)/sizeof(ub4);
VALUE ary;
Data_Get_Struct(self, randctx, ctx);
ary = rb_ary_new2(ary_size);
for (i = 0; i < ary_size; i++) {
rb_ary_push(ary, UINT2NUM(((ub4 *)ctx)[i]));
}
return ary;
}
|
#marshal_load(ary) ⇒ Object
:nodoc:
96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 |
# File 'ext/redshift/util/isaac/isaac.c', line 96
static VALUE
ISAAC_marshal_load(VALUE self, VALUE ary)
{
randctx *ctx;
int i;
int ary_size = sizeof(randctx)/sizeof(ub4);
Data_Get_Struct(self, randctx, ctx);
if (RARRAY_LEN(ary) != ary_size)
rb_raise(rb_eArgError, "bad length in loaded ISAAC data");
for (i = 0; i < ary_size; i++) {
((ub4 *)ctx)[i] = NUM2UINT(RARRAY_PTR(ary)[i]);
}
return self;
}
|
#rand ⇒ Object
Return a random float in the range 0..1.
61 62 63 64 65 66 67 68 69 70 71 72 73 74 |
# File 'ext/redshift/util/isaac/isaac.c', line 61
static VALUE
ISAAC_rand(VALUE self)
{
randctx *ctx;
Data_Get_Struct(self, randctx, ctx);
if (!ctx->randcnt--) {
rs_isaac_rand(ctx);
ctx->randcnt=RANDSIZ-1;
}
return rb_float_new(ctx->randrsl[ctx->randcnt] / 4294967295.0);
}
|
#rand32 ⇒ Object
Return a random integer in the range 0..2**32-1.
43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
# File 'ext/redshift/util/isaac/isaac.c', line 43
static VALUE
ISAAC_rand32(VALUE self)
{
randctx *ctx;
Data_Get_Struct(self, randctx, ctx);
if (!ctx->randcnt--) {
rs_isaac_rand(ctx);
ctx->randcnt=RANDSIZ-1;
}
return UINT2NUM(ctx->randrsl[ctx->randcnt]);
}
|
#srand(ary) ⇒ Object
Seed the generator with an array of up to ISAAC::RANDSIZ integers in the range 0..2**32-1. More entries are ignored. Missing entries are treated as 0. Returns nil.
21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
# File 'ext/redshift/util/isaac/isaac.c', line 21
static VALUE
ISAAC_srand(VALUE self, VALUE ary)
{
int i;
randctx *ctx;
Check_Type(ary, T_ARRAY);
Data_Get_Struct(self, randctx, ctx);
MEMZERO(ctx, randctx, 1);
for (i=min(RANDSIZ, RARRAY_LEN(ary))-1; i>=0; i--) {
ctx->randrsl[i] = NUM2UINT(RARRAY_PTR(ary)[i]);
}
rs_isaac_init(ctx, 1);
return Qnil;
}
|