aboutsummaryrefslogtreecommitdiff
path: root/library/src/scala/runtime/EnumValues.scala
blob: 6f9d907b314fa3aeb7fd61ceed20a49b39a786cb (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
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
}