Ruby 2.0.0p353(2013-11-22revision43784)

- Main Page
- Modules
- Data Structures
- Files

- File List
- Globals

Data Structures | Macros | Typedefs | Enumerations | Functions | Variables
random.c File Reference
`#include "ruby/ruby.h"`
`#include <limits.h>`
`#include <time.h>`
`#include <sys/types.h>`
`#include <sys/stat.h>`
`#include <math.h>`
`#include <errno.h>`
`#include "siphash.c"`
Include dependency graph for random.c:

Go to the source code of this file.

## Data Structures
struct | MT
struct | rb_random_t

## Macros
#define | N 624
#define | M 397
#define | MATRIX_A 0x9908b0dfU /* constant vector a */
#define | UMASK 0x80000000U /* most significant w-r bits */
#define | LMASK 0x7fffffffU /* least significant r bits */
#define | MIXBITS(u, v) ( ((u) & UMASK) | ((v) & LMASK) )
#define | TWIST(u, v) ((MIXBITS((u),(v)) >> 1) ^ ((v)&1U ? MATRIX_A : 0U))
#define | genrand_initialized(mt) ((mt)->next != 0)
#define | uninit_genrand(mt) ((mt)->next = 0)
#define | DEFAULT_SEED_CNT 4
#define | BDIGITS(x) (RBIGNUM_DIGITS(x))
#define | BITSPERDIG (SIZEOF_BDIGITS*CHAR_BIT)
#define | BIGRAD ((BDIGIT_DBL)1 << BITSPERDIG)
#define | DIGSPERINT (SIZEOF_INT/SIZEOF_BDIGITS)
#define | BIGUP(x) ((BDIGIT_DBL)(x) << BITSPERDIG)
#define | BIGDN(x) RSHIFT((x),BITSPERDIG)
#define | BIGLO(x) ((BDIGIT)((x) & (BIGRAD-1)))
#define | BDIGMAX ((BDIGIT)-1)
#define | roomof(n, m) (int)(((n)+(m)-1) / (m))
#define | numberof(array) (int)(sizeof(array) / sizeof((array)[0]))
#define | SIZEOF_INT32 (31/CHAR_BIT + 1)
#define | id_minus '-'
#define | id_plus '+'
#define | DEFAULT_SEED_LEN (DEFAULT_SEED_CNT * (int)sizeof(int))
#define | USE_DEV_URANDOM 0
#define | BIG_GET32(big, i) (RBIGNUM_DIGITS(big)[(i)])
#define | BIG_SET32(big, i, d) (RBIGNUM_DIGITS(big)[(i)] = (d))
#define | SIP_HASH_STREAMING 0
#define | sip_hash24 ruby_sip_hash24
#define | BYTE_ORDER LITTLE_ENDIAN
#define | LITTLE_ENDIAN 1234
#define | BIG_ENDIAN 4321

## Typedefs
typedef int | int_must_be_32bit_at_least [sizeof(int)*CHAR_BIT< 32?-1:1]

## Enumerations
enum | { MT_MAX_STATE = N }

