librstb 0.1.1

Write HDL-Testbenches in Rust.
Documentation


use std::{borrow::Borrow, collections::{HashMap, hash_map::{Drain, Iter}}, hash::Hash};

pub struct SeaMap<K, V>(HashMap<K, V, fasthash::sea::Hash64>);

#[allow(dead_code)]
impl<K, V> SeaMap<K, V>
where
    K: Eq + Hash,
{
    #[allow(clippy::new_without_default)]
    pub fn new() -> Self {
        SeaMap(HashMap::with_hasher(fasthash::sea::Hash64))
    }

    #[inline]
    pub fn contains_key<Q: ?Sized>(&self, k: &Q) -> bool
    where
        K: Borrow<Q>,
        Q: std::hash::Hash + std::cmp::Eq,
    {
        self.0.contains_key(k)
    }

    #[inline]
    pub fn get<Q: ?Sized>(&self, k: &Q) -> Option<&V>
    where
        K: Borrow<Q>,
        Q: Hash + Eq,
    {
        self.0.get(k)
    }

    #[inline]
    pub fn get_mut<Q: ?Sized>(&mut self, k: &Q) -> Option<&mut V>
    where
        K: Borrow<Q>,
        Q: Hash + Eq,
    {
        self.0.get_mut(k)
    }

    #[inline]
    pub fn insert(&mut self, k: K, v: V) -> Option<V> {
        self.0.insert(k, v)
    }

    #[inline]
    pub fn remove<Q: ?Sized>(&mut self, k: &Q) -> Option<V>
    where
        K: Borrow<Q>,
        Q: Hash + Eq,
    {
        self.0.remove(k)
    }
    #[inline]
    pub fn drain(&mut self) -> Drain<'_, K, V> {
        self.0.drain()
    }

    pub fn iter(&self) -> Iter<'_, K, V> {
        self.0.iter()
    }
}