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.scala21
1 files changed, 21 insertions, 0 deletions
diff --git a/library/src/scala/runtime/EnumValues.scala b/library/src/scala/runtime/EnumValues.scala
new file mode 100644
index 000000000..6f9d907b3
--- /dev/null
+++ b/library/src/scala/runtime/EnumValues.scala
@@ -0,0 +1,21 @@
+package scala.runtime
+
+import scala.collection.immutable.Map
+
+class EnumValues[E <: Enum] {
+ private var myMap: Map[Int, E] = Map()
+ private var fromNameCache: Map[String, E] = null
+
+ def register(v: E) = {
+ require(!myMap.contains(v.enumTag))
+ myMap = myMap.updated(v.enumTag, v)
+ fromNameCache = null
+ }
+
+ 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
+}