use rand;
use rand::Rng;
use rand::SeedableRng;
use rand_core::RngCore;
use rand_isaac::IsaacRng;
use core::sync::atomic::Ordering;
use super::SEED;
#[derive(Clone, Copy, Hash, PartialEq, Eq, PartialOrd, Ord)]
pub struct VertexId([u8; 16]);
impl core::fmt::Debug for VertexId {
fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result {
write!(f, "VertexId({})", hex::encode(self.0))
}
}
impl core::convert::AsRef<VertexId> for VertexId {
fn as_ref(&self) -> &VertexId {
&self
}
}
impl VertexId {
pub fn random() -> VertexId {
let bytes = IsaacRng::gen::<[u8; 16]>(&mut IsaacRng::seed_from_u64(IsaacRng::next_u64(
&mut IsaacRng::seed_from_u64(SEED.load(Ordering::Relaxed) as u64),
)));
SEED.fetch_add(1, Ordering::Relaxed);
VertexId(bytes)
}
}