Unnamed repository; edit this file 'description' to name the repository.
Diffstat (limited to 'crates/stdx/src/rand.rs')
-rw-r--r--crates/stdx/src/rand.rs21
1 files changed, 21 insertions, 0 deletions
diff --git a/crates/stdx/src/rand.rs b/crates/stdx/src/rand.rs
new file mode 100644
index 0000000000..64aa57eae0
--- /dev/null
+++ b/crates/stdx/src/rand.rs
@@ -0,0 +1,21 @@
+//! We don't use `rand`, as that's too many things for us.
+//!
+//! We currently use oorandom instead, but it's missing these two utilities.
+//! Perhaps we should switch to `fastrand`, or our own small PRNG, it's not like
+//! we need anything more complicated than xor-shift.
+
+pub fn shuffle<T>(slice: &mut [T], mut rand_index: impl FnMut(usize) -> usize) {
+ let mut remaining = slice.len() - 1;
+ while remaining > 0 {
+ let index = rand_index(remaining);
+ slice.swap(remaining, index);
+ remaining -= 1;
+ }
+}
+
+pub fn seed() -> u64 {
+ use std::collections::hash_map::RandomState;
+ use std::hash::{BuildHasher, Hasher};
+
+ RandomState::new().build_hasher().finish()
+}