## Functions
static void | init_genrand (struct MT *mt, unsigned int s)
static void | init_by_array (struct MT *mt, unsigned int init_key[], int key_length)
static void | next_state (struct MT *mt)
static unsigned int | genrand_int32 (struct MT *mt)
static double | genrand_real (struct MT *mt)
static double | int_pair_to_real_inclusive (unsigned int a, unsigned int b)
static double | genrand_real2 (struct MT *mt)
static VALUE | rand_init (struct MT *mt, VALUE vseed)
static VALUE | random_seed (void)
static rb_random_t * | rand_start (rb_random_t *r)
static struct MT * | default_mt (void)
unsigned int | rb_genrand_int32 (void)
double | rb_genrand_real (void)
static void | random_mark (void *ptr)
static void | random_free (void *ptr)
static size_t | random_memsize (const void *ptr)
static rb_random_t * | get_rnd (VALUE obj)
static rb_random_t * | try_get_rnd (VALUE obj)
static VALUE | random_alloc (VALUE klass)
static VALUE | random_init (int argc, VALUE *argv, VALUE obj)
static void | fill_random_seed (unsigned int seed[DEFAULT_SEED_CNT])
static VALUE | make_seed_value (const void *ptr)
static VALUE | random_get_seed (VALUE obj)
static VALUE | random_copy (VALUE obj, VALUE orig)
static VALUE | mt_state (const struct MT *mt)
static VALUE | random_state (VALUE obj)
static VALUE | random_s_state (VALUE klass)
static VALUE | random_left (VALUE obj)
static VALUE | random_s_left (VALUE klass)
static VALUE | random_dump (VALUE obj)
static VALUE | random_load (VALUE obj, VALUE dump)
static VALUE | rb_f_srand (int argc, VALUE *argv, VALUE obj)
static unsigned long | make_mask (unsigned long x)
static unsigned long | limited_rand (struct MT *mt, unsigned long limit)
static VALUE | limited_big_rand (struct MT *mt, struct RBignum *limit)
unsigned long | rb_genrand_ulong_limited (unsigned long limit)
unsigned int | rb_random_int32 (VALUE obj)
double | rb_random_real (VALUE obj)
static VALUE | ulong_to_num_plus_1 (unsigned long n)
unsigned long | rb_random_ulong_limited (VALUE obj, unsigned long limit)
static VALUE | random_bytes (VALUE obj, VALUE len)
VALUE | rb_random_bytes (VALUE obj, long n)
static VALUE | range_values (VALUE vmax, VALUE *begp, VALUE *endp, int *exclp)
static VALUE | rand_int (struct MT *mt, VALUE vmax, int restrictive)
static double | float_value (VALUE v)
static VALUE | rand_range (struct MT *mt, VALUE range)
static VALUE | rand_random (int argc, VALUE *argv, rb_random_t *rnd)
static VALUE | random_rand (int argc, VALUE *argv, VALUE obj)
static VALUE | random_equal (VALUE self, VALUE other)
static VALUE | rb_f_rand (int argc, VALUE *argv, VALUE obj)
static VALUE | random_s_rand (int argc, VALUE *argv, VALUE obj)
static VALUE | init_randomseed (struct MT *mt, unsigned int initial[DEFAULT_SEED_CNT])
void | Init_RandomSeed (void)
st_index_t | rb_hash_start (st_index_t h)
st_index_t | rb_memhash (const void *ptr, long len)
static void | Init_RandomSeed2 (void)
void | rb_reset_random_seed (void)
void | Init_Random (void)

## Variables
static rb_random_t | default_rand
VALUE | rb_cRandom
static ID | id_rand
static ID | id_bytes
static const rb_data_type_t | random_data_type
static st_index_t | hashseed
union {
uint8_t key [16]
uint32_t u32 [(16 *sizeof(uint8_t)-1)/sizeof(uint32_t)]
} | sipseed

## Macro Definition Documentation

#define BDIGITS | ( |  | x | ) | (RBIGNUM_DIGITS(x))

Definition at line 263 of file random.c.

Referenced by int_pair_to_real_inclusive(), and random_load().

#define BDIGMAX ((BDIGIT)-1)

Definition at line 270 of file random.c.

#define BIG_ENDIAN 4321

Definition at line 1363 of file random.c.

#define BIG_GET32 | ( |  | big,
|  |  | i
| ) |  | (RBIGNUM_DIGITS(big)[(i)])

Referenced by limited_big_rand().

#define BIG_SET32 | ( |  | big,
|  |  | i,
|  |  | d
| ) |  | (RBIGNUM_DIGITS(big)[(i)] = (d))

Referenced by limited_big_rand().

#define BIGDN | ( |  | x | ) | RSHIFT((x),BITSPERDIG)

Definition at line 268 of file random.c.

Referenced by mt_state().

#define BIGLO | ( |  | x | ) | ((BDIGIT)((x) & (BIGRAD-1)))

Definition at line 269 of file random.c.

Referenced by mt_state().

#define BIGRAD ((BDIGIT_DBL)1 << BITSPERDIG)

Definition at line 265 of file random.c.

#define BIGUP | ( |  | x | ) | ((BDIGIT_DBL)(x) << BITSPERDIG)

