extend Iterable instead of Traversable because of toStream looping

This commit is contained in:
Mark Harrah 2010-06-21 21:24:25 -04:00
parent b8c4c2b6da
commit c1ca823214
3 changed files with 4 additions and 3 deletions

View File

@ -8,7 +8,7 @@ import scala.collection.{Iterable, Iterator}
import scala.collection.immutable.List
// preserves iteration order
sealed class ListMap[K,V] private(backing: List[(K,V)]) extends Traversable[(K,V)] with NotNull
sealed class ListMap[K,V] private(backing: List[(K,V)]) extends Iterable[(K,V)] with NotNull // use Iterable because Traversable.toStream loops
{
import ListMap.remove
def update(k: K, v: V) = this.+( (k,v) )
@ -18,7 +18,7 @@ sealed class ListMap[K,V] private(backing: List[(K,V)]) extends Traversable[(K,V
def keys: List[K] = backing.reverse.map(_._1)
def apply(k: K): V = get(k).getOrElse(error("Key " + k + " not found"))
def contains(k: K): Boolean = get(k).isDefined
def foreach[T](f: ((K,V)) => T) = backing.reverse.foreach(f)
def iterator = backing.reverse.iterator
override def isEmpty: Boolean = backing.isEmpty
override def toList = backing.reverse
override def toSeq = toList

View File

@ -35,4 +35,5 @@ object ListMapEmpty extends Properties("ListMap.empty")
property("toSeq.isEmpty") = empty.toSeq.isEmpty
property("toStream.isEmpty") = empty.toStream.isEmpty
property("keys.isEmpty") = empty.keys.isEmpty
property("iterator.isEmpty") = empty.iterator.isEmpty
}

View File

@ -74,7 +74,7 @@ object LaunchTest
def mapScalaVersion(versionNumber: String) = scalaVersionMap.find(_._2 == versionNumber).getOrElse {
error("Scala version number " + versionNumber + " from library.properties has no mapping")}._1
val scalaVersionMap = Map( ("2.7.2", "2.7.2") ) ++ List("2.7.3", "2.7.4", "2.7.5", "2.7.6", "2.7.7").map(v => (v, v + ".final"))
val scalaVersionMap = List("2.7.2", "2.8.0.RC4").map(x => (x,x)).toMap ++ List("2.7.3", "2.7.4", "2.7.5", "2.7.6", "2.7.7").map(v => (v, v + ".final"))
def getScalaVersion: String = getScalaVersion(getClass.getClassLoader)
def getScalaVersion(loader: ClassLoader): String = loadProperties(loader, "library.properties").getProperty("version.number")
lazy val AppVersion = loadProperties(getClass.getClassLoader, "xsbt.version.properties").getProperty("version")