src/Pure/PIDE/document.scala
changeset 44960 640c2b957f16
parent 44959 9476c856c4b9
child 45243 27466646a7a3
equal deleted inserted replaced
44959:9476c856c4b9 44960:640c2b957f16
   171     val init: Version = Version(no_id, Map().withDefaultValue(Node.empty))
   171     val init: Version = Version(no_id, Map().withDefaultValue(Node.empty))
   172   }
   172   }
   173 
   173 
   174   type Nodes = Map[Node.Name, Node]
   174   type Nodes = Map[Node.Name, Node]
   175   sealed case class Version(val id: Version_ID, val nodes: Nodes)
   175   sealed case class Version(val id: Version_ID, val nodes: Nodes)
       
   176   {
       
   177     def topological_order: List[Node.Name] =
       
   178     {
       
   179       val names = nodes.map({ case (name, node) => (name.node -> name) })
       
   180       def next(x: Node.Name): List[Node.Name] =
       
   181         nodes(x).header match {
       
   182           case Exn.Res(header) =>
       
   183             for (imp <- header.imports; name <- names.get(imp)) yield(name)
       
   184           case Exn.Exn(_) => Nil
       
   185         }
       
   186       Library.topological_order(next,
       
   187         Library.sort_wrt((name: Node.Name) => name.node, nodes.keys.toList))
       
   188     }
       
   189   }
   176 
   190 
   177 
   191 
   178   /* changes of plain text, eventually resulting in document edits */
   192   /* changes of plain text, eventually resulting in document edits */
   179 
   193 
   180   object Change
   194   object Change