pub struct SwapChildren<D>(/* private fields */);
Expand description

A wrapper around a DAG-like reference that swaps the two children

This can be useful to modify the PostOrderIter behaviour to yield right children before left children.

Since it works by relabelling the children, when iterating with this adaptor, the “left” and “right” child indices will be inconsistent with the returned nodes. To correct this, you need to call PostOrderIterItem::unswap.

To avoid confusion, this structure cannot be directly costructed. Instead it is implicit in the DagLike::rtl_post_order_iter method.

Trait Implementations§

source§

impl<D: DagLike> DagLike for SwapChildren<D>

§

type Node = <D as DagLike>::Node

The type of the DAG node, with no references or wrappers
source§

fn data(&self) -> &Self::Node

A pointer to the underlying data
source§

fn as_dag_node(&self) -> Dag<Self>

Interpret the node as a DAG node
source§

fn left_child(&self) -> Option<Self>

Accessor for the left child of the node, if one exists
source§

fn right_child(&self) -> Option<Self>

Accessor for the right child of the node, if one exists
source§

fn n_children(&self) -> usize

Number of children that the node has. Read more
source§

fn rtl_post_order_iter<S: SharingTracker<SwapChildren<Self>> + Default>( self ) -> RtlPostOrderIter<Self, S>

Obtains an iterator of all the nodes rooted at the DAG, in right-to-left post order. Read more
source§

fn pre_order_iter<S: SharingTracker<Self> + Default>( self ) -> PreOrderIter<Self, S>

Obtains an iterator of all the nodes rooted at the DAG, in pre-order.
source§

fn post_order_iter<S: SharingTracker<Self> + Default>( self ) -> PostOrderIter<Self, S>

Obtains an iterator of all the nodes rooted at the DAG, in post order. Read more
source§

fn post_order_iter_with_tracker<S: SharingTracker<Self>>( self, tracker: S ) -> PostOrderIter<Self, S>

Obtains an post-order iterator of all the nodes rooted at DAG, using the given tracker. Read more
source§

impl<N, D> SharingTracker<SwapChildren<D>> for MaxSharing<N>
where D: DagLike, MaxSharing<N>: SharingTracker<D>, N: Marker,

source§

fn record(&mut self, d: &SwapChildren<D>, index: usize) -> Option<usize>

Marks an object as having been seen, and record the index when it was seen. Read more
source§

fn seen_before(&self, d: &SwapChildren<D>) -> Option<usize>

Check whether an object has been seen before; if so, return the index it was recorded at.

Auto Trait Implementations§

§

impl<D> RefUnwindSafe for SwapChildren<D>
where D: RefUnwindSafe,

§

impl<D> Send for SwapChildren<D>
where D: Send,

§

impl<D> Sync for SwapChildren<D>
where D: Sync,

§

impl<D> Unpin for SwapChildren<D>
where D: Unpin,

§

impl<D> UnwindSafe for SwapChildren<D>
where D: 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> 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, U> TryFrom<U> for T
where U: Into<T>,

§

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

§

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

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V