aboutsummaryrefslogtreecommitdiff
path: root/tests/run/generic/Enum.scala
blob: 38c9022d5c2b57113a234b2e4827bb0886500a67 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
package generic

import Shapes.Singleton
import scala.collection.mutable.ResizableArray
import scala.collection.immutable.Seq

trait Enum {
  def enumTag: Int
}

trait FiniteEnum extends Enum

class EnumValues[E <: Enum] extends ResizableArray[E] {
  private var valuesCache: Seq[E] = Nil
  def register(v: E) = {
    ensureSize(v.enumTag + 1)
    array(v.enumTag) = v
    valuesCache = null
  }
  def values: Seq[E] = {
    if (valuesCache == null) valuesCache = array.filter(_ != null).toList.asInstanceOf[scala.List[E]]
    valuesCache
  }
}