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
level
Source§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>> + GCContainer<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>> + GCContainer<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
Edge
s 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 remove(&mut self, node: &N) -> bool
unsafe fn remove(&mut self, node: &N) -> bool
Remove
node
from (this level of) the manager Read moreSource§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>> + GCContainer<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>> + GCContainer<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
Edge
s 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 remove(&mut self, node: &N) -> bool
unsafe fn remove(&mut self, node: &N) -> bool
Remove
node
from (this level of) the manager Read moreSource§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<N, ET, const TAG_BITS: u32> Ord for Edge<'_, N, ET, TAG_BITS>
impl<N, ET, const TAG_BITS: u32> Ord for Edge<'_, N, ET, TAG_BITS>
Source§impl<N, ET, const TAG_BITS: u32> PartialOrd for Edge<'_, N, ET, TAG_BITS>
impl<N, ET, const TAG_BITS: u32> PartialOrd for Edge<'_, N, ET, TAG_BITS>
impl<N, ET, const TAG_BITS: u32> Eq for Edge<'_, 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> FmtForward for T
impl<T> FmtForward for T
Source§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
Causes
self
to use its Binary
implementation when Debug
-formatted.Source§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
Causes
self
to use its Display
implementation when
Debug
-formatted.Source§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
Causes
self
to use its LowerExp
implementation when
Debug
-formatted.Source§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
Causes
self
to use its LowerHex
implementation when
Debug
-formatted.Source§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
Causes
self
to use its Octal
implementation when Debug
-formatted.Source§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
Causes
self
to use its Pointer
implementation when
Debug
-formatted.Source§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
Causes
self
to use its UpperExp
implementation when
Debug
-formatted.Source§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
Causes
self
to use its UpperHex
implementation when
Debug
-formatted.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 moreSource§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
Source§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
Pipes by value. This is generally the method you want to use. Read more
Source§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
Borrows
self
and passes that borrow into the pipe function. Read moreSource§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
Mutably borrows
self
and passes that borrow into the pipe function. Read moreSource§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
Source§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
Source§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
Borrows
self
, then passes self.as_ref()
into the pipe function.Source§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
Mutably borrows
self
, then passes self.as_mut()
into the pipe
function.Source§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
Borrows
self
, then passes self.deref()
into the pipe function.Source§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<T> Tap for T
impl<T> Tap for T
Source§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Immutable access to the
Borrow<B>
of a value. Read moreSource§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
Mutable access to the
BorrowMut<B>
of a value. Read moreSource§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
Immutable access to the
AsRef<R>
view of a value. Read moreSource§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
Mutable access to the
AsMut<R>
view of a value. Read moreSource§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Immutable access to the
Deref::Target
of a value. Read moreSource§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Mutable access to the
Deref::Target
of a value. Read moreSource§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
Calls
.tap()
only in debug builds, and is erased in release builds.Source§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
Calls
.tap_mut()
only in debug builds, and is erased in release
builds.Source§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
Calls
.tap_borrow()
only in debug builds, and is erased in release
builds.Source§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
Calls
.tap_borrow_mut()
only in debug builds, and is erased in release
builds.Source§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
Calls
.tap_ref()
only in debug builds, and is erased in release
builds.Source§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
Calls
.tap_ref_mut()
only in debug builds, and is erased in release
builds.Source§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
Calls
.tap_deref()
only in debug builds, and is erased in release
builds.