Struct Edge

Source
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>

Source

pub fn as_ptr(&self) -> NonNull<()>

Source

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.

Source

pub fn addr(&self) -> usize

Get the address portion of the underlying pointer

Source

pub fn is_inner(&self) -> bool

Returns true if this edge points to an inner node

Trait Implementations§

Source§

impl<N, ET, const TAG_BITS: u32> Drop for Edge<'_, N, ET, TAG_BITS>

Source§

fn drop(&mut self)

Executes the destructor for this type. Read more
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>

Source§

fn drop_with(self, drop_edge: impl Fn(Edge<'id, Self, ET, TAG_BITS>))

Drop self Read more
Source§

fn drop_with_manager<M>(self, manager: &M)
where M: Manager<Edge = E>,

Drop self Read more
Source§

impl<N: NodeBase, ET: Tag, const TAG_BITS: u32> Edge for Edge<'_, N, ET, TAG_BITS>

Source§

type Tag = ET

Edge tag Read more
Source§

fn borrowed(&self) -> Borrowed<'_, Self>

Turn a reference into a borrowed handle
Source§

fn with_tag(&self, tag: Self::Tag) -> Borrowed<'_, Self>

Get a version of this Edge with the given tag Read more
Source§

fn with_tag_owned(self, tag: Self::Tag) -> Self

Get a version of this Edge with the given tag
Source§

fn tag(&self) -> Self::Tag

Get the Tag of this Edge
Source§

fn node_id(&self) -> NodeID

Returns some unique identifier for the node, e.g. for I/O purposes
Source§

impl<N, ET, const TAG_BITS: u32> Hash for Edge<'_, N, ET, TAG_BITS>

Source§

fn hash<H: Hasher>(&self, state: &mut H)

Feeds this value into the given Hasher. Read more
1.3.0 · Source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
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>

Source§

const ARITY: usize = 2usize

The node’s arity (upper bound)
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

Iterator over children of an inner node
Source§

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

Returns the result of check applied to the node’s level in case this node type stores levels, otherwise returns true. Read more
Source§

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<'_>

Get the children of this node as an iterator
Source§

fn child(&self, n: usize) -> Borrowed<'_, Edge<'id, Self, ET, TAG_BITS>>

Get the n-th child of this node
Source§

unsafe fn set_child( &self, n: usize, child: Edge<'id, Self, ET, TAG_BITS>, ) -> Edge<'id, Self, ET, TAG_BITS>

Set the n-th child of this node Read more
Source§

fn ref_count(&self) -> usize

Get the node’s reference count Read more
Source§

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

Iterator over Edges pointing to nodes at this level
Source§

type Taken = TakenLevelView<'a, 'id, N, ET, TM, R, MD, PAGE_SIZE, TAG_BITS>

Taken level view, see LevelView::take()
Source§

fn len(&self) -> usize

Get the number of nodes on this level
Source§

fn level_no(&self) -> LevelNo

Get the level number of this level
Source§

fn reserve(&mut self, additional: usize)

Reserve space for additional nodes on this level
Source§

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

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>>

Get the edge corresponding to level and node if present, or insert it. Read more
Source§

unsafe fn gc(&mut self)

Perform garbage collection on this level Read more
Source§

unsafe fn remove(&mut self, node: &N) -> bool

Remove node from (this level of) the manager Read more
Source§

unsafe fn swap(&mut self, other: &mut Self)

Move all nodes from this level to the other level and vice versa. Read more
Source§

fn iter(&self) -> Self::Iterator<'_>

Iterate over all the edges at this level
Source§

fn take(&mut self) -> Self::Taken

Clear this level, returning a level view containing all the previous edges.
Source§

fn is_empty(&self) -> bool

Returns true iff this level contains nodes
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>>,

Source§

type Iterator<'b> = LevelViewIter<'b, 'id, N, ET, TAG_BITS> where Self: 'b

Iterator over Edges pointing to nodes at this level
Source§

type Taken = TakenLevelView<'_, 'id, N, ET, TM, R, MD, PAGE_SIZE, TAG_BITS>

Taken level view, see LevelView::take()
Source§

fn len(&self) -> usize

Get the number of nodes on this level
Source§

fn level_no(&self) -> LevelNo

Get the level number of this level
Source§

fn reserve(&mut self, additional: usize)

Reserve space for additional nodes on this level
Source§

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

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>>

Get the edge corresponding to level and node if present, or insert it. Read more
Source§

unsafe fn remove(&mut self, node: &N) -> bool

Remove node from (this level of) the manager Read more
Source§

unsafe fn gc(&mut self)

Perform garbage collection on this level Read more
Source§

unsafe fn swap(&mut self, other: &mut Self)

Move all nodes from this level to the other level and vice versa. Read more
Source§

fn iter(&self) -> Self::Iterator<'_>

Iterate over all the edges at this level
Source§

fn take(&mut self) -> Self::Taken

Clear this level, returning a level view containing all the previous edges.
Source§

fn is_empty(&self) -> bool

Returns true iff this level contains nodes
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>

Source§

fn len(&self) -> usize

Get the number of nodes in the set
Source§

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

Return true if the set contains the given node
Source§

fn remove(&mut self, edge: &Edge<'id, InnerNode, ET, TAG_BITS>) -> bool

Remove a node from the set Read more
Source§

fn is_empty(&self) -> bool

Returns true iff there are no nodes in the set
Source§

impl<N, ET, const TAG_BITS: u32> Ord for Edge<'_, N, ET, TAG_BITS>

Source§

fn cmp(&self, other: &Self) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · Source§

fn max(self, other: Self) -> Self
where Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 · Source§

fn min(self, other: Self) -> Self
where Self: Sized,

Compares and returns the minimum of two values. Read more
1.50.0 · Source§

fn clamp(self, min: Self, max: Self) -> Self
where Self: Sized,

Restrict a value to a certain interval. Read more
Source§

impl<N, ET, const TAG_BITS: u32> PartialEq for Edge<'_, N, ET, TAG_BITS>

Source§

fn eq(&self, other: &Self) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl<N, ET, const TAG_BITS: u32> PartialOrd for Edge<'_, N, ET, TAG_BITS>

Source§

fn partial_cmp(&self, other: &Self) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · Source§

fn lt(&self, other: &Rhs) -> bool

Tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · Source§

fn le(&self, other: &Rhs) -> bool

Tests less than or equal to (for self and other) and is used by the <= operator. Read more
1.0.0 · Source§

fn gt(&self, other: &Rhs) -> bool

Tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 · Source§

fn ge(&self, other: &Rhs) -> bool

Tests greater than or equal to (for self and other) and is used by the >= operator. Read more
Source§

impl<N, ET, const TAG_BITS: u32> Eq for Edge<'_, N, ET, TAG_BITS>

Source§

impl<N: Send + Sync, ET: Send + Sync, const TAG_BITS: u32> Send for Edge<'_, N, ET, TAG_BITS>

Source§

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>

§

impl<'id, N, ET, const TAG_BITS: u32> Unpin for Edge<'id, N, ET, TAG_BITS>
where N: Unpin, ET: Unpin,

§

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> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> Conv for T

Source§

fn conv<T>(self) -> T
where Self: Into<T>,

Converts self into T using Into<T>. Read more
Source§

impl<T> FmtForward for T

Source§

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,

Causes self to use its Display implementation when Debug-formatted.
Source§

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,

Causes self to use its LowerHex implementation when Debug-formatted.
Source§

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,

Causes self to use its Pointer implementation when Debug-formatted.
Source§

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,

Causes self to use its UpperHex implementation when Debug-formatted.
Source§

fn fmt_list(self) -> FmtList<Self>
where &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

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
Source§

impl<T> Pipe for T
where T: ?Sized,

Source§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> R
where 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) -> R
where R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
Source§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> R
where R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
Source§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
where Self: Borrow<B>, B: 'a + ?Sized, R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
Source§

fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
where Self: BorrowMut<B>, B: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe function. Read more
Source§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
where Self: AsRef<U>, U: 'a + ?Sized, R: 'a,

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
where Self: AsMut<U>, U: 'a + ?Sized, R: 'a,

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
where Self: Deref<Target = T>, T: 'a + ?Sized, R: 'a,

Borrows self, then passes self.deref() into the pipe function.
Source§

fn pipe_deref_mut<'a, T, R>( &'a mut self, func: impl FnOnce(&'a mut T) -> R, ) -> R
where Self: DerefMut<Target = T> + Deref, T: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe function.
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> Tap for T

Source§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
Source§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
Source§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
Source§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
Source§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
Source§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
Source§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
Source§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
Source§

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

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
where Self: Borrow<B>, B: ?Sized,

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
where Self: BorrowMut<B>, B: ?Sized,

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
where Self: AsRef<R>, R: ?Sized,

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
where Self: AsMut<R>, R: ?Sized,

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
where Self: Deref<Target = T>, T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release builds.
Source§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release builds.
Source§

impl<T> TryConv for T

Source§

fn try_conv<T>(self) -> Result<T, Self::Error>
where Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.