// Copyright 2018-2024 the Deno authors. All rights reserved. MIT license. use std::marker::PhantomData; pub struct CheckedSet { _kind: PhantomData, checked: std::collections::HashSet, } impl Default for CheckedSet { fn default() -> Self { Self { _kind: Default::default(), checked: Default::default(), } } } impl CheckedSet { pub fn with_capacity(capacity: usize) -> Self { Self { _kind: PhantomData, checked: std::collections::HashSet::with_capacity(capacity), } } pub fn insert(&mut self, value: &T) -> bool { self.checked.insert(self.get_hash(value)) } fn get_hash(&self, value: &T) -> u64 { use std::collections::hash_map::DefaultHasher; use std::hash::Hasher; let mut hasher = DefaultHasher::new(); value.hash(&mut hasher); hasher.finish() } }