diff options
author | James Iry <jamesiry@gmail.com> | 2013-02-11 12:55:06 -0800 |
---|---|---|
committer | James Iry <jamesiry@gmail.com> | 2013-02-13 08:19:41 -0800 |
commit | 62bc99d3b20a7b37a977b19a6202cdac474eb5f6 (patch) | |
tree | 60a21fcd7332f515fa6dcb8c9735208edca828fc /src/library/scala/collection/immutable/SortedMap.scala | |
parent | a0b1db4ce72e2f449de9ce2da2b6b0958bc33579 (diff) | |
download | scala-62bc99d3b20a7b37a977b19a6202cdac474eb5f6.tar.gz scala-62bc99d3b20a7b37a977b19a6202cdac474eb5f6.tar.bz2 scala-62bc99d3b20a7b37a977b19a6202cdac474eb5f6.zip |
SI-6642 Adds iteratorFrom, keysIteratorFrom, and valuesIteratorFrom
Adds the ability to efficiently create an iterator that starts at a
given key or element of a sorted set or map. Similar work is done for
key and value only iterators on maps.
The bulk of the work is in RedBlackTree. Most of the rest is pushing
the new api methods throughout the appropriate spots in the collection
API.
This commit leaves undone some similar work possible on mutable TreeSets
Diffstat (limited to 'src/library/scala/collection/immutable/SortedMap.scala')
-rw-r--r-- | src/library/scala/collection/immutable/SortedMap.scala | 6 |
1 files changed, 6 insertions, 0 deletions
diff --git a/src/library/scala/collection/immutable/SortedMap.scala b/src/library/scala/collection/immutable/SortedMap.scala index eb04231c55..5e833f87af 100644 --- a/src/library/scala/collection/immutable/SortedMap.scala +++ b/src/library/scala/collection/immutable/SortedMap.scala @@ -82,11 +82,17 @@ self => override def filterKeys(p: A => Boolean): SortedMap[A, B] = new FilteredKeys(p) with SortedMap.Default[A, B] { implicit def ordering: Ordering[A] = self.ordering override def rangeImpl(from : Option[A], until : Option[A]): SortedMap[A, B] = self.rangeImpl(from, until).filterKeys(p) + override def iteratorFrom(start: A) = self iteratorFrom start filter {case (k, _) => p(k)} + override def keysIteratorFrom(start : A) = self keysIteratorFrom start filter p + override def valuesIteratorFrom(start : A) = self iteratorFrom start collect {case (k,v) if p(k) => v} } override def mapValues[C](f: B => C): SortedMap[A, C] = new MappedValues(f) with SortedMap.Default[A, C] { implicit def ordering: Ordering[A] = self.ordering override def rangeImpl(from : Option[A], until : Option[A]): SortedMap[A, C] = self.rangeImpl(from, until).mapValues(f) + override def iteratorFrom(start: A) = self iteratorFrom start map {case (k, v) => (k, f(v))} + override def keysIteratorFrom(start : A) = self keysIteratorFrom start + override def valuesIteratorFrom(start : A) = self valuesIteratorFrom start map f } } |