use std::hash::{BuildHasher, Hash, RandomState};
use crate::shard_map::ShardMap;
pub struct ShardSet<T, S = RandomState> {
inner: ShardMap<T, (), S>,
}
impl<T: Eq + Hash + 'static> ShardSet<T, RandomState> {
pub fn new() -> Self {
Self {
inner: ShardMap::new(),
}
}
pub fn new_with_shards(shards: usize) -> Self {
Self {
inner: ShardMap::with_shards(shards),
}
}
}
impl<T, S> ShardSet<T, S>
where
T: Eq + std::hash::Hash + 'static,
S: BuildHasher,
{
pub fn new_with_hasher(hasher: S) -> Self {
Self {
inner: ShardMap::with_hasher(hasher),
}
}
pub fn new_with_shards_and_hasher(shards: usize, hasher: S) -> Self {
Self {
inner: ShardMap::with_shards_and_hasher(shards, hasher),
}
}
pub async fn insert(&self, value: T) {
self.inner.insert(value, ()).await;
}
pub async fn contains(&self, value: &T) -> bool {
self.inner.contains_key(value).await
}
pub async fn remove(&self, value: &T) -> bool {
self.inner.remove(value).await.is_some()
}
pub async fn len(&self) -> usize {
self.inner.len().await
}
pub async fn is_empty(&self) -> bool {
self.inner.len().await == 0
}
pub async fn clear(&self) {
self.inner.clear().await;
}
}