- Adopt newest version of rand crate
authorunC0Rr
Tue, 28 Jan 2025 10:37:46 +0100
changeset 16072 a4cbc6926439
parent 16071 fba762376a07
child 16073 5d302b12d837
- Adopt newest version of rand crate - Rework fill_bytes() method to use full generated values
rust/lfprng/Cargo.toml
rust/lfprng/src/lib.rs
rust/mapgen/Cargo.toml
rust/mapgen/src/lib.rs
--- a/rust/lfprng/Cargo.toml	Mon Jan 27 22:22:10 2025 +0100
+++ b/rust/lfprng/Cargo.toml	Tue Jan 28 10:37:46 2025 +0100
@@ -5,4 +5,4 @@
 edition = "2018"
 
 [dependencies]
-rand = "0.8"
+rand = "0.9"
--- a/rust/lfprng/src/lib.rs	Mon Jan 27 22:22:10 2025 +0100
+++ b/rust/lfprng/src/lib.rs	Tue Jan 28 10:37:46 2025 +0100
@@ -1,4 +1,4 @@
-use rand::{Error, RngCore, SeedableRng};
+use rand::{RngCore, SeedableRng};
 
 pub struct LaggedFibonacciPRNG {
     circular_buffer: [u32; 64],
@@ -65,19 +65,29 @@
 
 impl RngCore for LaggedFibonacciPRNG {
     fn next_u32(&mut self) -> u32 {
-        self.get_next().wrapping_add(self.get_next())
+        self.get_next();
+        self.get_next()
     }
 
     fn next_u64(&mut self) -> u64 {
-        ((self.next_u32() as u64) << 32) | self.next_u32() as u64
+        ((self.get_next() as u64) << 32) | self.get_next() as u64
     }
 
     fn fill_bytes(&mut self, dest: &mut [u8]) {
-        dest.iter_mut().for_each(|x| *x = self.next_u32() as u8);
-    }
+        let mut chunks = dest.chunks_exact_mut(4);
 
-    fn try_fill_bytes(&mut self, dest: &mut [u8]) -> Result<(), Error> {
-        Ok(self.fill_bytes(dest))
+        for chunk in chunks.by_ref() {
+            let value = self.get_next();
+            let bytes = value.to_le_bytes();
+            chunk.copy_from_slice(&bytes);
+        }
+
+        let remainder = chunks.into_remainder();
+        if !remainder.is_empty() {
+            let value = self.next_u32();
+            let bytes = value.to_le_bytes();
+            remainder.copy_from_slice(&bytes[..remainder.len()]);
+        }
     }
 }
 
--- a/rust/mapgen/Cargo.toml	Mon Jan 27 22:22:10 2025 +0100
+++ b/rust/mapgen/Cargo.toml	Tue Jan 28 10:37:46 2025 +0100
@@ -10,7 +10,7 @@
 landgen = { path = "../landgen" }
 integral-geometry = { path = "../integral-geometry" }
 
-rand = "0.8"
+rand = "0.9"
 serde = "1.0"
 serde_yaml = "0.9"
 serde_derive = "1.0"
--- a/rust/mapgen/src/lib.rs	Mon Jan 27 22:22:10 2025 +0100
+++ b/rust/mapgen/src/lib.rs	Tue Jan 28 10:37:46 2025 +0100
@@ -22,6 +22,7 @@
 use rand::{seq::SliceRandom, Rng};
 
 use std::{borrow::Borrow, collections::hash_map::HashMap};
+use rand::prelude::IndexedRandom;
 use vec2d::Vec2D;
 
 #[derive(PartialEq, Eq, Hash, Clone, Debug)]
@@ -168,7 +169,7 @@
             .map(|(size, indices)| {
                 (
                     TemplateType(size),
-                    indices.iter().map(|i| (&templates[*i]).to_template(&desc.tiles, &desc.edges)).collect(),
+                    indices.iter().map(|i| templates[*i].to_template(&desc.tiles, &desc.edges)).collect(),
                 )
             })
             .collect();