use core::ops::RangeBounds;
use crate::{Rng, SeedSource};
#[thread_local]
pub(crate) static RNG: Rng = Rng::fixed_tls();
#[cfg_attr(docsrs, doc(cfg(feature = "tls")))]
pub fn seed() {
RNG.seed()
}
#[cfg_attr(docsrs, doc(cfg(feature = "tls")))]
pub fn seed_source() -> SeedSource {
RNG.seed_source()
}
#[cfg_attr(docsrs, doc(cfg(feature = "tls")))]
pub fn seed_with_64bit(seed: u64) {
RNG.seed_with_64bit(seed)
}
#[cfg_attr(docsrs, doc(cfg(feature = "tls")))]
pub fn seed_with_192bit(seed: [u64; 3]) {
RNG.seed_with_192bit(seed)
}
#[cfg_attr(docsrs, doc(cfg(feature = "tls")))]
pub fn mix() {
RNG.mix()
}
#[cfg_attr(docsrs, doc(cfg(feature = "tls")))]
#[inline(always)]
pub fn u8() -> u8 {
RNG.u8()
}
#[cfg_attr(docsrs, doc(cfg(feature = "tls")))]
#[inline(always)]
pub fn u16() -> u16 {
RNG.u16()
}
#[cfg_attr(docsrs, doc(cfg(feature = "tls")))]
#[inline(always)]
pub fn u32() -> u32 {
RNG.u32()
}
#[cfg_attr(docsrs, doc(cfg(feature = "tls")))]
#[inline(always)]
pub fn u64() -> u64 {
RNG.u64()
}
#[cfg_attr(docsrs, doc(cfg(feature = "tls")))]
#[inline(always)]
pub fn usize() -> usize {
RNG.usize()
}
#[cfg_attr(docsrs, doc(cfg(feature = "tls")))]
#[inline(always)]
pub fn i8() -> i8 {
RNG.i8()
}
#[cfg_attr(docsrs, doc(cfg(feature = "tls")))]
#[inline(always)]
pub fn i16() -> i16 {
RNG.i16()
}
#[cfg_attr(docsrs, doc(cfg(feature = "tls")))]
#[inline(always)]
pub fn i32() -> i32 {
RNG.i32()
}
#[cfg_attr(docsrs, doc(cfg(feature = "tls")))]
#[inline(always)]
pub fn i64() -> i64 {
RNG.i64()
}
#[cfg_attr(docsrs, doc(cfg(feature = "tls")))]
#[inline(always)]
pub fn isize() -> isize {
RNG.isize()
}
#[cfg_attr(docsrs, doc(cfg(feature = "tls")))]
#[inline(always)]
pub fn f32() -> f32 {
RNG.f32()
}
#[cfg_attr(docsrs, doc(cfg(feature = "tls")))]
#[inline(always)]
pub fn f64() -> f64 {
RNG.f64()
}
#[cfg_attr(docsrs, doc(cfg(feature = "tls")))]
#[inline(always)]
pub fn bool() -> bool {
RNG.bool()
}
#[cfg_attr(docsrs, doc(cfg(feature = "tls")))]
pub fn shuffle<T>(slice: &mut [T]) {
RNG.shuffle(slice)
}
#[cfg_attr(docsrs, doc(cfg(feature = "tls")))]
pub fn fill_bytes(slice: &mut [u8]) {
RNG.fill_bytes(slice)
}
#[cfg_attr(docsrs, doc(cfg(feature = "tls")))]
#[inline(always)]
pub fn mod_u8(n: u8) -> u8 {
RNG.mod_u8(n)
}
#[cfg_attr(docsrs, doc(cfg(feature = "tls")))]
#[inline(always)]
pub fn mod_u16(n: u16) -> u16 {
RNG.mod_u16(n)
}
#[cfg_attr(docsrs, doc(cfg(feature = "tls")))]
#[inline(always)]
pub fn mod_u32(n: u32) -> u32 {
RNG.mod_u32(n)
}
#[cfg_attr(docsrs, doc(cfg(feature = "tls")))]
#[inline(always)]
pub fn mod_u64(n: u64) -> u64 {
RNG.mod_u64(n)
}
#[cfg_attr(docsrs, doc(cfg(feature = "tls")))]
#[inline(always)]
pub fn mod_usize(n: usize) -> usize {
RNG.mod_usize(n)
}
#[cfg_attr(docsrs, doc(cfg(feature = "tls")))]
pub fn range_u8<T: RangeBounds<u8>>(range: T) -> u8 {
RNG.range_u8(range)
}
#[cfg_attr(docsrs, doc(cfg(feature = "tls")))]
#[inline(always)]
pub fn range_u16<T: RangeBounds<u16>>(range: T) -> u16 {
RNG.range_u16(range)
}
#[cfg_attr(docsrs, doc(cfg(feature = "tls")))]
#[inline(always)]
pub fn range_u32<T: RangeBounds<u32>>(range: T) -> u32 {
RNG.range_u32(range)
}
#[cfg_attr(docsrs, doc(cfg(feature = "tls")))]
#[inline(always)]
pub fn range_u64<T: RangeBounds<u64>>(range: T) -> u64 {
RNG.range_u64(range)
}
#[cfg_attr(docsrs, doc(cfg(feature = "tls")))]
#[inline(always)]
pub fn range_usize<T: RangeBounds<usize>>(range: T) -> usize {
RNG.range_usize(range)
}
#[cfg_attr(docsrs, doc(cfg(feature = "tls")))]
#[inline(always)]
pub fn range_i8<T: RangeBounds<i8>>(range: T) -> i8 {
RNG.range_i8(range)
}
#[cfg_attr(docsrs, doc(cfg(feature = "tls")))]
#[inline(always)]
pub fn range_i16<T: RangeBounds<i16>>(range: T) -> i16 {
RNG.range_i16(range)
}
#[cfg_attr(docsrs, doc(cfg(feature = "tls")))]
#[inline(always)]
pub fn range_i32<T: RangeBounds<i32>>(range: T) -> i32 {
RNG.range_i32(range)
}
#[cfg_attr(docsrs, doc(cfg(feature = "tls")))]
#[inline(always)]
pub fn range_i64<T: RangeBounds<i64>>(range: T) -> i64 {
RNG.range_i64(range)
}
#[cfg_attr(docsrs, doc(cfg(feature = "tls")))]
#[inline(always)]
pub fn range_isize<T: RangeBounds<isize>>(range: T) -> isize {
RNG.range_isize(range)
}