Struct PQTree

Source
pub struct PQTree<T>
where T: Clone + Eq + Hash,
{ /* private fields */ }

Implementations§

Source§

impl<T: Clone + Eq + Hash> PQTree<T>

Source

pub fn new() -> PQTree<T>

Creates an empty PQTree.

Source

pub fn from_leaves(initial: &[T]) -> Result<Self, ReplacementError<T>>

Creates PQTree from list of leaves.

First creates an empty tree, then replaces whole tree by new leaves:

PQTree::new().replace_tree_by_new_leaves(initial)

§Errors

Returns Err(ReplacementError::DuplicateLeaf(leaf)) if leaf presents in initial more than one time.

Source

pub fn reduction(self, s: &[T]) -> Result<Self, ReductionError<T>>

Applies reduction to the tree enforcing leaves from s to be consequent and marks pertinent subroot.

§Errors

Returns Err(ReductionError::EmptyLeafSet) if s is empty.

Returns Err(ReductionError::LeafNotFound(leaf)) if leaf from s not found in the tree.

Returns Err(ReductionError::IrreducibleTree) if tree cannot be reduced over new constraint.

Source

pub fn replace_tree_by_new_leaves( self, leaves: &[T], ) -> Result<Self, ReplacementError<T>>

Replaces whole tree by new leaves.

Same as PQTree::from_leaves but without reallocation.

§Errors

Returns Err(ReplacementError::DuplicateLeaf(leaf)) if leaf presents in leaves more than one time.

Source

pub fn replace_leaf_by_new_leaves( self, leaf: &T, leaves: &[T], ) -> Result<Self, ReplacementError<T>>

Replaces single leaf by new leaves. Can be called with empty leaves to remove leaf from tree.

First removes leaf from tree, then adds new leaves.

Clears pertinent root mark if any.

§Errors

Returns Err(ReplacementError::LeafNotFound(leaf)) if leaf not found in the tree.

Returns Err(ReplacementError::DuplicateLeaf(leaf)) if leaf already exists in the tree or presents in leaves more than one time.

Source

pub fn replace_pertinent_by_new_leaves( self, leaves: &[T], ) -> Result<Self, ReplacementError<T>>

Replaces full children of the pertinent root by new leaves. Can be called with empty leaves to remove all full children from the tree.

First removes all full nodes and leaves from the tree, then adds new leaves.

Marks added subtree root as the pertinent root if leaves is not empty or clears the mark.

§Errors

Returns Err(ReplacementError::DuplicateLeaf(leaf)) if leaf already exists in the tree or presents in leaves more than one time.

Returns Err(ReplacementError::NoPertinentRoot)) if no pertinent root is marked in the tree.

Source

pub fn frontier(&self) -> Vec<T>

Returns the tree frontier: a vector of leaves ordered in an allowed way for the tree.

Source§

impl<T: Clone + Eq + Hash + Ord> PQTree<T>

Source

pub fn sort_minimal(&mut self)

Sorts the tree by “minimal order”

Source

pub fn sort_lexicographically(&mut self)

Sorts the tree “lexicographically”

Trait Implementations§

Source§

impl<T> Clone for PQTree<T>
where T: Clone + Eq + Hash + Clone,

Source§

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

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<T> Debug for PQTree<T>
where T: Clone + Eq + Hash + Debug,

Source§

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

Formats the value using the given formatter. Read more
Source§

impl<T: Clone + Eq + Hash + Display> Display for PQTree<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 PQTree<T>

§

impl<T> RefUnwindSafe for PQTree<T>
where T: RefUnwindSafe,

§

impl<T> Send for PQTree<T>
where T: Send,

§

impl<T> Sync for PQTree<T>
where T: Sync,

§

impl<T> Unpin for PQTree<T>

§

impl<T> UnwindSafe for PQTree<T>
where T: RefUnwindSafe,

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> ToString for T
where T: Display + ?Sized,

Source§

fn to_string(&self) -> String

Converts the given value to a String. 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.