Definition at line 267 of file random.c.

#define BITSPERDIG (SIZEOF_BDIGITS*CHAR_BIT)

Definition at line 264 of file random.c.

Referenced by int_pair_to_real_inclusive(), rand_init(), and random_load().

#define BYTE_ORDER LITTLE_ENDIAN

Definition at line 1357 of file random.c.

Referenced by SHA256_Transform(), and SHA512_Transform().

#define DEFAULT_SEED_CNT 4

Definition at line 226 of file random.c.

Referenced by Init_RandomSeed(), and random_seed().

#define DEFAULT_SEED_LEN (DEFAULT_SEED_CNT * (int)sizeof(int))

Definition at line 479 of file random.c.

Referenced by fill_random_seed(), init_randomseed(), and make_seed_value().

#define DIGSPERINT (SIZEOF_INT/SIZEOF_BDIGITS)

Definition at line 266 of file random.c.

Referenced by random_load().

#define genrand_initialized | ( |  | mt | ) | ((mt)->next != 0)

Definition at line 109 of file random.c.

Referenced by rand_start().

#define id_minus '-'

Definition at line 328 of file random.c.

Referenced by range_values().

#define id_plus '+'

Definition at line 329 of file random.c.

Referenced by rand_range().

#define LITTLE_ENDIAN 1234

Definition at line 1360 of file random.c.

Referenced by SHA256_Transform(), and SHA512_Transform().

#define LMASK 0x7fffffffU /* least significant r bits */

Definition at line 96 of file random.c.

#define M 397

Definition at line 93 of file random.c.

Referenced by next_state().

#define MATRIX_A 0x9908b0dfU /* constant vector a */

Definition at line 94 of file random.c.

#define MIXBITS | ( |  | u,
|  |  | v
| ) |  | ( ((u) & UMASK) | ((v) & LMASK) )

Definition at line 97 of file random.c.

#define N 624

Definition at line 92 of file random.c.

Referenced by init_by_array(), init_genrand(), and next_state().

#define numberof | ( |  | array | ) | (int)(sizeof(array) / sizeof((array)[0]))

Definition at line 273 of file random.c.

Referenced by Init_RandomSeed(), mt_state(), rand_init(), random_copy(), and random_load().

#define roomof | ( |  | n,
|  |  | m
| ) |  | (int)(((n)+(m)-1) / (m))

Definition at line 272 of file random.c.

Referenced by int_pair_to_real_inclusive(), rand_init(), and random_load().

#define sip_hash24 ruby_sip_hash24

Definition at line 1352 of file random.c.

Referenced by rb_memhash().

#define SIP_HASH_STREAMING 0

Definition at line 1351 of file random.c.

#define SIZEOF_INT32 (31/CHAR_BIT + 1)

Definition at line 274 of file random.c.

Referenced by limited_rand(), mt_state(), rand_init(), and rb_random_bytes().

#define TWIST | ( |  | u,
|  |  | v
| ) |  | ((MIXBITS((u),(v)) >> 1) ^ ((v)&1U ? MATRIX_A : 0U))

Definition at line 98 of file random.c.

Referenced by next_state().

#define UMASK 0x80000000U /* most significant w-r bits */

Definition at line 95 of file random.c.

#define uninit_genrand | ( |  | mt | ) | ((mt)->next = 0)

Definition at line 110 of file random.c.

Referenced by rb_reset_random_seed().

#define USE_DEV_URANDOM 0

Definition at line 484 of file random.c.

## Typedef Documentation

typedef int int_must_be_32bit_at_least[sizeof(int)*CHAR_BIT< 32?-1:1]

Definition at line 89 of file random.c.

## Enumeration Type Documentation

anonymous enum

Enumerator
MT_MAX_STATE |

Definition at line 100 of file random.c.

## Function Documentation

static struct MT* default_mt | ( | void |  | ) |
| static

Definition at line 244 of file random.c.

References rb_random_t::mt, and rand_start().

Referenced by rb_f_rand(), rb_genrand_int32(), rb_genrand_real(), and rb_genrand_ulong_limited().

static void fill_random_seed | ( | unsigned int | seed[DEFAULT_SEED_CNT] | ) |
| static

