Skip to content

Commit 6d0d343

Browse files
authored
Rollup merge of #48699 - frewsxcv:frewsxcv-impl-trait, r=nikomatsakis
Replace iterator structures with `impl Trait`. Two commits: * Replace iterator structures with `impl Trait`. * Run rustfmt on `src/librustc_data_structures/graph/mod.rs`.
2 parents d7f44ac + 08a0182 commit 6d0d343

File tree

2 files changed

+53
-99
lines changed

2 files changed

+53
-99
lines changed

src/librustc_data_structures/graph/mod.rs

Lines changed: 52 additions & 99 deletions
Original file line numberDiff line numberDiff line change
@@ -196,30 +196,30 @@ impl<N: Debug, E: Debug> Graph<N, E> {
196196

197197
// # Iterating over nodes, edges
198198

199-
pub fn enumerated_nodes(&self) -> EnumeratedNodes<N> {
200-
EnumeratedNodes {
201-
iter: self.nodes.iter().enumerate()
202-
}
199+
pub fn enumerated_nodes(&self) -> impl Iterator<Item = (NodeIndex, &Node<N>)> {
200+
self.nodes
201+
.iter()
202+
.enumerate()
203+
.map(|(idx, n)| (NodeIndex(idx), n))
203204
}
204205

205-
pub fn enumerated_edges(&self) -> EnumeratedEdges<E> {
206-
EnumeratedEdges {
207-
iter: self.edges.iter().enumerate()
208-
}
206+
pub fn enumerated_edges(&self) -> impl Iterator<Item = (EdgeIndex, &Edge<E>)> {
207+
self.edges
208+
.iter()
209+
.enumerate()
210+
.map(|(idx, e)| (EdgeIndex(idx), e))
209211
}
210212

211-
pub fn each_node<'a, F>(&'a self, mut f: F) -> bool
212-
where F: FnMut(NodeIndex, &'a Node<N>) -> bool
213-
{
213+
pub fn each_node<'a>(&'a self, mut f: impl FnMut(NodeIndex, &'a Node<N>) -> bool) -> bool {
214214
//! Iterates over all edges defined in the graph.
215-
self.enumerated_nodes().all(|(node_idx, node)| f(node_idx, node))
215+
self.enumerated_nodes()
216+
.all(|(node_idx, node)| f(node_idx, node))
216217
}
217218

218-
pub fn each_edge<'a, F>(&'a self, mut f: F) -> bool
219-
where F: FnMut(EdgeIndex, &'a Edge<E>) -> bool
220-
{
219+
pub fn each_edge<'a>(&'a self, mut f: impl FnMut(EdgeIndex, &'a Edge<E>) -> bool) -> bool {
221220
//! Iterates over all edges defined in the graph
222-
self.enumerated_edges().all(|(edge_idx, edge)| f(edge_idx, edge))
221+
self.enumerated_edges()
222+
.all(|(edge_idx, edge)| f(edge_idx, edge))
223223
}
224224

225225
pub fn outgoing_edges(&self, source: NodeIndex) -> AdjacentEdges<N, E> {
@@ -239,26 +239,33 @@ impl<N: Debug, E: Debug> Graph<N, E> {
239239
}
240240
}
241241

242-
pub fn successor_nodes(&self, source: NodeIndex) -> AdjacentTargets<N, E> {
242+
pub fn successor_nodes<'a>(
243+
&'a self,
244+
source: NodeIndex,
245+
) -> impl Iterator<Item = NodeIndex> + 'a {
243246
self.outgoing_edges(source).targets()
244247
}
245248

246-
pub fn predecessor_nodes(&self, target: NodeIndex) -> AdjacentSources<N, E> {
249+
pub fn predecessor_nodes<'a>(
250+
&'a self,
251+
target: NodeIndex,
252+
) -> impl Iterator<Item = NodeIndex> + 'a {
247253
self.incoming_edges(target).sources()
248254
}
249255

250-
pub fn depth_traverse<'a>(&'a self,
251-
start: NodeIndex,
252-
direction: Direction)
253-
-> DepthFirstTraversal<'a, N, E> {
256+
pub fn depth_traverse<'a>(
257+
&'a self,
258+
start: NodeIndex,
259+
direction: Direction,
260+
) -> DepthFirstTraversal<'a, N, E> {
254261
DepthFirstTraversal::with_start_node(self, start, direction)
255262
}
256263

257-
pub fn nodes_in_postorder<'a>(&'a self,
258-
direction: Direction,
259-
entry_node: NodeIndex)
260-
-> Vec<NodeIndex>
261-
{
264+
pub fn nodes_in_postorder<'a>(
265+
&'a self,
266+
direction: Direction,
267+
entry_node: NodeIndex,
268+
) -> Vec<NodeIndex> {
262269
let mut visited = BitVector::new(self.len_nodes());
263270
let mut stack = vec![];
264271
let mut result = Vec::with_capacity(self.len_nodes());
@@ -268,7 +275,8 @@ impl<N: Debug, E: Debug> Graph<N, E> {
268275
}
269276
};
270277

