Struct LabeledBTreeGraph

Source
pub struct LabeledBTreeGraph<L: Clone + 'static = ()> { /* private fields */ }
Expand description

A mutable LabeledRandomAccessGraph implementation based on a vector of BTreeSet.

This implementation is slower and uses more resources than a LabeledVecGraph, but it is more flexible as arcs can be added in any order.

By setting the feature serde, this struct can be serialized and deserialized using serde.

Implementations§

Source§

impl<L: Clone + 'static> LabeledBTreeGraph<L>

Source

pub fn new() -> Self

Creates a new empty graph.

Source

pub fn empty(n: usize) -> Self

Creates a new empty graph with n nodes.

Source

pub fn add_node(&mut self, node: usize) -> bool

Add an isolated node to the graph and return true if it is a new node.

§Panics

This method will panic if one of the given nodes is greater or equal than the number of nodes in the graph.

Source

pub fn add_arc(&mut self, u: usize, v: usize, l: L) -> bool

Add a labeled arc to the graph and return whether it is a new one.

Source

pub fn remove_arc(&mut self, u: usize, v: usize) -> bool

Remove an arc from the graph and return whether it was present or not.

Source

pub fn add_lender<I: IntoLender>(&mut self, iter_nodes: I)
where I::Lender: for<'next> NodeLabelsLender<'next, Label = (usize, L)>,

Add nodes and labeled successors from an IntoLender yielding a NodeLabelsLender.

Source

pub fn from_lender<I: IntoLender>(iter_nodes: I) -> Self
where I::Lender: for<'next> NodeLabelsLender<'next, Label = (usize, L)>,

Creates a new graph from an IntoLender yielding a NodeLabelsLender.

Source

pub fn add_arcs(&mut self, arcs: impl IntoIterator<Item = (usize, usize, L)>)

Add labeled arcs from an IntoIterator, adding new nodes as needed.

The items must be triples of the form (usize, usize, l) specifying an arc and its label.

Source

pub fn from_arcs(arcs: impl IntoIterator<Item = (usize, usize, L)>) -> Self

Creates a new graph from an IntoIterator.

The items must be triples of the form (usize, usize, l) specifying an arc and its label.

Source

pub fn shrink_to_fit(&mut self)

Shrink the capacity of the graph to fit its current size.

§Implementation Notes

This method just shrinks the capacity of the successor vector, as BTreeSet does not have a shrink_to_fit method.

Trait Implementations§

Source§

impl<L: Clone + Clone + 'static> Clone for LabeledBTreeGraph<L>

Source§

fn clone(&self) -> LabeledBTreeGraph<L>

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<L: Debug + Clone + 'static> Debug for LabeledBTreeGraph<L>

Source§

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

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

impl<L: Clone + 'static> Default for LabeledBTreeGraph<L>

Source§

fn default() -> Self

Returns the “default value” for a type. Read more
Source§

impl From<LabeledBTreeGraph> for BTreeGraph

Source§

fn from(g: LabeledBTreeGraph<()>) -> Self

Converts to this type from the input type.
Source§

impl<'a, L: Clone + 'static> IntoLender for &'a LabeledBTreeGraph<L>

Source§

impl<L: Clone + 'static> LabeledRandomAccessGraph<L> for LabeledBTreeGraph<L>

Source§

fn successors( &self, node_id: usize, ) -> <Self as RandomAccessLabeling>::Labels<'_>

Returns pairs given by successors of a node and their labels. Read more
Source§

fn has_arc(&self, src_node_id: usize, dst_node_id: usize) -> bool

Returns whether there is an arc going from src_node_id to dst_node_id. Read more
Source§

impl<L: Clone + 'static + PartialEq> PartialEq for LabeledBTreeGraph<L>

Manual implementation of PartialEq. This implementation is necessary because the private struct [Successor] that we use to store in a BTreeSet the tuple (usize, Label) implements PartialEq ignoring the label so to enforce the absence of duplicate arcs. This implies that the derived implementation of PartialEq would not check labels, so the same graph with different labels would be equal, and this is not the intended semantics.

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<L: Clone + 'static> RandomAccessLabeling for LabeledBTreeGraph<L>

