Struct Node

Source
pub struct Node<T> { /* private fields */ }
Expand description

A reference to the tree node.

It has an Id, and the reference-counted data.

Most of the functions will block until there are no more writers, holding the RwLock. There may be more than one reader to the data, though.

Implementations§

Source§

impl<T> Node<T>

Source

pub fn new(data: T, arena: &NodeArena<T>) -> Node<T>

Creates a new node in the provided arena.

Source

pub fn read<'a>(&'a self) -> impl Deref<Target = T> + 'a

Returns a handle, dereferencing to the node data.

This function will block until there are no more writers.

Source

pub fn write<'a>(&'a self) -> impl DerefMut<Target = T> + 'a

Returns a mutable handle, dereferencing to the node data.

This function will block until there are no more writers and readers.

Source

pub fn parent(&self, arena: &NodeArena<T>) -> Option<Node<T>>

Returns node’s parent, if any.

Source

pub fn first_child(&self, arena: &NodeArena<T>) -> Option<Node<T>>

Returns node’s first child, if any.

Source

pub fn last_child(&self, arena: &NodeArena<T>) -> Option<Node<T>>

Returns node’s last child, if any.

Source

pub fn next_sibling(&self, arena: &NodeArena<T>) -> Option<Node<T>>

Returns node’s next sibling, if any.

Source

pub fn prev_sibling(&self, arena: &NodeArena<T>) -> Option<Node<T>>

Returns node’s previous sibling, if any.

Source

pub fn children<'a>(&self, arena: &'a NodeArena<T>) -> Children<'a, T>

Returns an iterator over node’s children.

Source

pub fn ancestors<'a>(&self, arena: &'a NodeArena<T>) -> Ancestors<'a, T>

Returns an iterator over node’s ancestors.

Source

pub fn siblings<'a>(&self, arena: &'a NodeArena<T>) -> Siblings<'a, T>

Returns an iterator over node’s ancestors, including itself.

Source

pub fn depth_first_traverse<'a>( &'a self, arena: &'a NodeArena<T>, ) -> DFTraverse<'a, T>

Returns an iterator over node’s descendants, including itself, in NLR depth-first order.

Source

pub fn detach(&self, arena: &NodeArena<T>)

Detachs a node from it’s parent.

If node does not have a parent, does nothing.

Source

pub fn append(&self, node: &Node<T>, arena: &NodeArena<T>)

Appends a new child to node, e.g. after the existing children.

If the parent node did not have any children before, this operation is the same as prepend.

Source

pub fn prepend(&self, node: &Node<T>, arena: &NodeArena<T>)

Prepends a new child to node, e.g. before the existing children.

If the parent node did not have any children before, this operation is the same as append.

Source

pub fn ptr_eq(&self, other: &Node<T>) -> bool

Returns true, if a node points to the same data as the other one.

Trait Implementations§

Source§

impl<T> Clone for Node<T>

Source§

fn clone(&self) -> Node<T>

Returns a copy of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl<T: Debug> Debug for Node<T>

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

§

impl<T> Freeze for Node<T>

§

impl<T> !RefUnwindSafe for Node<T>

§

impl<T> Send for Node<T>
where T: Send + Sync,

§

impl<T> Sync for Node<T>
where T: Send + Sync,

§

impl<T> Unpin for Node<T>

§

impl<T> !UnwindSafe for Node<T>

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> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. 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> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. 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.
Source§

impl<T> Erased for T