Skip to main content

dope_core/driver/route/table/
mod.rs

1mod capacity;
2mod cell;
3mod connection;
4pub mod entries;
5mod key;
6mod parts;
7mod slab;
8
9use o3::collections::slab::external;
10
11const PARTITIONS: usize = 2;
12
13type ExternalSlab<T, Tag> = external::Exclusive<T, super::Epoch, Tag, { u32::MAX }, PARTITIONS>;
14type ExternalEntries<'a, T, Tag> =
15    external::Entries<'a, T, super::Epoch, Tag, { u32::MAX }, PARTITIONS>;
16type ExternalEntriesMut<'a, T, Tag> =
17    external::EntriesMut<'a, T, super::Epoch, Tag, { u32::MAX }, PARTITIONS>;
18type ExternalOccupiedEntry<'a, T, Tag> =
19    external::OccupiedEntry<'a, T, super::Epoch, Tag, { u32::MAX }, PARTITIONS>;
20type ExternalVacantEntry<'a, T, Tag> =
21    external::VacantEntry<'a, T, super::Epoch, Tag, { u32::MAX }, PARTITIONS>;
22
23pub use capacity::Capacity;
24pub use cell::slab::CellSlab;
25pub use connection::capacity::ConnectionCapacity;
26pub use key::Key;
27pub use parts::Parts;
28pub use slab::Slab;
29
30pub struct Entries<'a, T, Tag: super::Tag>(ExternalEntries<'a, T, Tag>);
31
32impl<'a, T, Tag: super::Tag> Entries<'a, T, Tag> {
33    fn new(inner: ExternalEntries<'a, T, Tag>) -> Self {
34        Self(inner)
35    }
36
37    pub fn at_parts(self, parts: Parts<Tag>) -> Option<&'a T> {
38        self.0.get(Key::external_parts(parts))
39    }
40
41    pub fn current(self, slot: super::SlotIndex) -> Option<(&'a T, Key<Tag>)> {
42        self.0
43            .current(slot.raw())
44            .map(|(value, key)| (value, Key::from_external(key)))
45    }
46
47    pub fn values(self) -> impl Iterator<Item = &'a T> {
48        self.0.values()
49    }
50}
51
52pub struct Mut<'a, T, Tag: super::Tag>(ExternalEntriesMut<'a, T, Tag>);
53
54impl<'a, T, Tag: super::Tag> Mut<'a, T, Tag> {
55    fn new(inner: ExternalEntriesMut<'a, T, Tag>) -> Self {
56        Self(inner)
57    }
58
59    pub fn at_parts(self, parts: Parts<Tag>) -> Option<&'a mut T> {
60        self.0.get(Key::external_parts(parts))
61    }
62
63    pub fn values(self) -> impl Iterator<Item = &'a mut T> {
64        self.0.values()
65    }
66}