src/Pure/PIDE/document.scala
changeset 57616 50ab1db5c0fd
parent 57615 df1b3452d71c
child 57617 335750d989a3
equal deleted inserted replaced
57615:df1b3452d71c 57616:50ab1db5c0fd
   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