equal
deleted
inserted
replaced
291 val empty: Nodes = new Nodes(Graph.empty(Node.Name.Ordering)) |
291 val empty: Nodes = new Nodes(Graph.empty(Node.Name.Ordering)) |
292 } |
292 } |
293 |
293 |
294 final class Nodes private(graph: Graph[Node.Name, Node]) |
294 final class Nodes private(graph: Graph[Node.Name, Node]) |
295 { |
295 { |
296 def get_name(s: String): Option[Node.Name] = |
|
297 graph.keys_iterator.find(name => name.node == s) |
|
298 |
|
299 def apply(name: Node.Name): Node = |
296 def apply(name: Node.Name): Node = |
300 graph.default_node(name, Node.empty).get_node(name) |
297 graph.default_node(name, Node.empty).get_node(name) |
301 |
298 |
302 def + (entry: (Node.Name, Node)): Nodes = |
299 def + (entry: (Node.Name, Node)): Nodes = |
303 { |
300 { |
305 val imports = node.header.imports |
302 val imports = node.header.imports |
306 val graph1 = |
303 val graph1 = |
307 (graph.default_node(name, Node.empty) /: imports)((g, p) => g.default_node(p, Node.empty)) |
304 (graph.default_node(name, Node.empty) /: imports)((g, p) => g.default_node(p, Node.empty)) |
308 val graph2 = (graph1 /: graph1.imm_preds(name))((g, dep) => g.del_edge(dep, name)) |
305 val graph2 = (graph1 /: graph1.imm_preds(name))((g, dep) => g.del_edge(dep, name)) |
309 val graph3 = (graph2 /: imports)((g, dep) => g.add_edge(dep, name)) |
306 val graph3 = (graph2 /: imports)((g, dep) => g.add_edge(dep, name)) |
310 new Nodes(graph3.map_node(name, _ => node)) |
307 new Nodes( |
|
308 if (graph3.is_maximal(name) && node.is_empty) graph3.del_node(name) |
|
309 else graph3.map_node(name, _ => node) |
|
310 ) |
311 } |
311 } |
312 |
312 |
313 def iterator: Iterator[(Node.Name, Node)] = |
313 def iterator: Iterator[(Node.Name, Node)] = |
314 graph.iterator.map({ case (name, (node, _)) => (name, node) }) |
314 graph.iterator.map({ case (name, (node, _)) => (name, node) }) |
315 |
315 |