aboutsummaryrefslogtreecommitdiff
path: root/tests/run/generic/Enum.scala
diff options
context:
space:
mode:
Diffstat (limited to 'tests/run/generic/Enum.scala')
-rw-r--r--tests/run/generic/Enum.scala20
1 files changed, 13 insertions, 7 deletions
diff --git a/tests/run/generic/Enum.scala b/tests/run/generic/Enum.scala
index dbdbfe8eb..38c9022d5 100644
--- a/tests/run/generic/Enum.scala
+++ b/tests/run/generic/Enum.scala
@@ -1,6 +1,8 @@
package generic
import Shapes.Singleton
+import scala.collection.mutable.ResizableArray
+import scala.collection.immutable.Seq
trait Enum {
def enumTag: Int
@@ -8,11 +10,15 @@ trait Enum {
trait FiniteEnum extends Enum
-abstract class EnumValues[E <: Enum](numVals: Int) {
- private var myValues = new Array[AnyRef](numVals)
-
- def registerEnumValue(v: E) =
- myValues(v.enumTag) = v
-
- def value: IndexedSeq[E] = (myValues: IndexedSeq[AnyRef]).asInstanceOf[IndexedSeq[E]]
+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
+ }
}