rust/lfprng/src/lib.rs
changeset 14044 aeac678d7c79
parent 14034 259175ab7e8c
child 14157 5acfdf49742d
equal deleted inserted replaced
14043:1ac129df8e5b 14044:aeac678d7c79
     2     circular_buffer: [u32; 64],
     2     circular_buffer: [u32; 64],
     3     index: usize,
     3     index: usize,
     4 }
     4 }
     5 
     5 
     6 impl LaggedFibonacciPRNG {
     6 impl LaggedFibonacciPRNG {
     7     fn new(init_values: &[u8]) -> Self {
     7     pub fn new(init_values: &[u8]) -> Self {
     8         let mut buf = [0xa98765 + 68; 64];
     8         let mut buf = [0xa98765 + 68; 64];
     9 
     9 
    10         for i in 0..std::cmp::min(init_values.len(), 54) {
    10         for i in 0..std::cmp::min(init_values.len(), 54) {
    11             buf[i] = init_values[i] as u32;
    11             buf[i] = init_values[i] as u32;
    12         }
    12         }
    32 
    32 
    33         self.circular_buffer[self.index]
    33         self.circular_buffer[self.index]
    34     }
    34     }
    35 
    35 
    36     #[inline]
    36     #[inline]
    37     fn get_random(&mut self, modulo: u32) -> u32 {
    37     pub fn get_random(&mut self, modulo: u32) -> u32 {
    38         self.get_next();
    38         self.get_next();
    39         self.get_next() % modulo
    39         self.get_next() % modulo
    40     }
    40     }
    41 
    41 
    42     #[inline]
    42     #[inline]
    43     fn add_randomness(&mut self, value: u32) {
    43     pub fn add_randomness(&mut self, value: u32) {
    44         self.index = (self.index + 1) & 0x3f;
    44         self.index = (self.index + 1) & 0x3f;
    45         self.circular_buffer[self.index] ^= value;
    45         self.circular_buffer[self.index] ^= value;
    46     }
    46     }
    47 }
    47 }
    48 
    48