random.rs 1.2 KB

1234567891011121314151617181920212223242526272829303132
  1. use std::fs::File;
  2. use std::io::BufReader;
  3. use std::io::Read;
  4. // ┏━┓┏━┓┏┓╻╺┳┓┏━┓┏┳┓ ┏┓╻╻ ╻┏┳┓┏┓ ┏━╸┏━┓ ┏━╸┏━╸┏┓╻┏━╸┏━┓┏━┓╺┳╸╻┏━┓┏┓╻
  5. // ┣┳┛┣━┫┃┗┫ ┃┃┃ ┃┃┃┃ ┃┗┫┃ ┃┃┃┃┣┻┓┣╸ ┣┳┛ ┃╺┓┣╸ ┃┗┫┣╸ ┣┳┛┣━┫ ┃ ┃┃ ┃┃┗┫
  6. // ╹┗╸╹ ╹╹ ╹╺┻┛┗━┛╹ ╹ ╹ ╹┗━┛╹ ╹┗━┛┗━╸╹┗╸ ┗━┛┗━╸╹ ╹┗━╸╹┗╸╹ ╹ ╹ ╹┗━┛╹ ╹
  7. pub struct RNG {
  8. random_device: BufReader<File>,
  9. }
  10. impl RNG {
  11. pub fn next_float(&mut self) -> f32 {
  12. let mut buf: [u8; 4] = [0, 0, 0, 0];
  13. self.random_device
  14. .read(&mut buf)
  15. .expect("Read from /dev/random failed");
  16. let val: f32 = u32::from_be_bytes(buf) as f32;
  17. f32::from(val) / (u32::max_value() as f32 + 1.0)
  18. }
  19. pub fn create() -> RNG {
  20. let f = File::open("/dev/urandom").expect("Did not find source of randomness");
  21. let reader: BufReader<File> = BufReader::new(f);
  22. return RNG {
  23. random_device: reader,
  24. };
  25. }
  26. }