summaryrefslogtreecommitdiff
path: root/src/library/scala/collection/immutable/TreeMap.scala
diff options
context:
space:
mode:
authorSean McDirmid <sean.mcdirmid@gmail.com>2007-02-26 13:56:20 +0000
committerSean McDirmid <sean.mcdirmid@gmail.com>2007-02-26 13:56:20 +0000
commit853b9424e5dbbcfccecc8b027dabbb460f1618c2 (patch)
tree43204dc4cf0362b5af520bae4b13c0cab6fb3ca1 /src/library/scala/collection/immutable/TreeMap.scala
parentb94b6f9af69aa73f1b2917414fdcdc2d007f2976 (diff)
downloadscala-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.scala29
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
+
}