dope_core/driver/route/table/
mod.rs1mod 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}