Definition at line 488 of file random.c.

References CHAR_BIT, DEFAULT_SEED_LEN, fstat, gettimeofday(), int, memset(), n, NULL, O_NONBLOCK, rb_cloexec_open(), rb_update_max_fd(), S_ISCHR, stat, timeval::tv_sec, and timeval::tv_usec.

Referenced by init_randomseed(), and random_seed().

static double float_value | ( | VALUE | v | ) |
| inline static

Definition at line 1079 of file random.c.

References INT2FIX, isinf(), isnan, rb_class_new_instance(), rb_eSystemCallError, rb_exc_raise(), and RFLOAT_VALUE.

Referenced by rand_random(), and rand_range().

static unsigned int genrand_int32 | ( | struct MT * | mt | ) |
| static

Definition at line 180 of file random.c.

References MT::left, MT::next, and next_state().

Referenced by genrand_real(), genrand_real2(), Init_RandomSeed(), limited_big_rand(), limited_rand(), rb_genrand_int32(), rb_random_bytes(), and rb_random_int32().

static double genrand_real | ( | struct MT * | mt | ) |
| static

Definition at line 199 of file random.c.

References a, b, and genrand_int32().

Referenced by rand_random(), rand_range(), rb_f_rand(), rb_genrand_real(), and rb_random_real().

static double genrand_real2 | ( | struct MT * | mt | ) |
| static

Definition at line 209 of file random.c.

References a, b, genrand_int32(), and int_pair_to_real_inclusive().

Referenced by rand_range().

static rb_random_t* get_rnd | ( | VALUE | obj | ) |
| static

Definition at line 362 of file random.c.

References ptr, and TypedData_Get_Struct.

Referenced by random_copy(), random_dump(), random_equal(), random_get_seed(), random_init(), random_left(), random_load(), random_rand(), and random_state().

static void init_by_array | ( | struct MT * | mt,
|  | unsigned int | init_key[],
|  | int | key_length
| ) |  |
| static

Definition at line 135 of file random.c.

References i, init_genrand(), N, and MT::state.

Referenced by init_randomseed(), and rand_init().

static void init_genrand | ( | struct MT * | mt,
|  | unsigned int | s
| ) |  |
| static

Definition at line 114 of file random.c.

References MT::left, N, MT::next, and MT::state.

Referenced by init_by_array(), and rand_init().

void Init_Random | ( | void |  | ) |

Definition at line 1475 of file random.c.

References CLASS_OF, id_bytes, id_rand, Init_RandomSeed2(), random_alloc(), random_bytes(), random_copy(), random_dump(), random_equal(), random_get_seed(), random_init(), random_left(), random_load(), random_rand(), random_s_left(), random_s_rand(), random_s_state(), random_seed(), random_state(), rb_cObject, rb_cRandom, rb_define_alloc_func(), rb_define_class(), rb_define_const(), rb_define_global_function(), rb_define_method(), rb_define_private_method(), rb_define_singleton_method(), rb_f_rand(), rb_f_srand(), rb_gc_register_mark_object(), rb_intern, and TypedData_Wrap_Struct.

static VALUE init_randomseed | ( | struct MT * | mt,
|  | unsigned int | initial[DEFAULT_SEED_CNT]
| ) |  |
| static

Definition at line 1375 of file random.c.

References DEFAULT_SEED_LEN, fill_random_seed(), init_by_array(), make_seed_value(), and memset().

Referenced by Init_RandomSeed().

void Init_RandomSeed | ( | void |  | ) |

Definition at line 1386 of file random.c.

References default_rand, DEFAULT_SEED_CNT, genrand_int32(), hashseed, i, init_randomseed(), rb_random_t::mt, numberof, r, rb_global_variable(), rb_random_t::seed, and sipseed.

static void Init_RandomSeed2 | ( | void |  | ) |
| static

Definition at line 1433 of file random.c.

References rb_cBignum, RB_TYPE_P, RBASIC, rb_random_t::seed, and T_BIGNUM.

Referenced by Init_Random().

static double int_pair_to_real_inclusive | ( | unsigned int | a,
|  | unsigned int | b
| ) |  |
| static

