diff options
Diffstat (limited to 'library/src/scala/runtime/EnumValues.scala')
-rw-r--r-- | library/src/scala/runtime/EnumValues.scala | 21 |
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 +} |