pub unsafe trait TerminalManager<'id, InnerNode, EdgeTag, ManagerData, const PAGE_SIZE: usize, const TAG_BITS: u32>: Sized {
type TerminalNode: Eq + Hash;
type TerminalNodeRef<'a>: Borrow<Self::TerminalNode> + Copy
where Self: 'a;
type Iterator<'a>: Iterator<Item = Edge<'id, InnerNode, EdgeTag, TAG_BITS>>
where Self: 'a;
// Required methods
unsafe fn new_in(slot: *mut Self);
fn terminal_manager(
edge: &Edge<'id, InnerNode, EdgeTag, TAG_BITS>,
) -> NonNull<Self>;
fn len(&self) -> usize;
fn deref_edge(
&self,
edge: &Edge<'id, InnerNode, EdgeTag, TAG_BITS>,
) -> Self::TerminalNodeRef<'_>;
fn clone_edge(
edge: &Edge<'id, InnerNode, EdgeTag, TAG_BITS>,
) -> Edge<'id, InnerNode, EdgeTag, TAG_BITS>;
fn drop_edge(edge: Edge<'id, InnerNode, EdgeTag, TAG_BITS>);
unsafe fn get(
this: *const Self,
terminal: Self::TerminalNode,
) -> AllocResult<Edge<'id, InnerNode, EdgeTag, TAG_BITS>>;
unsafe fn iter<'a>(this: *const Self) -> Self::Iterator<'a>
where Self: 'a;
fn gc(&self) -> usize;
// Provided method
fn is_empty(&self) -> bool { ... }
}Expand description
Manager for terminal nodes
§Safety
TerminalManager::new_in() must properly initialize the given slot and
return a reference to the initialized slot.
Required Associated Types§
type TerminalNode: Eq + Hash
type TerminalNodeRef<'a>: Borrow<Self::TerminalNode> + Copy where Self: 'a
type Iterator<'a>: Iterator<Item = Edge<'id, InnerNode, EdgeTag, TAG_BITS>> where Self: 'a
Required Methods§
Sourceunsafe fn new_in(slot: *mut Self)
unsafe fn new_in(slot: *mut Self)
Create a new TerminalManager in the given slot
§Safety
slot is valid for writes and properly aligned. When returning from
this function, the location referenced by slot is initialized. With
respect to Stacked / Tree borrows, slot is tagged as the root of the
allocation.
Sourcefn terminal_manager(
edge: &Edge<'id, InnerNode, EdgeTag, TAG_BITS>,
) -> NonNull<Self>
fn terminal_manager( edge: &Edge<'id, InnerNode, EdgeTag, TAG_BITS>, ) -> NonNull<Self>
Get a pointer to the terminal store
Sourcefn deref_edge(
&self,
edge: &Edge<'id, InnerNode, EdgeTag, TAG_BITS>,
) -> Self::TerminalNodeRef<'_>
fn deref_edge( &self, edge: &Edge<'id, InnerNode, EdgeTag, TAG_BITS>, ) -> Self::TerminalNodeRef<'_>
Dereference the given edge
Sourcefn clone_edge(
edge: &Edge<'id, InnerNode, EdgeTag, TAG_BITS>,
) -> Edge<'id, InnerNode, EdgeTag, TAG_BITS>
fn clone_edge( edge: &Edge<'id, InnerNode, EdgeTag, TAG_BITS>, ) -> Edge<'id, InnerNode, EdgeTag, TAG_BITS>
Clone the given edge
Sourceunsafe fn get(
this: *const Self,
terminal: Self::TerminalNode,
) -> AllocResult<Edge<'id, InnerNode, EdgeTag, TAG_BITS>>
unsafe fn get( this: *const Self, terminal: Self::TerminalNode, ) -> AllocResult<Edge<'id, InnerNode, EdgeTag, TAG_BITS>>
Provided Methods§
Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.