src/Pure/PIDE/document.scala
changeset 56336 60434514ec0a
parent 56335 8953d4cc060a
child 56337 520148f9921d
equal deleted inserted replaced
56335:8953d4cc060a 56336:60434514ec0a
    50     def unchanged: Blob = copy(changed = false)
    50     def unchanged: Blob = copy(changed = false)
    51   }
    51   }
    52 
    52 
    53   object Blobs
    53   object Blobs
    54   {
    54   {
    55     def apply(blobs: Map[Node.Name, Blob]): Blobs = new Blobs(blobs, Nodes.empty)
    55     def apply(blobs: Map[Node.Name, Blob]): Blobs = new Blobs(blobs)
    56     val empty: Blobs = apply(Map.empty)
    56     val empty: Blobs = apply(Map.empty)
    57   }
    57   }
    58 
    58 
    59   final class Blobs private(blobs: Map[Node.Name, Blob], default_nodes: Nodes)
    59   final class Blobs private(blobs: Map[Node.Name, Blob])
    60   {
    60   {
    61     private lazy val digests: Map[SHA1.Digest, Blob] =
    61     private lazy val digests: Map[SHA1.Digest, Blob] =
    62       for ((_, blob) <- blobs) yield (blob.bytes.sha1_digest, blob)
    62       for ((_, blob) <- blobs) yield (blob.bytes.sha1_digest, blob)
    63 
    63 
    64     def get(digest: SHA1.Digest): Option[Blob] = digests.get(digest)
    64     def get(digest: SHA1.Digest): Option[Blob] = digests.get(digest)
    65 
    65     def get(name: Node.Name): Option[Blob] = blobs.get(name)
    66     def get(name: Node.Name): Option[Blob] =
       
    67       blobs.get(name) orElse default_nodes(name).get_blob
       
    68 
    66 
    69     def changed(name: Node.Name): Boolean =
    67     def changed(name: Node.Name): Boolean =
    70       get(name) match {
    68       get(name) match {
    71         case Some(blob) => blob.changed
    69         case Some(blob) => blob.changed
    72         case None => false
    70         case None => false
    73       }
    71       }
    74 
       
    75     def default(nodes: Nodes): Blobs = new Blobs(blobs, nodes)
       
    76 
    72 
    77     override def toString: String = blobs.mkString("Blobs(", ",", ")")
    73     override def toString: String = blobs.mkString("Blobs(", ",", ")")
    78   }
    74   }
    79 
    75 
    80 
    76