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 |