aboutsummaryrefslogtreecommitdiff
path: root/library/src/scala/runtime/EnumValues.scala
diff options
context:
space:
mode:
Diffstat (limited to 'library/src/scala/runtime/EnumValues.scala')
-rw-r--r--library/src/scala/runtime/EnumValues.scala25
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
}