src/Pure/PIDE/command.scala
changeset 72869 015a61936c13
parent 72848 d5d0e36eda16
child 72946 9329abcdd651
equal deleted inserted replaced
72868:90e28f005be9 72869:015a61936c13
    52 
    52 
    53   /* results */
    53   /* results */
    54 
    54 
    55   object Results
    55   object Results
    56   {
    56   {
    57     type Entry = (Long, XML.Tree)
    57     type Entry = (Long, XML.Elem)
    58     val empty: Results = new Results(SortedMap.empty)
    58     val empty: Results = new Results(SortedMap.empty)
    59     def make(args: TraversableOnce[Results.Entry]): Results = (empty /: args)(_ + _)
    59     def make(args: TraversableOnce[Results.Entry]): Results = (empty /: args)(_ + _)
    60     def merge(args: TraversableOnce[Results]): Results = (empty /: args)(_ ++ _)
    60     def merge(args: TraversableOnce[Results]): Results = (empty /: args)(_ ++ _)
    61   }
    61   }
    62 
    62 
    63   final class Results private(private val rep: SortedMap[Long, XML.Tree])
    63   final class Results private(private val rep: SortedMap[Long, XML.Elem])
    64   {
    64   {
    65     def is_empty: Boolean = rep.isEmpty
    65     def is_empty: Boolean = rep.isEmpty
    66     def defined(serial: Long): Boolean = rep.isDefinedAt(serial)
    66     def defined(serial: Long): Boolean = rep.isDefinedAt(serial)
    67     def get(serial: Long): Option[XML.Tree] = rep.get(serial)
    67     def get(serial: Long): Option[XML.Elem] = rep.get(serial)
    68     def iterator: Iterator[Results.Entry] = rep.iterator
    68     def iterator: Iterator[Results.Entry] = rep.iterator
    69 
    69 
    70     def + (entry: Results.Entry): Results =
    70     def + (entry: Results.Entry): Results =
    71       if (defined(entry._1)) this
    71       if (defined(entry._1)) this
    72       else new Results(rep + entry)
    72       else new Results(rep + entry)
   185 
   185 
   186   /* state */
   186   /* state */
   187 
   187 
   188   object State
   188   object State
   189   {
   189   {
   190     def get_result(states: List[State], serial: Long): Option[XML.Tree] =
   190     def get_result(states: List[State], serial: Long): Option[XML.Elem] =
   191       states.find(st => st.results.defined(serial)).map(st => st.results.get(serial).get)
   191       states.find(st => st.results.defined(serial)).map(st => st.results.get(serial).get)
   192 
   192 
   193     def get_result_proper(states: List[State], props: Properties.T): Option[Results.Entry] =
   193     def get_result_proper(states: List[State], props: Properties.T): Option[Results.Entry] =
   194       for {
   194       for {
   195         serial <- Markup.Serial.unapply(props)
   195         serial <- Markup.Serial.unapply(props)
   196         tree @ XML.Elem(_, body) <- get_result(states, serial)
   196         elem <- get_result(states, serial)
   197         if body.nonEmpty
   197         if elem.body.nonEmpty
   198       } yield (serial -> tree)
   198       } yield serial -> elem
   199 
   199 
   200     def merge_results(states: List[State]): Results =
   200     def merge_results(states: List[State]): Results =
   201       Results.merge(states.map(_.results))
   201       Results.merge(states.map(_.results))
   202 
   202 
   203     def merge_exports(states: List[State]): Exports =
   203     def merge_exports(states: List[State]): Exports =