random-state: allow initialization from the array

Array used for initialization is an array of the final values of
internal vector used to generate next randoms which should be a
product of initialization from a random seed.

This ability is required by CLHS to be able to read back the printed
random state. To print readable representation of random state
*print-readably* should be bound to T.

Signed-off-by: Daniel Kochmański <daniel@turtleware.eu>
This commit is contained in:
Daniel Kochmański 2015-09-21 18:08:50 +02:00
parent 03efe83b99
commit 82ef9aa318

View file

@ -212,6 +212,9 @@ ecl_make_random_state(cl_object rs)
case t_random:
z->random.value = cl_copy_seq(rs->random.value);
break;
case t_vector:
z->random.value = cl_copy_seq(rs);
break;
case t_fixnum:
/* XXX: If we'll decide to use 64-bit algorithm for
appropriate platforms then this will be replaced
@ -219,9 +222,6 @@ ecl_make_random_state(cl_object rs)
z->random.value = init_genrand
(ecl_to_uint32_t(rs));
break;
/* case t_vector: */
/* z->random.value = init_by_array(rs, cl_length(rs)); */
/* break; */
default:
FEwrong_type_only_arg(@[make-random-state], rs,
@[random-state]);