Definition at line 277 of file random.c.

References BDIGIT, BDIGITS, BITSPERDIG, FIX2ULONG, FIXNUM_P, i, INT2FIX, len, m, MEMMOVE, MEMZERO, r, rb_big2dbl(), rb_big_mul(), rb_big_new(), rb_big_rshift(), RBIGNUM_LEN, and roomof.

Referenced by genrand_real2().

static VALUE limited_big_rand | ( | struct MT * | mt,
|  | struct RBignum * | limit
| ) |  |
| static

Definition at line 851 of file random.c.

References BDIGIT, BIG_GET32, BIG_SET32, genrand_int32(), i, len, make_mask(), rb_big_clone(), rb_big_norm(), RBIGNUM_LEN, RBIGNUM_SET_SIGN, retry, SIZEOF_BDIGITS, and val.

Referenced by rand_int(), and rand_range().

static unsigned long limited_rand | ( | struct MT * | mt,
|  | unsigned long | limit
| ) |  |
| static

Definition at line 829 of file random.c.

References genrand_int32(), i, make_mask(), retry, SIZEOF_INT32, and val.

Referenced by rand_int(), rand_range(), rb_genrand_ulong_limited(), and rb_random_ulong_limited().

static unsigned long make_mask | ( | unsigned long | x | ) |
| static

Definition at line 815 of file random.c.

Referenced by limited_big_rand(), and limited_rand().

static VALUE make_seed_value | ( | const void * | ptr | ) |
| static

Definition at line 539 of file random.c.

References BDIGIT, DEFAULT_SEED_LEN, len, MEMCPY, NEWOBJ_OF, rb_big_norm(), rb_big_resize(), rb_cBignum, RBIGNUM_DIGITS, RBIGNUM_SET_SIGN, SIZEOF_BDIGITS, and T_BIGNUM.

Referenced by init_randomseed(), and random_seed().

static VALUE mt_state | ( | const struct MT * | mt | ) |
| static

Definition at line 618 of file random.c.

References BDIGIT, BIGDN, BIGLO, d, i, numberof, rb_big_new(), rb_big_norm(), RBIGNUM_DIGITS, SIZEOF_BDIGITS, SIZEOF_INT32, and MT::state.

Referenced by random_dump(), random_s_state(), and random_state().

static void next_state | ( | struct MT * | mt | ) |
| static

Definition at line 161 of file random.c.

References MT::left, M, N, MT::next, p, MT::state, and TWIST.

Referenced by genrand_int32().

static VALUE rand_init | ( | struct MT * | mt,
|  | VALUE | vseed
| ) |  |
| static

Definition at line 390 of file random.c.

References ALLOC_N, BITSPERDIG, buf, FIX2LONG, i, init_by_array(), init_genrand(), int, len, memset(), MT_MAX_STATE, numberof, rb_eTypeError, rb_obj_classname(), rb_raise(), rb_to_int(), RBIGNUM_DIGITS, RBIGNUM_LEN, roomof, SIZEOF_BDIGITS, SIZEOF_INT32, T_BIGNUM, T_FIXNUM, TYPE, and xfree.

Referenced by rand_start(), random_init(), and rb_f_srand().

static VALUE rand_int | ( | struct MT * | mt,
|  | VALUE | vmax,
|  | int | restrictive
| ) |  |
| static

Definition at line 1041 of file random.c.

References FIX2LONG, FIXNUM_P, INT2FIX, limited_big_rand(), limited_rand(), LONG2NUM, max(), Qnil, r, rb_big_clone(), rb_big_minus(), rb_bigzero_p(), RB_GC_GUARD, RBIGNUM, RBIGNUM_SET_SIGN, RBIGNUM_SIGN, ret, and ULONG2NUM.

Referenced by rand_random(), and rb_f_rand().

static VALUE rand_random | ( | int | argc,
|  | VALUE * | argv,
|  | rb_random_t * | rnd
| ) |  |
| static

Definition at line 1208 of file random.c.

