Add connection_verbose setting to log IO events (#774)
This commit is contained in:
35
src/util.rs
Normal file
35
src/util.rs
Normal file
@@ -0,0 +1,35 @@
|
||||
// xor-shift
|
||||
pub(crate) fn fast_random() -> u64 {
|
||||
use std::cell::Cell;
|
||||
use std::collections::hash_map::RandomState;
|
||||
use std::hash::{BuildHasher, Hasher};
|
||||
use std::num::Wrapping;
|
||||
|
||||
thread_local! {
|
||||
static RNG: Cell<Wrapping<u64>> = Cell::new(Wrapping(seed()));
|
||||
}
|
||||
|
||||
fn seed() -> u64 {
|
||||
let seed = RandomState::new();
|
||||
|
||||
let mut out = 0;
|
||||
let mut cnt = 0;
|
||||
while out == 0 {
|
||||
cnt += 1;
|
||||
let mut hasher = seed.build_hasher();
|
||||
hasher.write_usize(cnt);
|
||||
out = hasher.finish();
|
||||
}
|
||||
out
|
||||
}
|
||||
|
||||
RNG.with(|rng| {
|
||||
let mut n = rng.get();
|
||||
debug_assert_ne!(n.0, 0);
|
||||
n ^= n >> 12;
|
||||
n ^= n << 25;
|
||||
n ^= n >> 27;
|
||||
rng.set(n);
|
||||
n.0.wrapping_mul(0x2545_f491_4f6c_dd1d)
|
||||
})
|
||||
}
|
||||
Reference in New Issue
Block a user