use cranelift_entity::{EntityRef, Keys, SetIter};
use wasmtime_core::error::OutOfMemory;
#[derive(Debug, Default)]
pub struct EntitySet<K>
where
K: EntityRef,
{
inner: cranelift_entity::EntitySet<K>,
}
impl<K> EntitySet<K>
where
K: EntityRef,
{
pub fn new() -> Self {
EntitySet {
inner: Default::default(),
}
}
pub fn with_capacity(capacity: usize) -> Result<Self, OutOfMemory> {
let mut set = Self::new();
set.inner.try_ensure_capacity(capacity)?;
Ok(set)
}
pub fn ensure_capacity(&mut self, capacity: usize) -> Result<(), OutOfMemory> {
self.inner.try_ensure_capacity(capacity)
}
pub fn is_empty(&self) -> bool {
self.inner.is_empty()
}
pub fn contains(&self, k: K) -> bool {
self.inner.contains(k)
}
pub fn clear(&mut self) {
self.inner.clear();
}
pub fn keys(&self) -> Keys<K> {
self.inner.keys()
}
pub fn iter(&self) -> SetIter<'_, K> {
self.inner.iter()
}
pub fn insert(&mut self, k: K) -> Result<bool, OutOfMemory> {
self.inner.try_ensure_capacity(k.index() + 1)?;
Ok(self.inner.insert(k))
}
pub fn remove(&mut self, k: K) -> bool {
self.inner.remove(k)
}
pub fn pop(&mut self) -> Option<K> {
self.inner.pop()
}
}