References float_value(), genrand_real(), max(), rb_random_t::mt, NIL_P(), NUM2LONG, Qfalse, Qnil, rand_int(), rand_range(), rb_check_arity, rb_check_to_float(), rb_check_to_integer(), rb_eArgError, rb_exc_new3(), rb_exc_raise(), rb_float_new(), rb_obj_as_string(), rb_str_append(), rb_str_new_cstr(), RB_TYPE_P, T_FLOAT, v, and void.

Referenced by random_rand(), and random_s_rand().

static VALUE rand_range | ( | struct MT * | mt,
|  | VALUE | range
| ) |  |
| inline static

Definition at line 1090 of file random.c.

References BUILTIN_TYPE, DBL2NUM, end, f, FIX2LONG, FIXNUM_P, float_value(), genrand_real(), genrand_real2(), id_plus, INT2FIX, isinf(), limited_big_rand(), limited_rand(), LONG2NUM, max(), min(), NIL_P(), Qfalse, Qnil, Qundef, r, range_values(), rb_big_minus(), rb_big_norm(), rb_big_plus(), rb_bigzero_p(), rb_check_to_float(), rb_check_to_integer(), rb_float_new(), rb_funcall2(), rb_to_float(), RB_TYPE_P, RBIGNUM, RBIGNUM_SIGN, RFLOAT_VALUE, T_BIGNUM, T_FLOAT, T_NIL, TYPE, ULONG2NUM, and v.

Referenced by rand_random(), and rb_f_rand().

static rb_random_t* rand_start | ( | rb_random_t * | r | ) |
| static

Definition at line 234 of file random.c.

References genrand_initialized, rb_random_t::mt, r, rand_init(), random_seed(), and rb_random_t::seed.

Referenced by default_mt(), random_s_rand(), and try_get_rnd().

static VALUE random_alloc | ( | VALUE | klass | ) |
| static

Definition at line 381 of file random.c.

References INT2FIX, obj, rb_random_t::seed, and TypedData_Make_Struct.

Referenced by Init_Random().

static VALUE random_bytes | ( | VALUE | obj,
|  | VALUE | len
| ) |  |
| static

Definition at line 990 of file random.c.

References NUM2LONG, rb_random_bytes(), and rb_to_int().

Referenced by Init_Random().

static VALUE random_copy | ( | VALUE | obj,
|  | VALUE | orig
| ) |  |
| static

Definition at line 601 of file random.c.

References get_rnd(), MT::left, rb_random_t::mt, MT::next, numberof, obj, OBJ_INIT_COPY, and MT::state.

Referenced by Init_Random().

static VALUE random_dump | ( | VALUE | obj | ) |
| static

Definition at line 671 of file random.c.

References get_rnd(), INT2FIX, MT::left, rb_random_t::mt, mt_state(), rb_ary_new2(), rb_ary_push(), and rb_random_t::seed.

Referenced by Init_Random().

static VALUE random_equal | ( | VALUE | self,
|  | VALUE | other
| ) |  |
| static

Definition at line 1273 of file random.c.

References get_rnd(), MT::left, memcmp(), rb_random_t::mt, MT::next, Qfalse, Qtrue, rb_funcall2(), rb_intern, rb_obj_class(), RTEST, rb_random_t::seed, and MT::state.

Referenced by Init_Random().

static void random_free | ( | void * | ptr | ) |
| static

Definition at line 340 of file random.c.

References xfree.

static VALUE random_get_seed | ( | VALUE | obj | ) |
| static

Definition at line 594 of file random.c.

References get_rnd(), and rb_random_t::seed.

Referenced by Init_Random().

static VALUE random_init | ( | int | argc,
|  | VALUE * | argv,
|  | VALUE | obj
| ) |  |
| static

Definition at line 462 of file random.c.

References get_rnd(), rb_random_t::mt, obj, rand_init(), random_seed(), rb_check_copyable(), rb_check_frozen, rb_scan_args(), and rb_random_t::seed.

Referenced by Init_Random().

static VALUE random_left | ( | VALUE | obj | ) |
| static

Definition at line 656 of file random.c.

References get_rnd(), INT2FIX, MT::left, and rb_random_t::mt.

Referenced by Init_Random().

static VALUE random_load | ( | VALUE | obj,
|  | VALUE | dump
| ) |  |
| static

