summaryrefslogtreecommitdiff
path: root/src/main/scala/forge/Util.scala
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/scala/forge/Util.scala')
-rw-r--r--src/main/scala/forge/Util.scala27
1 files changed, 22 insertions, 5 deletions
diff --git a/src/main/scala/forge/Util.scala b/src/main/scala/forge/Util.scala
index 3877015a..c5f71b6b 100644
--- a/src/main/scala/forge/Util.scala
+++ b/src/main/scala/forge/Util.scala
@@ -1,7 +1,25 @@
package forge
+import ammonite.ops.ls
+import play.api.libs.json.{Format, Json}
+
import scala.collection.mutable
+
+object PathRef{
+ implicit def jsonFormatter: Format[PathRef] = Json.format
+}
+case class PathRef(path: ammonite.ops.Path){
+ override def hashCode() = {
+ if (!path.isDir) path.hashCode() + path.mtime.toMillis.toInt
+ else ls.rec.iter(path)
+ .filter(_.isFile)
+ .map(x => x.toString.hashCode + x.mtime.toMillis)
+ .sum
+ .toInt
+ }
+}
+
trait MultiBiMap[K, V]{
def containsValue(v: V): Boolean
def lookupKey(k: K): OSet[V]
@@ -57,22 +75,21 @@ trait OSet[V] extends TraversableOnce[V]{
}
object OSet{
def apply[V](items: V*) = from(items)
- def dedup[V](items: V*) = from(items, dedup = true)
- def from[V](items: TraversableOnce[V], dedup: Boolean = false): OSet[V] = {
- val set = new MutableOSet[V](dedup)
+ def from[V](items: TraversableOnce[V]): OSet[V] = {
+ val set = new MutableOSet[V]()
items.foreach(set.append)
set
}
}
-class MutableOSet[V](dedup: Boolean = false) extends OSet[V]{
+class MutableOSet[V]() extends OSet[V]{
private[this] val items0 = mutable.ArrayBuffer.empty[V]
private[this] val set0 = mutable.Set.empty[V]
def contains(v: V) = set0.contains(v)
def append(v: V) = if (!contains(v)){
set0.add(v)
items0.append(v)
- }else if (!dedup) {
+ }else {
throw new Exception("Duplicated item inserted into OrderedSet: " + v)
}
def appendAll(vs: Seq[V]) = vs.foreach(append)