@@ -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-
324304pub 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-
388339pub 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
398350impl < ' 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 {
0 commit comments