Definition at line 685 of file random.c.

References ary, BDIGIT, BDIGITS, BITSPERDIG, Check_Type, d, DIGSPERINT, FIX2ULONG, FIXNUM_P, get_rnd(), int, INT2FIX, MT::left, len, memset(), rb_random_t::mt, MT::next, NUM2ULONG, numberof, obj, RARRAY_LEN, RARRAY_PTR(), rb_check_copyable(), rb_eArgError, rb_raise(), rb_to_int(), RBIGNUM_DIGITS, RBIGNUM_LEN, roomof, rb_random_t::seed, SIZEOF_BDIGITS, MT::state, state, T_ARRAY, and T_BIGNUM.

Referenced by Init_Random().

static void random_mark | ( | void * | ptr | ) |
| static

Definition at line 334 of file random.c.

References rb_gc_mark().

static size_t random_memsize | ( | const void * | ptr | ) |
| static

Definition at line 347 of file random.c.

static VALUE random_rand | ( | int | argc,
|  | VALUE * | argv,
|  | VALUE | obj
| ) |  |
| static

Definition at line 1202 of file random.c.

References get_rnd(), and rand_random().

Referenced by Init_Random().

static VALUE random_s_left | ( | VALUE | klass | ) |
| static

Definition at line 664 of file random.c.

References INT2FIX, MT::left, and rb_random_t::mt.

Referenced by Init_Random().

static VALUE random_s_rand | ( | int | argc,
|  | VALUE * | argv,
|  | VALUE | obj
| ) |  |
| static

Definition at line 1346 of file random.c.

References rand_random(), and rand_start().

Referenced by Init_Random().

static VALUE random_s_state | ( | VALUE | klass | ) |
| static

Definition at line 649 of file random.c.

References rb_random_t::mt, and mt_state().

Referenced by Init_Random().

static VALUE random_seed | ( | void |  | ) |
| static

Definition at line 572 of file random.c.

References buf, DEFAULT_SEED_CNT, fill_random_seed(), and make_seed_value().

Referenced by Init_Random(), rand_start(), random_init(), and rb_f_srand().

static VALUE random_state | ( | VALUE | obj | ) |
| static

Definition at line 641 of file random.c.

References get_rnd(), rb_random_t::mt, and mt_state().

Referenced by Init_Random().

static VALUE range_values | ( | VALUE | vmax,
|  | VALUE * | begp,
|  | VALUE * | endp,
|  | int * | exclp
| ) |  |
| static

Definition at line 1028 of file random.c.

References end, id_minus, NIL_P(), Qfalse, r, rb_funcall2(), rb_range_values(), and rb_respond_to().

Referenced by rand_range().

static VALUE rb_f_rand | ( | int | argc,
|  | VALUE * | argv,
|  | VALUE | obj
| ) |  |
| static

Definition at line 1318 of file random.c.

References DBL2NUM, default_mt(), genrand_real(), INT2FIX, NIL_P(), Qfalse, r, rand_int(), rand_range(), rb_scan_args(), rb_to_int(), and v.

Referenced by Init_Random().

static VALUE rb_f_srand | ( | int | argc,
|  | VALUE * | argv,
|  | VALUE | obj
| ) |  |
| static

Definition at line 796 of file random.c.

References default_rand, rb_random_t::mt, r, rand_init(), random_seed(), rb_scan_args(), rb_secure(), and rb_random_t::seed.

Referenced by Init_Random().

unsigned int rb_genrand_int32 | ( | void |  | ) |

Definition at line 250 of file random.c.

References default_mt(), and genrand_int32().

double rb_genrand_real | ( | void |  | ) |

Definition at line 257 of file random.c.

References default_mt(), and genrand_real().

unsigned long rb_genrand_ulong_limited | ( | unsigned long | limit | ) |

Definition at line 908 of file random.c.

References default_mt(), and limited_rand().

Referenced by big_sparse_p().

st_index_t rb_hash_start | ( | st_index_t | h | ) |

Definition at line 1416 of file random.c.

References hashseed, and st_hash_start.

Referenced by match_hash(), method_hash(), proc_hash(), rb_any_hash(), rb_obj_hash(), and recursive_hash().

