diff options
Diffstat (limited to 'src/librustc_data_structures')
| -rw-r--r-- | src/librustc_data_structures/graph/scc/mod.rs | 27 |
1 files changed, 26 insertions, 1 deletions
diff --git a/src/librustc_data_structures/graph/scc/mod.rs b/src/librustc_data_structures/graph/scc/mod.rs index 24c5448639e..7d29bd63707 100644 --- a/src/librustc_data_structures/graph/scc/mod.rs +++ b/src/librustc_data_structures/graph/scc/mod.rs @@ -4,7 +4,7 @@ //! O(n) time. use crate::fx::FxHashSet; -use crate::graph::{DirectedGraph, WithNumNodes, WithSuccessors}; +use crate::graph::{DirectedGraph, WithNumNodes, WithSuccessors, GraphSuccessors}; use crate::indexed_vec::{Idx, IndexVec}; use std::ops::Range; @@ -60,6 +60,31 @@ impl<N: Idx, S: Idx> Sccs<N, S> { } } +impl<N: Idx, S: Idx> DirectedGraph for Sccs<N, S> { + type Node = S; +} + +impl<N: Idx, S: Idx> WithNumNodes for Sccs<N, S> { + fn num_nodes(&self) -> usize { + self.num_sccs() + } +} + +impl<N: Idx, S: Idx> GraphSuccessors<'graph> for Sccs<N, S> { + type Item = S; + + type Iter = std::iter::Cloned<std::slice::Iter<'graph, S>>; +} + +impl<N: Idx, S: Idx> WithSuccessors for Sccs<N, S> { + fn successors<'graph>( + &'graph self, + node: S + ) -> <Self as GraphSuccessors<'graph>>::Iter { + self.successors(node).iter().cloned() + } +} + impl<S: Idx> SccData<S> { /// Number of SCCs, fn len(&self) -> usize { |
