#![allow(unsafe_code)]
#![allow(unused)]
#[derive(Debug)]
pub(crate) struct Rand {
state: u64,
}
impl Rand {
pub(crate) const fn new(seed: u64) -> Self {
Self { state: seed }
}
pub(crate) fn rand_u32(&mut self) -> u32 {
const M: u64 = 0xbb2efcec3c39611d;
const A: u64 = 0x7590ef39;
let s = self.state.wrapping_mul(M).wrapping_add(A);
self.state = s;
let shift = 29 - (s >> 61);
(s >> shift) as u32
}
pub(crate) fn rand_u16(&mut self) -> u16 {
let n = self.rand_u32();
(n ^ (n >> 16)) as u16
}
pub(crate) fn rand_source_port(&mut self) -> u16 {
loop {
let res = self.rand_u16();
if res > 1024 {
return res;
}
}
}
}