st_index_t rb_memhash | ( | const void * | ptr,
|  | long | len
| ) |  |

Definition at line 1422 of file random.c.

References sip_hash24, sipseed, and sip_uint64_t::u32.

Referenced by BigDecimal_hash(), d_lite_hash(), flo_hash(), match_hash(), nucomp_hash(), nurat_hash(), rb_big_hash(), rb_str_hash(), and reg_hash().

VALUE rb_random_bytes | ( | VALUE | obj,
|  | long | n
| ) |  |

Definition at line 996 of file random.c.

References CHAR_BIT, genrand_int32(), i, id_bytes, len, LONG2NUM, rb_random_t::mt, ptr, r, rb_funcall2(), rb_str_new(), RSTRING_PTR, SIZEOF_INT32, and try_get_rnd().

Referenced by random_bytes().

unsigned int rb_random_int32 | ( | VALUE | obj | ) |

Definition at line 914 of file random.c.

References genrand_int32(), id_rand, INT2FIX, rb_random_t::mt, NUM2ULONG, rb_big_plus(), rb_funcall2(), try_get_rnd(), and ULONG2NUM.

double rb_random_real | ( | VALUE | obj | ) |

Definition at line 931 of file random.c.

References d, genrand_real(), id_rand, rb_random_t::mt, NUM2DBL, rb_eRangeError, rb_funcall2(), rb_raise(), try_get_rnd(), and v.

unsigned long rb_random_ulong_limited | ( | VALUE | obj,
|  | unsigned long | limit
| ) |  |

Definition at line 962 of file random.c.

References id_rand, limited_rand(), rb_random_t::mt, NUM2ULONG, r, rb_eRangeError, rb_funcall2(), rb_num_negative_p(), rb_raise(), rb_to_int(), try_get_rnd(), ulong_to_num_plus_1(), and v.

void rb_reset_random_seed | ( | void |  | ) |

Definition at line 1443 of file random.c.

References default_rand, INT2FIX, rb_random_t::mt, r, rb_random_t::seed, and uninit_genrand.

Referenced by rb_thread_atfork().

static rb_random_t* try_get_rnd | ( | VALUE | obj | ) |
| static

Definition at line 370 of file random.c.

References DATA_PTR(), NULL, rand_start(), rb_cRandom, and rb_typeddata_is_kind_of().

Referenced by rb_random_bytes(), rb_random_int32(), rb_random_real(), and rb_random_ulong_limited().

static VALUE ulong_to_num_plus_1 | ( | unsigned long | n | ) |
| inline static

Definition at line 949 of file random.c.

References INT2FIX, rb_big_plus(), and ULONG2NUM.

Referenced by rb_random_ulong_limited().

## Variable Documentation

rb_random_t default_rand
| static

Definition at line 228 of file random.c.

Referenced by Init_RandomSeed(), rb_f_srand(), and rb_reset_random_seed().

st_index_t hashseed
| static

Definition at line 1368 of file random.c.

Referenced by Init_RandomSeed(), and rb_hash_start().

ID id_bytes
| static

Definition at line 330 of file random.c.

Referenced by Init_Random(), and rb_random_bytes().

ID id_rand
| static

Definition at line 330 of file random.c.

Referenced by Init_Random(), rb_random_int32(), rb_random_real(), and rb_random_ulong_limited().

uint8_t key[16]

Definition at line 1370 of file random.c.

const rb_data_type_t random_data_type
| static

Initial value:
= {
"random",
{
random_mark,
random_free,
random_memsize,
},
}
random_mark
static void random_mark(void *ptr)
Definition: random.c:334
random_free
static void random_free(void *ptr)
Definition: random.c:340
random_memsize
static size_t random_memsize(const void *ptr)
Definition: random.c:347

Definition at line 352 of file random.c.

VALUE rb_cRandom

Definition at line 327 of file random.c.

union { ... } sipseed

Referenced by Init_RandomSeed(), and rb_memhash().

uint32_t u32[(16 *sizeof(uint8_t)-1)/sizeof(uint32_t)]

Definition at line 1371 of file random.c.