[][src]Struct libjp::ChainGraggle

pub struct ChainGraggle { /* fields omitted */ }

A version of a Graggle that has been decomposed into "chains" (for example, for prettier rendering).

Most graggles that you'll see in practice don't look like general directed graphs. Rather, they contain lots of long "chains," i.e., sequences of nodes, each of which has exactly one in-neighbor (the previous in the sequence) and one out-neighbor (the next). For example, a totally ordered graggle (a.k.a. a file) just consists of one long chain.

This struct represents the same graph as a graggle, except that every chain has been "collapsed" into a single node. That is, you can think of a ChainGraggle as a graph in which every node represents a chain (possibly of length 1) in the original graph.

Methods

impl ChainGraggle[src]

pub fn num_chains(&self) -> usize[src]

How many chains are there?

pub fn chain(&self, i: usize) -> &[NodeId][src]

Returns the sequence of NodeIds making up the chain at index i.

pub fn clusters(
    &self
) -> impl Iterator<Item = &HashSet<usize>>
[src]

Returns an iterator over strongly connected components of the original graph.

pub fn from_graph<G: Graph<Node = NodeId>>(g: G) -> ChainGraggle where
    G::Edge: Edge<NodeId>, 
[src]

Given a graph, decompose it into a ChainGraggle.

Trait Implementations

impl Clone for ChainGraggle[src]

fn clone_from(&mut self, source: &Self)
1.0.0
[src]

Performs copy-assignment from source. Read more

impl Debug for ChainGraggle[src]

impl Graph for ChainGraggle[src]

In this implementation of [graph::Graph], the nodes are (semantically) chains in the original graggle. More precisely, they are usizes that you can use to get the chain with ChainGraggle::chain.

type Node = usize

type Edge = usize

fn out_neighbors(
    &'a self,
    u: &Self::Node
) -> Map<Box<dyn Iterator<Item = Self::Edge> + 'a>, fn(Self::Edge) -> Self::Node>

fn in_neighbors(
    &'a self,
    u: &Self::Node
) -> Map<Box<dyn Iterator<Item = Self::Edge> + 'a>, fn(Self::Edge) -> Self::Node>

fn dfs(&'a self) -> Dfs<'a, Self>

fn dfs_from(&'a self, root: &Self::Node) -> Dfs<'a, Self>

fn has_path(&self, u: &Self::Node, v: &Self::Node) -> bool

fn tarjan(&self) -> Partition<Self>

fn weak_components(&self) -> Partition<Self>

fn doubled(&'a self) -> Doubled<'a, Self>

Returns the graph that has edges in both directions for every edge that this graph has in one direction. Read more

fn node_filtered<F>(&'a self, predicate: F) -> NodeFiltered<'a, Self, F> where
    F: Fn(&Self::Node) -> bool

Returns the subgraph of this graph that is induced by the set of nodes for which predicate returns true. Read more

fn edge_filtered<F>(&'a self, predicate: F) -> EdgeFiltered<'a, Self, F> where
    F: Fn(&Self::Node, &Self::Edge) -> bool

Returns the subgraph of this graph containing all the edges for which the predicate returns true. Read more

fn top_sort(&'a self) -> Option<Vec<Self::Node>>

If this graph is acyclic, returns a topological sort of the vertices. Otherwise, returns None. Read more

fn linear_order(&'a self) -> Option<Vec<Self::Node>>

fn neighbor_set<'a, I>(&self, set: I) -> HashSet<Self::Node, RandomState> where
    I: Iterator<Item = &'a Self::Node>,
    Self::Node: 'a, 

Returns the set of all nodes that are adjacent (either an in-neighbor or an out-neighbor) to something in set. Read more

impl<'de> Deserialize<'de> for ChainGraggle[src]

impl Serialize for ChainGraggle[src]

Auto Trait Implementations

Blanket Implementations

impl<T> From for T[src]

impl<T, U> Into for T where
    U: From<T>, 
[src]

impl<T> ToOwned for T where
    T: Clone
[src]

type Owned = T

impl<T, U> TryFrom for T where
    U: Into<T>, 
[src]

type Error = !

🔬 This is a nightly-only experimental API. (try_from)

The type returned in the event of a conversion error.

impl<T> Borrow for T where
    T: ?Sized
[src]

impl<T> Any for T where
    T: 'static + ?Sized
[src]

impl<T> BorrowMut for T where
    T: ?Sized
[src]

impl<T, U> TryInto for T where
    U: TryFrom<T>, 
[src]

type Error = <U as TryFrom<T>>::Error

🔬 This is a nightly-only experimental API. (try_from)

The type returned in the event of a conversion error.

impl<T> DeserializeOwned for T where
    T: Deserialize<'de>, 
[src]

impl<T> Same for T

type Output = T

Should always be Self