271-
for node in Some(entry_node).into_iter()
278+
for node in Some(entry_node)
279+
.into_iter()
272280
.chain(self.enumerated_nodes().map(|(node, _)| node))
273281
{
274282
push_node(&mut stack, node);
@@ -293,50 +301,23 @@ impl<N: Debug, E: Debug> Graph<N, E> {
293301

294302
// # Iterators
295303

296-
pub struct EnumeratedNodes<'g, N>
297-
where N: 'g,
298-
{
299-
iter: ::std::iter::Enumerate<::std::slice::Iter<'g, Node<N>>>
300-
}
301-
302-
impl<'g, N: Debug> Iterator for EnumeratedNodes<'g, N> {
303-
type Item = (NodeIndex, &'g Node<N>);
304-
305-
fn next(&mut self) -> Option<(NodeIndex, &'g Node<N>)> {
306-
self.iter.next().map(|(idx, n)| (NodeIndex(idx), n))
307-
}
308-
}
309-
310-
pub struct EnumeratedEdges<'g, E>
311-
where E: 'g,
312-
{
313-
iter: ::std::iter::Enumerate<::std::slice::Iter<'g, Edge<E>>>
314-
}
315-
316-
impl<'g, E: Debug> Iterator for EnumeratedEdges<'g, E> {
317-
type Item = (EdgeIndex, &'g Edge<E>);
318-
319-
fn next(&mut self) -> Option<(EdgeIndex, &'g Edge<E>)> {
320-
self.iter.next().map(|(idx, e)| (EdgeIndex(idx), e))
321-
}
322-
}
323-
324304
pub struct AdjacentEdges<'g, N, E>
325-
where N: 'g,
326-
E: 'g
305+
where
306+
N: 'g,
307+
E: 'g,
327308
{
328309
graph: &'g Graph<N, E>,
329310
direction: Direction,
330311
next: EdgeIndex,
331312
}
332313

333-
impl<'g, N, E> AdjacentEdges<'g, N, E> {
334-
fn targets(self) -> AdjacentTargets<'g, N, E> {
335-
AdjacentTargets { edges: self }
314+
impl<'g, N: Debug, E: Debug> AdjacentEdges<'g, N, E> {
315+
fn targets(self) -> impl Iterator<Item = NodeIndex> + 'g {
316+
self.into_iter().map(|(_, edge)| edge.target)
336317
}
337318

338-
fn sources(self) -> AdjacentSources<'g, N, E> {
339-
AdjacentSources { edges: self }
319+
fn sources(self) -> impl Iterator<Item = NodeIndex> + 'g {
320+
self.into_iter().map(|(_, edge)| edge.source)
340321
}
341322
}
342323

@@ -355,39 +336,10 @@ impl<'g, N: Debug, E: Debug> Iterator for AdjacentEdges<'g, N, E> {
355336
}
356337
}
357338

358-
pub struct AdjacentTargets<'g, N, E>
359-
where N: 'g,
360-
E: 'g
361-
{
362-
edges: AdjacentEdges<'g, N, E>,
363-
}
364-
365-
impl<'g, N: Debug, E: Debug> Iterator for AdjacentTargets<'g, N, E> {
366-
type Item = NodeIndex;
367-
368-
fn next(&mut self) -> Option<NodeIndex> {
369-
self.edges.next().map(|(_, edge)| edge.target)
370-
}
371-
}
372-
373-
pub struct AdjacentSources<'g, N, E>
374-
where N: 'g,
375-
E: 'g
376-
{
377-
edges: AdjacentEdges<'g, N, E>,
378-
}
379-
380-
impl<'g, N: Debug, E: Debug> Iterator for AdjacentSources<'g, N, E> {
381-
type Item = NodeIndex;
382-
383-
fn next(&mut self) -> Option<NodeIndex> {
384-
self.edges.next().map(|(_, edge)| edge.source)
385-
}
386-
}
387-
388339
pub struct DepthFirstTraversal<'g, N, E>
389-
where N: 'g,
390-
E: 'g
340+
where
341+
N: 'g,
342+
E: 'g,
391343
{
392344
graph: &'g Graph<N, E>,
393345
stack: Vec<NodeIndex>,
@@ -396,10 +348,11 @@ pub struct DepthFirstTraversal<'g, N, E>
396348
}
397349

398350
impl<'g, N: Debug, E: Debug> DepthFirstTraversal<'g, N, E> {
399-
pub fn with_start_node(graph: &'g Graph<N, E>,
400-
start_node: NodeIndex,
401-
direction: Direction)
402-
-> Self {
351+
pub fn with_start_node(
352+
graph: &'g Graph<N, E>,
353+
start_node: NodeIndex,
354+
direction: Direction,
355+
) -> Self {
403356
let mut visited = BitVector::new(graph.len_nodes());
404357
visited.insert(start_node.node_id());
405358
DepthFirstTraversal {

src/librustc_data_structures/lib.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
#![feature(underscore_lifetimes)]
3535
#![feature(macro_vis_matcher)]
3636
#![feature(allow_internal_unstable)]
37+
#![feature(universal_impl_trait)]
3738

3839
#![cfg_attr(unix, feature(libc))]
3940
#![cfg_attr(test, feature(test))]

0 commit comments

Comments
 (0)