use crate::Handle;
pub struct Region<T> {
inner: slotmap::SlotMap<slotmap::DefaultKey, T>,
}
impl<T> Region<T> {
#[must_use]
pub fn new() -> Self {
Self {
inner: slotmap::SlotMap::new(),
}
}
#[must_use]
pub fn with_capacity(capacity: usize) -> Self {
Self {
inner: slotmap::SlotMap::with_capacity(capacity),
}
}
#[must_use]
pub fn len(&self) -> usize {
self.inner.len()
}
#[must_use]
pub fn is_empty(&self) -> bool {
self.inner.is_empty()
}
#[must_use]
pub fn capacity(&self) -> usize {
self.inner.capacity()
}
pub fn reserve(&mut self, additional: usize) {
self.inner.reserve(additional);
}
pub fn insert(&mut self, value: T) -> Handle<T> {
Handle::from_key(self.inner.insert(value))
}
#[must_use]
pub fn get(&self, handle: Handle<T>) -> Option<&T> {
self.inner.get(handle.key)
}
#[must_use]
pub fn get_mut(&mut self, handle: Handle<T>) -> Option<&mut T> {
self.inner.get_mut(handle.key)
}
#[must_use]
pub fn contains(&self, handle: Handle<T>) -> bool {
self.inner.contains_key(handle.key)
}
pub fn remove(&mut self, handle: Handle<T>) -> Option<T> {
self.inner.remove(handle.key)
}
pub fn iter(&self) -> impl Iterator<Item = &T> {
self.inner.values()
}
pub fn iter_mut(&mut self) -> impl Iterator<Item = &mut T> {
self.inner.values_mut()
}
pub fn clear(&mut self) {
self.inner.clear();
}
}
impl<T> Default for Region<T> {
fn default() -> Self {
Self::new()
}
}