feat: replace fastrand by rapidhash with custom generator
This commit is contained in:
8
Cargo.lock
generated
8
Cargo.lock
generated
@@ -3,14 +3,14 @@
|
|||||||
version = 4
|
version = 4
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "fastrand"
|
name = "rapidhash"
|
||||||
version = "2.3.0"
|
version = "1.4.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be"
|
checksum = "9813f789f95ee4fe6b4d01834404d7cccacbc3f6c029343af910b3c2835eb9f1"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "rpg"
|
name = "rpg"
|
||||||
version = "1.0.0"
|
version = "1.0.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"fastrand",
|
"rapidhash",
|
||||||
]
|
]
|
||||||
|
|||||||
@@ -4,4 +4,4 @@ version = "1.0.0"
|
|||||||
edition = "2021"
|
edition = "2021"
|
||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
fastrand = "2.3.0"
|
rapidhash = "1.4.0"
|
||||||
|
|||||||
44
src/main.rs
44
src/main.rs
@@ -1,4 +1,30 @@
|
|||||||
use std::env;
|
use std::hash::Hasher;
|
||||||
|
use std::time::{SystemTime, UNIX_EPOCH};
|
||||||
|
use std::{env, ops::Range};
|
||||||
|
use rapidhash::RapidInlineHasher;
|
||||||
|
|
||||||
|
pub struct HashRng {
|
||||||
|
state: u64,
|
||||||
|
counter: u64,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl HashRng {
|
||||||
|
pub fn new() -> Self {
|
||||||
|
let seed = SystemTime::now()
|
||||||
|
.duration_since(UNIX_EPOCH)
|
||||||
|
.unwrap_or_default()
|
||||||
|
.as_nanos() as u64; // Tronqué à u64
|
||||||
|
Self { state: seed, counter: 0 }
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn next_in_range(&mut self, range: Range<usize>) -> usize {
|
||||||
|
let mut hasher = RapidInlineHasher::new(self.state);
|
||||||
|
hasher.write_u64(self.state);
|
||||||
|
hasher.write_u64(self.counter);
|
||||||
|
self.counter = self.counter.wrapping_add(1);
|
||||||
|
range.start + (hasher.finish() as usize % (range.end - range.start))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
let num_pseudonyms = env::args()
|
let num_pseudonyms = env::args()
|
||||||
@@ -9,12 +35,12 @@ fn main() {
|
|||||||
let adjectives = include_str!("../data/adjectives.txt").lines().collect::<Vec<_>>();
|
let adjectives = include_str!("../data/adjectives.txt").lines().collect::<Vec<_>>();
|
||||||
let nouns = include_str!("../data/nouns.txt").lines().collect::<Vec<_>>();
|
let nouns = include_str!("../data/nouns.txt").lines().collect::<Vec<_>>();
|
||||||
|
|
||||||
(0..num_pseudonyms).for_each(|_| {
|
let mut rng = HashRng::new();
|
||||||
println!(
|
|
||||||
"{}-{}-{}",
|
for _ in 0..num_pseudonyms {
|
||||||
adjectives[fastrand::usize(0..adjectives.len())],
|
let adjective = adjectives[rng.next_in_range(0..adjectives.len())];
|
||||||
nouns[fastrand::usize(0..nouns.len())],
|
let noun = nouns[rng.next_in_range(0..nouns.len())];
|
||||||
fastrand::u32(0..1000)
|
let number = rng.next_in_range(0..1000);
|
||||||
);
|
println!("{adjective}-{noun}-{number}");
|
||||||
});
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user