pike.git / src / builtin.cmod

version» Context lines:

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();    }    -  /*! @decl int random(int max) -  *! -  *! This function returns a random number in the range -  *! @expr{0 .. @[max]-1@}. -  *! -  *! @seealso -  *! @[Random] -  */ -  PIKEFUN int(0..) random(int limit) +  static INT_TYPE read_int(INT_TYPE limit)    { -  if(limit <= 1) RETURN 0; +  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;    THIS->buffer_bits -= bits;    if( ret < limit ) -  RETURN ret; +  return ret;    }    Pike_error("Failed to generate random data.\n");    }    -  static INT_TYPE read_int(INT_TYPE i) +  /*! @decl int random(int max) +  *! +  *! This function returns a random number in the range +  *! @expr{0 .. @[max]-1@}. +  *! +  *! @seealso +  *! @[Random] +  */ +  PIKEFUN int(0..) random(int limit)    { -  push_int(i); -  struct program *p = Pike_fp->current_object->prog; -  apply_current(find_shared_string_identifier(MK_STRING("random"), p), 1); -  if( TYPEOF(Pike_sp[-1]) != T_INT ) -  Pike_error("Illegal return value from random.\n"); -  -  INT_TYPE r = Pike_sp[-1].u.integer; -  pop_stack(); -  return r; +  RETURN read_int(limit);    }       /*! @decl float random(float max)    *!    *! This function returns a random number in the range    *! @expr{0 .. @[max]-ɛ@}.    *!    *! @seealso    *! @[Random]    */