Struct SwapChildren

Source
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: Clone> Clone for SwapChildren<D>

Source§

fn clone(&self) -> SwapChildren<D>

Returns a duplicate 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<D: DagLike> DagLike for SwapChildren<D>

Source§

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 verbose_pre_order_iter<S: SharingTracker<Self> + Default>( self, max_depth: Option<usize>, ) -> VerbosePreOrderIter<Self, S>
where Self: Clone,

Obtains a verbose iterator of all the nodes rooted at the DAG, in pre-order. Read more
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 is_shared_as<S: SharingTracker<Self> + Default>(self) -> bool
where Self: Clone,

Checks whether a DAG’s internal sharing (as expressed by shared pointers) matches the given target sharing.
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<D: Debug> Debug for SwapChildren<D>

Source§

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

Formats the value using the given formatter. 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> Freeze for SwapChildren<D>
where D: Freeze,

§

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> 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<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V