diff options
Diffstat (limited to 'library/src')
-rw-r--r-- | library/src/scala/runtime/EnumValues.scala | 25 |
1 files changed, 14 insertions, 11 deletions
diff --git a/library/src/scala/runtime/EnumValues.scala b/library/src/scala/runtime/EnumValues.scala index 6d2e56cf3..6f9d907b3 100644 --- a/library/src/scala/runtime/EnumValues.scala +++ b/library/src/scala/runtime/EnumValues.scala @@ -1,18 +1,21 @@ package scala.runtime -import scala.collection.immutable.Seq -import scala.collection.mutable.ResizableArray +import scala.collection.immutable.Map + +class EnumValues[E <: Enum] { + private var myMap: Map[Int, E] = Map() + private var fromNameCache: Map[String, E] = null -class EnumValues[E <: Enum] extends ResizableArray[E] { - private var valuesCache: List[E] = Nil def register(v: E) = { - ensureSize(v.enumTag + 1) - size0 = size0 max (v.enumTag + 1) - array(v.enumTag) = v - valuesCache = null + require(!myMap.contains(v.enumTag)) + myMap = myMap.updated(v.enumTag, v) + fromNameCache = null } - def values: Seq[E] = { - if (valuesCache == null) valuesCache = array.filter(_ != null).toList.asInstanceOf[scala.List[E]] - valuesCache + + def fromInt: Map[Int, E] = myMap + def fromName: Map[String, E] = { + if (fromNameCache == null) fromNameCache = myMap.values.map(v => v.toString -> v).toMap + fromNameCache } + def values: Iterable[E] = myMap.values } |