[−][src]Struct rustc_ap_rustc_data_structures::graph::scc::Sccs
Strongly connected components (SCC) of a graph. The type N
is
the index type for the graph nodes and S
is the index type for
the SCCs. We can map from each node to the SCC that it
participates in, and we also have the successors of each SCC.
Implementations
impl<N: Idx, S: Idx> Sccs<N, S>
[src]
pub fn new(
graph: &impl DirectedGraph<Node = N> + WithNumNodes + WithSuccessors
) -> Self
[src]
graph: &impl DirectedGraph<Node = N> + WithNumNodes + WithSuccessors
) -> Self
pub fn num_sccs(&self) -> usize
[src]
Returns the number of SCCs in the graph.
pub fn all_sccs(&self) -> impl Iterator<Item = S>
[src]
Returns an iterator over the SCCs in the graph.
The SCCs will be iterated in dependency order (or post order),
meaning that if S1 -> S2
, we will visit S2
first and S1
after.
This is convenient when the edges represent dependencies: when you visit
S1
, the value for S2
will already have been computed.
pub fn scc(&self, r: N) -> S
[src]
Returns the SCC to which a node r
belongs.
pub fn successors(&self, scc: S) -> &[S]
[src]
Returns the successors of the given SCC.
pub fn reverse(&self) -> VecGraph<S>
[src]
Construct the reverse graph of the SCC graph.
Trait Implementations
impl<N: Idx, S: Idx> DirectedGraph for Sccs<N, S>
[src]
type Node = S
impl<'graph, N: Idx, S: Idx> GraphSuccessors<'graph> for Sccs<N, S>
[src]
impl<N: Idx, S: Idx> WithNumEdges for Sccs<N, S>
[src]
impl<N: Idx, S: Idx> WithNumNodes for Sccs<N, S>
[src]
impl<N: Idx, S: Idx> WithSuccessors for Sccs<N, S>
[src]
fn successors(&self, node: S) -> Self::Iter
[src]
fn depth_first_search(&self, from: Self::Node) -> DepthFirstSearch<Self> where
Self: WithNumNodes,
[src]
Self: WithNumNodes,
Auto Trait Implementations
impl<N, S> RefUnwindSafe for Sccs<N, S> where
S: RefUnwindSafe,
S: RefUnwindSafe,
impl<N, S> Send for Sccs<N, S> where
S: Send,
S: Send,
impl<N, S> Sync for Sccs<N, S> where
S: Sync,
S: Sync,
impl<N, S> Unpin for Sccs<N, S> where
S: Unpin,
S: Unpin,
impl<N, S> UnwindSafe for Sccs<N, S> where
S: UnwindSafe,
S: UnwindSafe,
Blanket Implementations
impl<T> Any for T where
T: 'static + ?Sized,
[src]
T: 'static + ?Sized,
impl<T> Borrow<T> for T where
T: ?Sized,
[src]
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
[src]
T: ?Sized,
fn borrow_mut(&mut self) -> &mut T
[src]
impl<'a, T> Captures<'a> for T where
T: ?Sized,
[src]
T: ?Sized,
impl<T> Erased for T
[src]
impl<T> From<T> for T
[src]
impl<T, U> Into<U> for T where
U: From<T>,
[src]
U: From<T>,
impl<E> SpecializationError for E
[src]
default fn not_found<S, T>(
trait_name: &'static str,
method_name: &'static str
) -> E where
T: ?Sized,
[src]
trait_name: &'static str,
method_name: &'static str
) -> E where
T: ?Sized,
impl<T, U> TryFrom<U> for T where
U: Into<T>,
[src]
U: Into<T>,
type Error = Infallible
The type returned in the event of a conversion error.
fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>
[src]
impl<T, U> TryInto<U> for T where
U: TryFrom<T>,
[src]
U: TryFrom<T>,