dope-core 0.15.0

The manifold runtime
Documentation
use crate::driver::route::{
    self,
    table::{self, entries::occupied},
};

pub struct Entry<'a, T, Tag: route::Tag> {
    inner: table::ExternalVacantEntry<'a, T, Tag>,
}

impl<'a, T, Tag: route::Tag> Entry<'a, T, Tag> {
    pub(in crate::driver::route::table) fn new(
        inner: table::ExternalVacantEntry<'a, T, Tag>,
    ) -> Self {
        Self { inner }
    }

    pub fn insert(self, value: T) {
        let _ = self.inner.insert(value);
    }

    pub fn insert_occupied(self, value: T) -> occupied::Entry<'a, T, Tag> {
        occupied::Entry::new(self.inner.insert_occupied(value))
    }

    pub fn key(&self) -> table::Key<Tag> {
        let key = self.inner.key();
        table::Key::new(
            route::SlotIndex::from_bounded(key.index()),
            key.generation(),
        )
    }
}