diff options
author | Andreas Rottmann <a.rottmann@gmx.at> | 2010-07-22 18:26:00 +0200 |
---|---|---|
committer | Andy Wingo <wingo@pobox.com> | 2010-07-26 15:00:49 +0200 |
commit | 77b139121d0344d8a89f4d8b85739a3447bac196 (patch) | |
tree | 6288de8faa1e1c9df7a9c545a50f9078f7b3467a /libguile/random.h | |
parent | 2d6a14adc901ea71409ef82c4021f235e99d420d (diff) |
Allow exposing of random number generator state
Now the random number generator state can be obtained in external
(i.e. `read'/`write'-able) form via the new procedure
`random-state->external'. An externalized state can be reinstantiated by
calling `external->random-state'.
* libguile/random.c (scm_i_init_rstate_scm, scm_i_expose_rstate): New
internal functions.
* libguile/random.c (scm_c_make_rstate_scm, scm_external_to_random_state,
scm_random_state_to_external): New public functions.
* libguile/random.h: Add prototypes for the above functions.
* libguile/random.h (scm_t_rng): Add new fields `init_rstate_scm' and
`expose_rstate'.
* libguile/random.c (scm_init_random): Initialize the new fields in
`scm_the_rng'.
Diffstat (limited to 'libguile/random.h')
-rw-r--r-- | libguile/random.h | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/libguile/random.h b/libguile/random.h index 6cf404f8d..402c3f1cb 100644 --- a/libguile/random.h +++ b/libguile/random.h @@ -3,7 +3,7 @@ #ifndef SCM_RANDOM_H #define SCM_RANDOM_H -/* Copyright (C) 1999,2000,2001, 2006, 2008 Free Software Foundation, Inc. +/* Copyright (C) 1999,2000,2001, 2006, 2008, 2010 Free Software Foundation, Inc. * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public License @@ -49,6 +49,8 @@ typedef struct scm_t_rng { unsigned long (*random_bits) (scm_t_rstate *state); /* gives 32 random bits */ void (*init_rstate) (scm_t_rstate *state, const char *seed, int n); scm_t_rstate *(*copy_rstate) (scm_t_rstate *state); + void (*init_rstate_scm) (scm_t_rstate *state, SCM exposed); + SCM (*expose_rstate) (scm_t_rstate *state); } scm_t_rng; SCM_API scm_t_rng scm_the_rng; @@ -66,12 +68,15 @@ typedef struct scm_t_i_rstate { SCM_INTERNAL unsigned long scm_i_uniform32 (scm_t_i_rstate *); SCM_INTERNAL void scm_i_init_rstate (scm_t_i_rstate *, const char *seed, int n); SCM_INTERNAL scm_t_i_rstate *scm_i_copy_rstate (scm_t_i_rstate *); +SCM_INTERNAL void scm_i_init_rstate_scm (scm_t_i_rstate *state, SCM value); +SCM_INTERNAL SCM scm_i_expose_rstate (scm_t_i_rstate *state); /* * Random number library functions */ SCM_API scm_t_rstate *scm_c_make_rstate (const char *, int); +SCM_API scm_t_rstate *scm_c_make_rstate_scm (SCM external); SCM_API scm_t_rstate *scm_c_default_rstate (void); #define scm_c_uniform32(RSTATE) scm_the_rng.random_bits (RSTATE) SCM_API double scm_c_uniform01 (scm_t_rstate *); |