use super::*;
use cid::Cid;
#[cfg(doc)]
use std::collections::HashSet;
#[derive(Default, Clone, Debug, PartialEq, Eq)]
pub struct CidHashSet {
inner: CidHashMap<()>,
}
impl CidHashSet {
pub fn new() -> Self {
Self::default()
}
pub fn insert(&mut self, cid: Cid) -> bool {
self.inner.insert(cid, ()).is_none()
}
pub fn len(&self) -> usize {
self.inner.len()
}
pub fn contains(&self, cid: &Cid) -> bool {
self.inner.contains_key(cid)
}
pub fn remove(&mut self, cid: &Cid) -> bool {
self.inner.remove(cid).is_some()
}
pub fn is_empty(&self) -> bool {
self.inner.is_empty()
}
}
impl Extend<Cid> for CidHashSet {
fn extend<T: IntoIterator<Item = Cid>>(&mut self, iter: T) {
self.inner.extend(iter.into_iter().map(|it| (it, ())))
}
}
impl FromIterator<Cid> for CidHashSet {
fn from_iter<T: IntoIterator<Item = Cid>>(iter: T) -> Self {
let mut this = Self::new();
this.extend(iter);
this
}
}
pub struct IntoIter {
inner: hash_map::IntoIter<()>,
}
impl Iterator for IntoIter {
type Item = Cid;
fn next(&mut self) -> Option<Self::Item> {
self.inner.next().map(|(it, ())| it)
}
fn size_hint(&self) -> (usize, Option<usize>) {
self.inner.size_hint()
}
}
impl IntoIterator for CidHashSet {
type Item = Cid;
type IntoIter = IntoIter;
fn into_iter(self) -> Self::IntoIter {
IntoIter {
inner: self.inner.into_iter(),
}
}
}