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.scala18
1 files changed, 18 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..6d2e56cf3
--- /dev/null
+++ b/library/src/scala/runtime/EnumValues.scala
@@ -0,0 +1,18 @@
+package scala.runtime
+
+import scala.collection.immutable.Seq
+import scala.collection.mutable.ResizableArray
+
+class EnumValues[E <: Enum] extends ResizableArray[E] {
+ private var valuesCache: List[E] = Nil
+ def register(v: E) = {
+ ensureSize(v.enumTag + 1)
+ size0 = size0 max (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
+ }
+}