yazi-shared 25.5.31

Yazi shared library
Documentation
use std::time::{SystemTime, UNIX_EPOCH};

pub struct LcgRng {
	seed: u64,
}

impl LcgRng {
	const A: u64 = 6364136223846793005;
	const C: u64 = 1;
	const M: u64 = u64::MAX;
}

impl Iterator for LcgRng {
	type Item = u64;

	fn next(&mut self) -> Option<Self::Item> {
		self.seed = Self::A.wrapping_mul(self.seed).wrapping_add(Self::C) % Self::M;
		Some(self.seed)
	}
}

impl Default for LcgRng {
	fn default() -> Self {
		let time = SystemTime::now().duration_since(UNIX_EPOCH).expect("Time went backwards");
		Self { seed: time.as_secs() ^ time.subsec_nanos() as u64 }
	}
}