pub struct Edge<'id, N, ET, const TAG_BITS: u32>(/* private fields */);Implementations§
Source§impl<'id, N: NodeBase, ET: Tag, const TAG_BITS: u32> Edge<'id, N, ET, TAG_BITS>
impl<'id, N: NodeBase, ET: Tag, const TAG_BITS: u32> Edge<'id, N, ET, TAG_BITS>
pub fn as_ptr(&self) -> NonNull<()>
Sourcepub unsafe fn from_ptr(ptr: NonNull<()>) -> Self
pub unsafe fn from_ptr(ptr: NonNull<()>) -> Self
Create an edge from a raw pointer
This method does neither modify the pointer nor change reference
counters in any way. The user is responsible for pointer tagging etc.
Hence, using this method is dangerous. Still, it is required by
TerminalManager implementations.
§Safety
ptr must be tagged accordingly.
If the pointer is tagged as referring to an inner node, then it must
actually point to an inner node stored in the manager associated with
the 'id brand. Furthermore, the caller must have ownership of one
reference (in terms of the reference count).
If the pointer is tagged as referring to a terminal node, then the
the pointer must be valid as defined by the TerminalManager
implementation of the manager associated with the 'id brand.
Trait Implementations§
Source§impl<'id, ET: Tag, const TAG_BITS: u32, const ARITY: usize> DropWith<Edge<'id, NodeWithLevel<'id, ET, TAG_BITS, ARITY>, ET, TAG_BITS>> for NodeWithLevel<'id, ET, TAG_BITS, ARITY>
impl<'id, ET: Tag, const TAG_BITS: u32, const ARITY: usize> DropWith<Edge<'id, NodeWithLevel<'id, ET, TAG_BITS, ARITY>, ET, TAG_BITS>> for NodeWithLevel<'id, ET, TAG_BITS, ARITY>
Source§impl<N: NodeBase, ET: Tag, const TAG_BITS: u32> Edge for Edge<'_, N, ET, TAG_BITS>
impl<N: NodeBase, ET: Tag, const TAG_BITS: u32> Edge for Edge<'_, N, ET, TAG_BITS>
Source§impl<'id, ET: Tag, const TAG_BITS: u32, const ARITY: usize> InnerNode<Edge<'id, NodeWithLevel<'id, ET, TAG_BITS, ARITY>, ET, TAG_BITS>> for NodeWithLevel<'id, ET, TAG_BITS, ARITY>
impl<'id, ET: Tag, const TAG_BITS: u32, const ARITY: usize> InnerNode<Edge<'id, NodeWithLevel<'id, ET, TAG_BITS, ARITY>, ET, TAG_BITS>> for NodeWithLevel<'id, ET, TAG_BITS, ARITY>
Source§type ChildrenIter<'a> = BorrowedEdgeIter<'a, Edge<'id, NodeWithLevel<'id, ET, TAG_BITS, ARITY>, ET, TAG_BITS>, Iter<'a, Edge<'id, NodeWithLevel<'id, ET, TAG_BITS, ARITY>, ET, TAG_BITS>>>
where
Self: 'a
type ChildrenIter<'a> = BorrowedEdgeIter<'a, Edge<'id, NodeWithLevel<'id, ET, TAG_BITS, ARITY>, ET, TAG_BITS>, Iter<'a, Edge<'id, NodeWithLevel<'id, ET, TAG_BITS, ARITY>, ET, TAG_BITS>>> where Self: 'a
Iterator over children of an inner node
Source§fn new(
level: LevelNo,
children: impl IntoIterator<Item = Edge<'id, Self, ET, TAG_BITS>>,
) -> Self
fn new( level: LevelNo, children: impl IntoIterator<Item = Edge<'id, Self, ET, TAG_BITS>>, ) -> Self
Create a new node Read more
Source§fn check_level(&self, check: impl FnOnce(LevelNo) -> bool) -> bool
fn check_level(&self, check: impl FnOnce(LevelNo) -> bool) -> bool
Returns the result of
check applied to the node’s level in case this
node type stores levels, otherwise returns true. Read moreSource§fn assert_level_matches(&self, level: LevelNo)
fn assert_level_matches(&self, level: LevelNo)
Panics if the node types stores a level and the node’s level is not
levelSource§fn children(&self) -> Self::ChildrenIter<'_>
fn children(&self) -> Self::ChildrenIter<'_>
Get the children of this node as an iterator
Source§fn child(&self, n: usize) -> Borrowed<'_, Edge<'id, Self, ET, TAG_BITS>>
fn child(&self, n: usize) -> Borrowed<'_, Edge<'id, Self, ET, TAG_BITS>>
Get the
n-th child of this nodeSource§impl<'a, 'id, N, ET, TM, R, MD, const PAGE_SIZE: usize, const TAG_BITS: u32> LevelView<Edge<'id, N, ET, TAG_BITS>, N> for LevelView<'a, 'id, N, ET, TM, R, MD, PAGE_SIZE, TAG_BITS>where
N: NodeBase + InnerNode<Edge<'id, N, ET, TAG_BITS>>,
ET: Tag,
TM: TerminalManager<'id, N, ET, MD, PAGE_SIZE, TAG_BITS>,
R: DiagramRules<Edge<'id, N, ET, TAG_BITS>, N, TM::TerminalNode>,
MD: DropWith<Edge<'id, N, ET, TAG_BITS>> + ManagerEventSubscriber<Manager<'id, N, ET, TM, R, MD, PAGE_SIZE, TAG_BITS>>,
impl<'a, 'id, N, ET, TM, R, MD, const PAGE_SIZE: usize, const TAG_BITS: u32> LevelView<Edge<'id, N, ET, TAG_BITS>, N> for LevelView<'a, 'id, N, ET, TM, R, MD, PAGE_SIZE, TAG_BITS>where
N: NodeBase + InnerNode<Edge<'id, N, ET, TAG_BITS>>,
ET: Tag,
TM: TerminalManager<'id, N, ET, MD, PAGE_SIZE, TAG_BITS>,
R: DiagramRules<Edge<'id, N, ET, TAG_BITS>, N, TM::TerminalNode>,
MD: DropWith<Edge<'id, N, ET, TAG_BITS>> + ManagerEventSubscriber<Manager<'id, N, ET, TM, R, MD, PAGE_SIZE, TAG_BITS>>,
Source§type Iterator<'b> = LevelViewIter<'b, 'id, N, ET, TAG_BITS>
where
Self: 'b
type Iterator<'b> = LevelViewIter<'b, 'id, N, ET, TAG_BITS> where Self: 'b
Iterator over
Edges pointing to nodes at this levelSource§type Taken = TakenLevelView<'a, 'id, N, ET, TM, R, MD, PAGE_SIZE, TAG_BITS>
type Taken = TakenLevelView<'a, 'id, N, ET, TM, R, MD, PAGE_SIZE, TAG_BITS>
Taken level view, see
LevelView::take()Source§fn get(&self, node: &N) -> Option<&Edge<'id, N, ET, TAG_BITS>>
fn get(&self, node: &N) -> Option<&Edge<'id, N, ET, TAG_BITS>>
Get the edge corresponding to the given node (if present)
Source§fn insert(&mut self, edge: Edge<'id, N, ET, TAG_BITS>) -> bool
fn insert(&mut self, edge: Edge<'id, N, ET, TAG_BITS>) -> bool
Insert the given edge into the unique table at this level, assuming that
the referenced node is already stored in the associated manager. Read more
Source§fn get_or_insert(&mut self, node: N) -> AllocResult<Edge<'id, N, ET, TAG_BITS>>
fn get_or_insert(&mut self, node: N) -> AllocResult<Edge<'id, N, ET, TAG_BITS>>
Source§unsafe fn swap(&mut self, other: &mut Self)
unsafe fn swap(&mut self, other: &mut Self)
Move all nodes from this level to the other level and vice versa. Read more
Source§impl<'id, N, ET, TM, R, MD, const PAGE_SIZE: usize, const TAG_BITS: u32> LevelView<Edge<'id, N, ET, TAG_BITS>, N> for TakenLevelView<'_, 'id, N, ET, TM, R, MD, PAGE_SIZE, TAG_BITS>where
N: NodeBase + InnerNode<Edge<'id, N, ET, TAG_BITS>>,
ET: Tag,
TM: TerminalManager<'id, N, ET, MD, PAGE_SIZE, TAG_BITS>,
R: DiagramRules<Edge<'id, N, ET, TAG_BITS>, N, TM::TerminalNode>,
MD: DropWith<Edge<'id, N, ET, TAG_BITS>> + ManagerEventSubscriber<Manager<'id, N, ET, TM, R, MD, PAGE_SIZE, TAG_BITS>>,
impl<'id, N, ET, TM, R, MD, const PAGE_SIZE: usize, const TAG_BITS: u32> LevelView<Edge<'id, N, ET, TAG_BITS>, N> for TakenLevelView<'_, 'id, N, ET, TM, R, MD, PAGE_SIZE, TAG_BITS>where
N: NodeBase + InnerNode<Edge<'id, N, ET, TAG_BITS>>,
ET: Tag,
TM: TerminalManager<'id, N, ET, MD, PAGE_SIZE, TAG_BITS>,
R: DiagramRules<Edge<'id, N, ET, TAG_BITS>, N, TM::TerminalNode>,
MD: DropWith<Edge<'id, N, ET, TAG_BITS>> + ManagerEventSubscriber<Manager<'id, N, ET, TM, R, MD, PAGE_SIZE, TAG_BITS>>,
Source§type Iterator<'b> = LevelViewIter<'b, 'id, N, ET, TAG_BITS>
where
Self: 'b
type Iterator<'b> = LevelViewIter<'b, 'id, N, ET, TAG_BITS> where Self: 'b
Iterator over
Edges pointing to nodes at this levelSource§type Taken = TakenLevelView<'_, 'id, N, ET, TM, R, MD, PAGE_SIZE, TAG_BITS>
type Taken = TakenLevelView<'_, 'id, N, ET, TM, R, MD, PAGE_SIZE, TAG_BITS>
Taken level view, see
LevelView::take()Source§fn get(&self, node: &N) -> Option<&Edge<'id, N, ET, TAG_BITS>>
fn get(&self, node: &N) -> Option<&Edge<'id, N, ET, TAG_BITS>>
Get the edge corresponding to the given node (if present)
Source§fn insert(&mut self, edge: Edge<'id, N, ET, TAG_BITS>) -> bool
fn insert(&mut self, edge: Edge<'id, N, ET, TAG_BITS>) -> bool
Insert the given edge into the unique table at this level, assuming that
the referenced node is already stored in the associated manager. Read more
Source§fn get_or_insert(&mut self, node: N) -> AllocResult<Edge<'id, N, ET, TAG_BITS>>
fn get_or_insert(&mut self, node: N) -> AllocResult<Edge<'id, N, ET, TAG_BITS>>
Source§unsafe fn swap(&mut self, other: &mut Self)
unsafe fn swap(&mut self, other: &mut Self)
Move all nodes from this level to the other level and vice versa. Read more
Source§impl<'id, InnerNode, ET, const PAGE_SIZE: usize, const TAG_BITS: u32> NodeSet<Edge<'id, InnerNode, ET, TAG_BITS>> for NodeSet<PAGE_SIZE, TAG_BITS>
impl<'id, InnerNode, ET, const PAGE_SIZE: usize, const TAG_BITS: u32> NodeSet<Edge<'id, InnerNode, ET, TAG_BITS>> for NodeSet<PAGE_SIZE, TAG_BITS>
Source§fn insert(&mut self, edge: &Edge<'id, InnerNode, ET, TAG_BITS>) -> bool
fn insert(&mut self, edge: &Edge<'id, InnerNode, ET, TAG_BITS>) -> bool
Add a node (the node to which edge points) to the set Read more
Source§fn contains(&self, edge: &Edge<'id, InnerNode, ET, TAG_BITS>) -> bool
fn contains(&self, edge: &Edge<'id, InnerNode, ET, TAG_BITS>) -> bool
Return
true if the set contains the given nodeSource§impl<'id, N, ET, const TAG_BITS: u32> Ord for Edge<'id, N, ET, TAG_BITS>
impl<'id, N, ET, const TAG_BITS: u32> Ord for Edge<'id, N, ET, TAG_BITS>
Source§impl<'id, N, ET, const TAG_BITS: u32> PartialOrd for Edge<'id, N, ET, TAG_BITS>
impl<'id, N, ET, const TAG_BITS: u32> PartialOrd for Edge<'id, N, ET, TAG_BITS>
impl<'id, N, ET, const TAG_BITS: u32> Eq for Edge<'id, N, ET, TAG_BITS>
impl<N: Send + Sync, ET: Send + Sync, const TAG_BITS: u32> Send for Edge<'_, N, ET, TAG_BITS>
impl<N: Send + Sync, ET: Send + Sync, const TAG_BITS: u32> Sync for Edge<'_, N, ET, TAG_BITS>
Auto Trait Implementations§
impl<'id, N, ET, const TAG_BITS: u32> Freeze for Edge<'id, N, ET, TAG_BITS>
impl<'id, N, ET, const TAG_BITS: u32> RefUnwindSafe for Edge<'id, N, ET, TAG_BITS>where
N: RefUnwindSafe,
ET: RefUnwindSafe,
impl<'id, N, ET, const TAG_BITS: u32> Unpin for Edge<'id, N, ET, TAG_BITS>
impl<'id, N, ET, const TAG_BITS: u32> UnwindSafe for Edge<'id, N, ET, TAG_BITS>where
N: UnwindSafe,
ET: UnwindSafe,
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more