# Struct rustc_data_structures::graph::scc::Sccs

source · ```
pub struct Sccs<N: Idx, S: Idx> {
scc_indices: IndexVec<N, S>,
scc_data: SccData<S>,
}
```

## 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§

source§### impl<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

#### pub fn scc_indices(&self) -> &IndexSlice<N, S>

#### pub fn scc_data(&self) -> &SccData<S>

source#### pub 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.

source#### pub fn successors(&self, scc: S) -> &[S]

#### pub fn successors(&self, scc: S) -> &[S]

Returns the successors of the given SCC.

## Trait Implementations§

source§### impl<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) -> <Self as GraphSuccessors<'_>>::Iter

#### fn depth_first_search(&self, from: Self::Node) -> DepthFirstSearch<'_, Self> ⓘwhere Self: WithNumNodes,

## 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§

source§### impl<T> BorrowMut<T> for Twhere
T: ?Sized,

### impl<T> BorrowMut<T> for Twhere T: ?Sized,

source§#### fn borrow_mut(&mut self) -> &mut T

#### fn borrow_mut(&mut self) -> &mut T

### impl<'a, T> Captures<'a> for Twhere T: ?Sized,

## 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