summaryrefslogtreecommitdiff
path: root/src/dotnet-library/scala/collection/jcl/MapWrapper.scala
diff options
context:
space:
mode:
Diffstat (limited to 'src/dotnet-library/scala/collection/jcl/MapWrapper.scala')
-rw-r--r--src/dotnet-library/scala/collection/jcl/MapWrapper.scala66
1 files changed, 66 insertions, 0 deletions
diff --git a/src/dotnet-library/scala/collection/jcl/MapWrapper.scala b/src/dotnet-library/scala/collection/jcl/MapWrapper.scala
new file mode 100644
index 0000000000..80b219c95c
--- /dev/null
+++ b/src/dotnet-library/scala/collection/jcl/MapWrapper.scala
@@ -0,0 +1,66 @@
+/* __ *\
+** ________ ___ / / ___ Scala API **
+** / __/ __// _ | / / / _ | (c) 2006-2007, LAMP/EPFL **
+** __\ \/ /__/ __ |/ /__/ __ | **
+** /____/\___/_/ |_/____/_/ | | **
+** |/ **
+\* */
+
+// $Id$
+
+package scala.collection.jcl;
+
+/** A wrapper around a Java map.
+ *
+ * @author Sean McDirmid
+ */
+trait MapWrapper[K,E] extends jcl.Map[K,E] {
+ protected def underlying : java.util.Map;
+ override def size = underlying.size;
+ override def isEmpty = underlying.isEmpty;
+ override def clear() = underlying.clear;
+ override def put(key : K, elem : E) = {
+ if (elem == null) throw new IllegalArgumentException;
+ val ret = underlying.put(key,elem);
+ if (ret == null) None else Some(ret.asInstanceOf[E]);
+ }
+ override def get(key : K) : Option[E] = {
+ val ret = underlying.get(key);
+ if (ret == null) None else Some(ret.asInstanceOf[E]);
+ }
+
+ override def putAll(that : Iterable[Tuple2[K,E]]) : Unit = that match {
+ case that : MapWrapper[_,_] => underlying.putAll(that.underlying);
+ case _ => super.putAll(that);
+ }
+ override def remove(key : K) = {
+ val ret = underlying.remove(key);
+ if (ret == null) None else Some(ret.asInstanceOf[E]);
+ }
+ override def contains(key : K) = underlying.containsKey(key);
+ override def keySet : Set[K] = new KeySet;
+ override def valueSet : MutableIterable[E] = new ValueSet;
+ override def elements : MutableIterator[Tuple2[K,E]] = new IteratorWrapper;
+ class IteratorWrapper extends MutableIterator[Tuple2[K,E]] {
+ val underlying = MapWrapper.this.underlying.entrySet.iterator;
+ def hasNext = underlying.hasNext;
+ def remove = underlying.remove;
+ def next = {
+ val next = underlying.next.asInstanceOf[java.util.Map.Entry];
+ Tuple2(next.getKey.asInstanceOf[K],next.getValue.asInstanceOf[E]);
+ }
+ }
+ class KeySet extends super.KeySet with SetWrapper[K] {
+ protected val underlying = MapWrapper.this.underlying.keySet;
+ }
+ class ValueSet extends IterableWrapper[E] {
+ val underlying = MapWrapper.this.underlying.values;
+ override def has(e : E) = MapWrapper.this.underlying.containsValue(e);
+ }
+ override def toString = underlying.toString;
+ override def hashCode = underlying.hashCode;
+ override def equals(that : Any) = that match {
+ case that: MapWrapper[_,_] => underlying == that.underlying;
+ case _ => super.equals(that);
+ }
+}