Struct rustc_data_structures::graph::scc::Sccs
source · Expand description
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.
Fields
scc_indices: IndexVec<N, S>
For each node, what is the SCC index of the SCC to which it belongs.
scc_data: SccData<S>
Data about each SCC.
Implementations
sourceimpl<N: Idx, S: Idx + Ord> Sccs<N, S>
impl<N: Idx, S: Idx + Ord> Sccs<N, S>
pub fn new(
graph: &impl DirectedGraph<Node = N> + WithNumNodes + WithSuccessors
) -> Self
sourcepub fn all_sccs(&self) -> impl Iterator<Item = S>
pub fn all_sccs(&self) -> impl Iterator<Item = S>
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.
Trait Implementations
sourceimpl<'graph, N: Idx, S: Idx> GraphSuccessors<'graph> for Sccs<N, S>
impl<'graph, N: Idx, S: Idx> GraphSuccessors<'graph> for Sccs<N, S>
sourceimpl<N: Idx, S: Idx + Ord> WithSuccessors for Sccs<N, S>
impl<N: Idx, S: Idx + Ord> WithSuccessors for Sccs<N, S>
fn successors(&self, node: S) -> Cloned<Iter<'_, S>>ⓘNotable traits for Cloned<I>impl<'a, I, T> Iterator for Cloned<I>where
T: 'a + Clone,
I: Iterator<Item = &'a T>, type Item = T;
T: 'a + Clone,
I: Iterator<Item = &'a T>, type Item = T;
fn depth_first_search(&self, from: Self::Node) -> DepthFirstSearch<'_, Self>ⓘNotable traits for DepthFirstSearch<'_, G>impl<G> Iterator for DepthFirstSearch<'_, G>where
G: ?Sized + DirectedGraph + WithNumNodes + WithSuccessors, type Item = G::Node;
where
Self: WithNumNodes,
G: ?Sized + DirectedGraph + WithNumNodes + WithSuccessors, type Item = G::Node;
Auto Trait Implementations
impl<N, S> RefUnwindSafe for Sccs<N, S>where
S: RefUnwindSafe,
impl<N, S> Send for Sccs<N, S>where
S: Send,
impl<N, S> Sync for Sccs<N, S>where
S: Sync,
impl<N, S> Unpin for Sccs<N, S>where
S: Unpin,
impl<N, S> UnwindSafe for Sccs<N, S>where
S: UnwindSafe,
Blanket Implementations
sourceimpl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
const: unstable · sourcefn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
impl<'a, T> Captures<'a> for Twhere
T: ?Sized,
impl<T> Erased for T
Layout
Note: Most layout information is completely unstable and may even differ between compilations. The only exception is types with certain repr(...)
attributes. Please see the Rust Reference’s “Type Layout” chapter for details on type layout guarantees.
Size: 72 bytes