diff options
author | Sean McDirmid <sean.mcdirmid@gmail.com> | 2007-02-26 13:56:20 +0000 |
---|---|---|
committer | Sean McDirmid <sean.mcdirmid@gmail.com> | 2007-02-26 13:56:20 +0000 |
commit | 853b9424e5dbbcfccecc8b027dabbb460f1618c2 (patch) | |
tree | 43204dc4cf0362b5af520bae4b13c0cab6fb3ca1 /src/library/scala/collection/immutable/TreeMap.scala | |
parent | b94b6f9af69aa73f1b2917414fdcdc2d007f2976 (diff) | |
download | scala-853b9424e5dbbcfccecc8b027dabbb460f1618c2.tar.gz scala-853b9424e5dbbcfccecc8b027dabbb460f1618c2.tar.bz2 scala-853b9424e5dbbcfccecc8b027dabbb460f1618c2.zip |
Diffstat (limited to 'src/library/scala/collection/immutable/TreeMap.scala')
-rw-r--r-- | src/library/scala/collection/immutable/TreeMap.scala | 29 |
1 files changed, 26 insertions, 3 deletions
diff --git a/src/library/scala/collection/immutable/TreeMap.scala b/src/library/scala/collection/immutable/TreeMap.scala index 2a61f3d46f..7e98e3a1fd 100644 --- a/src/library/scala/collection/immutable/TreeMap.scala +++ b/src/library/scala/collection/immutable/TreeMap.scala @@ -37,7 +37,7 @@ object TreeMap { */ @serializable class TreeMap[A <% Ordered[A], +B](val size: int, t: RedBlack[A]#Tree[B]) -extends RedBlack[A] with Map[A, B] { +extends RedBlack[A] with SortedMap[A, B] { def isSmaller(x: A, y: A) = x < y @@ -45,11 +45,22 @@ extends RedBlack[A] with Map[A, B] { protected val tree: RedBlack[A]#Tree[B] = if (size == 0) Empty else t + override def rangeImpl(from : Option[A], until : Option[A]) : SortedMap[A,B] = { + val ntree = tree.range(from,until) + new TreeMap[A,B](ntree.count, ntree) + } + override def first = t.first + override def last = t.last + override def compare(k0: A, k1: A): Int = k0.compare(k1) + + + + private def newMap[B](s: int, t: RedBlack[A]#Tree[B]) = new TreeMap[A, B](s, t) /** A factory to create empty maps of the same type of keys. */ - def empty[C] = ListMap.empty[A, C] + def empty[C] = TreeMap.empty[A, C] /** A new TreeMap with the entry added is returned, * if key is <em>not</em> in the TreeMap, otherwise @@ -105,7 +116,19 @@ extends RedBlack[A] with Map[A, B] { * * @return the new iterator */ - def elements: Iterator[(A, B)] = tree.elements + def elements: Iterator[Pair[A, B]] = tree.elements.elements + + override def foreach(f : Tuple2[A,B] => Unit) : Unit = + tree.visit[Unit](())((unit0,a,b) => Tuple2(true, f(Tuple2(a,b)))) + override def forall(f : Tuple2[A,B] => Boolean) : Boolean = + tree.visit[Boolean](true)((input,a,b) => f(Tuple2(a,b)) match { + case ret if input => Tuple2(ret,ret) + })._2 + override def exists(f : Tuple2[A,B] => Boolean) : Boolean = + tree.visit[Boolean](false)((input,a,b) => f(Tuple2(a,b)) match { + case ret if !input => Tuple2(!ret,ret) + })._2 + } |