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.scala23
1 files changed, 23 insertions, 0 deletions
diff --git a/src/main/scala/forge/Util.scala b/src/main/scala/forge/Util.scala
index 7beffd4e..0a751da5 100644
--- a/src/main/scala/forge/Util.scala
+++ b/src/main/scala/forge/Util.scala
@@ -7,7 +7,30 @@ import java.util.jar.JarEntry
import sourcecode.Enclosing
import scala.collection.JavaConverters._
+import scala.collection.mutable
+class MultiBiMap[K, V](){
+ private[this] val valueToKey = mutable.Map.empty[V, K]
+ private[this] val keyToValues = mutable.Map.empty[K, List[V]]
+ def containsValue(v: V) = valueToKey.contains(v)
+ def lookupValue(v: V) = valueToKey(v)
+ def lookupValueOpt(v: V) = valueToKey.get(v)
+ def add(k: K, v: V): Unit = {
+ valueToKey(v) = k
+ keyToValues(k) = v :: keyToValues.getOrElse(k, Nil)
+ }
+ def removeAll(k: K): Seq[V] = {
+ val vs = keyToValues(k)
+ for(v <- vs){
+ valueToKey.remove(v)
+ }
+ vs
+ }
+ def addAll(k: K, vs: Seq[V]): Unit = {
+ for(v <- vs) valueToKey(v) = k
+ keyToValues(k) = vs ++: keyToValues.getOrElse(k, Nil)
+ }
+}
object Util{
def compileAll(sources: Target[Seq[jnio.Path]])
(implicit defCtx: DefCtx) = {