Method
visit
(&mut self, dag: &Dag, n: usize)
Source from the content-addressed store, hash-verified
| 58 | |
| 59 | impl Toposort { |
| 60 | fn visit(&mut self, dag: &Dag, n: usize) -> Result<(), ()> { |
| 61 | let node = self.nodes.get_mut(n).unwrap(); |
| 62 | if node.done { |
| 63 | return Ok(()); |
| 64 | } |
| 65 | if node.visiting { |
| 66 | return Err(()); |
| 67 | } |
| 68 | node.visiting = true; |
| 69 | |
| 70 | for m in &dag[n] { |
| 71 | self.visit(dag, *m)?; |
| 72 | } |
| 73 | |
| 74 | let node = self.nodes.get_mut(n).unwrap(); |
| 75 | node.visiting = false; |
| 76 | node.done = true; |
| 77 | self.order.push(n); |
| 78 | |
| 79 | Ok(()) |
| 80 | } |
| 81 | } |
| 82 | |
| 83 | #[cfg(test)] |
Tested by
no test coverage detected