pike.git
/
src
/
builtin.cmod
version
»
Context lines:
10
20
40
80
file
none
3
pike.git/src/builtin.cmod:2097:
push_int(8); apply_current(f_RandomInterface_random_string_fun_num, 1); if( TYPEOF(Pike_sp[-1]) != T_STRING || Pike_sp[-1].u.string->len != 8 ) Pike_error("Illegal return value from random_string.\n"); THIS->int_buffer = ((INT64 *)Pike_sp[-1].u.string->str)[0]; THIS->buffer_bits = 64; pop_stack(); }
-
PIKEFUN int(0..) random(int
(0..)
limit)
+
PIKEFUN int(0..) random(int limit)
{ if(limit <= 1) RETURN 0; int bits = my_log2(limit-1)+1; int mask = (1<<bits)-1; for(int i=0; i<1000; i++) { if(THIS->buffer_bits < bits) fill_int_buffer(); INT_TYPE ret = THIS->int_buffer&mask; THIS->int_buffer >>= bits;