Skip to content
Snippets Groups Projects
Commit b34d9f1d authored by liam's avatar liam
Browse files

Generalize rng-types.

git-svn-id: svn+ssh://pop/opt/space/mathematics/gsl/trunk@3122 a3d8a0fb-c1db-0310-ace7-a616afeb9e30
parent c1c9a25a
Branches
Tags
No related merge requests found
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
; description: Definition of GSLL system ; description: Definition of GSLL system
; date: ; date:
; author: Liam Healy ; author: Liam Healy
; modified: Fri Jul 14 2006 - 17:46 ; modified: Fri Jul 14 2006 - 21:51
;******************************************************** ;********************************************************
;;; $Id: $ ;;; $Id: $
...@@ -91,5 +91,4 @@ ...@@ -91,5 +91,4 @@
(:module random (:module random
:depends-on (init) :depends-on (init)
:components :components
(:file "rng-types")) ((:file "rng-types")))))
))
...@@ -3,7 +3,7 @@ ...@@ -3,7 +3,7 @@
; description: Random number generation ; description: Random number generation
; date: Tue Jul 11 2006 - 23:39 ; date: Tue Jul 11 2006 - 23:39
; author: Liam M. Healy ; author: Liam M. Healy
; modified: Fri Jul 14 2006 - 10:14 ; modified: Fri Jul 14 2006 - 22:34
;******************************************************** ;********************************************************
;;; $Id: $ ;;; $Id: $
...@@ -34,6 +34,8 @@ ...@@ -34,6 +34,8 @@
;;;; Auxiliary functions ;;;; Auxiliary functions
;;;;**************************************************************************** ;;;;****************************************************************************
(export '(random-number-generator-state all-random-number-generators))
(defun-gsl rng-name (rng) (defun-gsl rng-name (rng)
"gsl_rng_name" ((rng :pointer)) "gsl_rng_name" ((rng :pointer))
:c-return :string :c-return :string
...@@ -63,22 +65,34 @@ ...@@ -63,22 +65,34 @@
:c-return :size :c-return :size
:documentation "The size of the generator.") :documentation "The size of the generator.")
(defun random-number-generator-state (rng)
"The complete state of a given random number generator, specified
as a vector of bytes."
(let ((ans (make-array (rng-size rng) :element-type '(unsigned-byte 8))))
(loop for i from 0 below (length ans)
do
(setf (aref ans i)
(mem-aref (rng-state rng) :uint8 i)))
ans))
(defun-gsl rng-types-setup () (defun-gsl rng-types-setup ()
"gsl_rng_types_setup" () "gsl_rng_types_setup" ()
:c-return :pointer :c-return :pointer
:export nil
:documentation :documentation
"A pointer to an array of all the available generator types, "A pointer to an array of all the available generator types,
terminated by a null pointer. The function should be terminated by a null pointer. The function should be
called once at the start of the program, if needed.") called once at the start of the program, if needed.
Users should call all-random-number-generators.")
;;; Probably only works for 64 bit hardware; need to generalize (defun all-random-number-generators ()
(defun all-rngs ()
"A list of all random number generators." "A list of all random number generators."
(let ((start (rng-types-setup))) (let ((start (rng-types-setup)))
(loop for i from 0 (loop for i from 0
for ptr = (inc-pointer start (* 8 i)) ; (mem-aref ptr :pointer i) for ptr
until (null-pointer-p (mem-ref ptr :pointer)) = (cffi:inc-pointer start (* (cffi:foreign-type-size :pointer) i))
collect (rng-name (mem-aref ptr 'random-number-generator-type 0))))) until (cffi:null-pointer-p (cffi:mem-ref ptr :pointer))
collect (cffi:mem-ref ptr 'random-number-generator-type))))
;;;;**************************************************************************** ;;;;****************************************************************************
;;;; Defining RNGs and default ;;;; Defining RNGs and default
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment