coco_rs/
random.rs

1use coco_sys::coco_random_state_t;
2
3/// COCO specific random number generator.
4pub struct RandomState {
5    pub(crate) inner: *mut coco_random_state_t,
6}
7
8impl RandomState {
9    /// Creates a new random number state using the given seed.
10    pub fn new(seed: u32) -> Self {
11        let inner = unsafe { coco_sys::coco_random_new(seed) };
12
13        RandomState { inner }
14    }
15
16    /// Generates an approximately normal random number.
17    pub fn normal(&mut self) -> f64 {
18        unsafe { coco_sys::coco_random_normal(self.inner) }
19    }
20
21    /// Returns one uniform [0, 1) random value.
22    pub fn uniform(&mut self) -> f64 {
23        unsafe { coco_sys::coco_random_uniform(self.inner) }
24    }
25}
26
27impl Drop for RandomState {
28    fn drop(&mut self) {
29        unsafe {
30            coco_sys::coco_random_free(self.inner);
31        }
32    }
33}