Source§

type Labels<'succ> = Successors<'succ, L> where L: 'succ

The type of the iterator over the labels of a node returned by labels.
Source§

fn num_arcs(&self) -> u64

Returns the number of arcs in the graph.
Source§

fn outdegree(&self, node: usize) -> usize

Returns the number of labels associated with a node.
Source§

fn labels(&self, node: usize) -> <Self as RandomAccessLabeling>::Labels<'_>

Returns the labels associated with a node.
Source§

impl<L: Clone + 'static> SequentialLabeling for LabeledBTreeGraph<L>

Source§

type Label = (usize, L)

Source§

type Lender<'a> = IteratorImpl<'a, LabeledBTreeGraph<L>> where Self: 'a

The type of Lender over the successors of a node returned by iter.
Source§

fn num_nodes(&self) -> usize

Returns the number of nodes in the graph.
Source§

fn num_arcs_hint(&self) -> Option<u64>

Returns the number of arcs in the graph, if available.
Source§

fn iter_from(&self, from: usize) -> Self::Lender<'_>

Returns an iterator over the labeling starting at from (included). Read more
Source§

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

Returns an iterator over the labeling. Read more
Source§

fn par_node_apply<A: Default + Send, F: Fn(Range<usize>) -> A + Sync, R: Fn(A, A) -> A + Sync>( &self, func: F, fold: R, granularity: Granularity, thread_pool: &ThreadPool, pl: &mut impl ConcurrentProgressLog, ) -> A

Applies func to each chunk of nodes of size node_granularity in parallel, and folds the results using fold. Read more
Source§

fn par_apply<F: Fn(Range<usize>) -> A + Sync, A: Default + Send, R: Fn(A, A) -> A + Sync, D: Succ<Input = usize, Output = usize>>( &self, func: F, fold: R, granularity: Granularity, deg_cumul: &D, thread_pool: &ThreadPool, pl: &mut impl ConcurrentProgressLog, ) -> A

Apply func to each chunk of nodes containing approximately arc_granularity arcs in parallel and folds the results using fold. Read more
Source§

impl<L: Clone + 'static + Eq> Eq for LabeledBTreeGraph<L>

Source§

impl<L: Clone + 'static> LabeledSequentialGraph<L> for LabeledBTreeGraph<L>

Auto Trait Implementations§

§

impl<L> Freeze for LabeledBTreeGraph<L>

§

impl<L> RefUnwindSafe for LabeledBTreeGraph<L>
where L: RefUnwindSafe,

§

impl<L> Send for LabeledBTreeGraph<L>
where L: Send,

§

impl<L> Sync for LabeledBTreeGraph<L>
where L: Sync,

§

impl<L> Unpin for LabeledBTreeGraph<L>

§

impl<L> UnwindSafe for LabeledBTreeGraph<L>
where L: 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> CastableFrom<T> for T

Source§

fn cast_from(value: T) -> T

Call Self as W
Source§

impl<T, U> CastableInto<U> for T
where U: CastableFrom<T>,

Source§

fn cast(self) -> U

Call W::cast_from(self)
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> DowncastableFrom<T> for T

Source§

fn downcast_from(value: T) -> T

Truncate the current UnsignedInt to a possibly smaller size
Source§

impl<T, U> DowncastableInto<U> for T
where U: DowncastableFrom<T>,

Source§

fn downcast(self) -> U

Call W::downcast_from(self)
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> 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> Splat<T> for T

Source§

fn splat(value: T) -> T

Source§

impl<T> To<T> for T

Source§

fn to(self) -> T

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> UpcastableFrom<T> for T

Source§

fn upcast_from(value: T) -> T

Extend the current UnsignedInt to a possibly bigger size.
Source§

impl<T, U> UpcastableInto<U> for T
where U: UpcastableFrom<T>,

Source§

fn upcast(self) -> U

Call W::upcast_from(self)
Source§

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

Source§

fn vzip(self) -> V