summaryrefslogtreecommitdiff
path: root/src/library/scala/Enumeration.scala
diff options
context:
space:
mode:
Diffstat (limited to 'src/library/scala/Enumeration.scala')
-rw-r--r--src/library/scala/Enumeration.scala33
1 files changed, 16 insertions, 17 deletions
diff --git a/src/library/scala/Enumeration.scala b/src/library/scala/Enumeration.scala
index 871de3714d..c1fe45c8c1 100644
--- a/src/library/scala/Enumeration.scala
+++ b/src/library/scala/Enumeration.scala
@@ -48,14 +48,13 @@ import java.lang.reflect.{ Modifier, Method => JMethod, Field => JField }
* @param names The sequence of names to give to this enumeration's values.
*
* @author Matthias Zenger
- * @version 1.0, 10/02/2004
*/
@serializable
@SerialVersionUID(8476000850333817230L)
abstract class Enumeration(initial: Int, names: String*) {
thisenum =>
- def this() = this(0, null)
+ def this() = this(0)
def this(names: String*) = this(0, names: _*)
/* Note that `readResolve` cannot be private, since otherwise
@@ -82,7 +81,7 @@ abstract class Enumeration(initial: Int, names: String*) {
*/
def values: ValueSet = {
if (!vsetDefined) {
- vset = new ValueSet(immutable.BitSet.empty ++ (vmap.values map (_.id)))
+ vset = new ValueSet(immutable.SortedSet.empty[Int] ++ (vmap.values map (_.id)))
vsetDefined = true
}
vset
@@ -93,8 +92,8 @@ abstract class Enumeration(initial: Int, names: String*) {
/** The string to use to name the next created value. */
protected var nextName = names.iterator
- private def nextNameOrElse(orElse: => String) =
- if (nextName.hasNext) nextName.next else orElse
+ private def nextNameOrNull =
+ if (nextName.hasNext) nextName.next else null
/** The highest integer amongst those used to identify values in this
* enumeration. */
@@ -134,13 +133,14 @@ abstract class Enumeration(initial: Int, names: String*) {
*
* @param i An integer that identifies this value at run-time. It must be
* unique amongst all values of the enumeration.
- * @return ..
+ * @return Fresh value identified by <code>i</code>.
*/
- protected final def Value(i: Int): Value = Value(i, nextNameOrElse(null))
+ protected final def Value(i: Int): Value = Value(i, nextNameOrNull)
/** Creates a fresh value, part of this enumeration, called <code>name</code>.
*
* @param name A human-readable name for that value.
+ * @return Fresh value called <code>name</code>.
*/
protected final def Value(name: String): Value = Value(nextId, name)
@@ -150,14 +150,15 @@ abstract class Enumeration(initial: Int, names: String*) {
* @param i An integer that identifies this value at run-time. It must be
* unique amongst all values of the enumeration.
* @param name A human-readable name for that value.
- * @return ..
+ * @return Fresh value with the provided identifier <code>i</code> and name <code>name</code>.
*/
protected final def Value(i: Int, name: String): Value = new Val(i, name)
private def populateNameMap() {
// The list of possible Value methods: 0-args which return a conforming type
- val methods = getClass.getMethods filter (m => m.getParameterTypes.isEmpty && classOf[Value].isAssignableFrom(m.getReturnType))
-
+ val methods = getClass.getMethods filter (m => m.getParameterTypes.isEmpty &&
+ classOf[Value].isAssignableFrom(m.getReturnType) &&
+ m.getDeclaringClass != classOf[Enumeration])
methods foreach { m =>
val name = m.getName
// invoke method to obtain actual `Value` instance
@@ -173,9 +174,7 @@ abstract class Enumeration(initial: Int, names: String*) {
/* Obtains the name for the value with id `i`. If no name is cached
* in `nmap`, it populates `nmap` using reflection.
*/
- private def nameOf(i: Int): String = synchronized {
- nmap.getOrElse(i, { populateNameMap() ; nmap(i) })
- }
+ private def nameOf(i: Int): String = synchronized { nmap.getOrElse(i, { populateNameMap() ; nmap(i) }) }
/** The type of the enumerated values. */
@serializable
@@ -219,7 +218,7 @@ abstract class Enumeration(initial: Int, names: String*) {
@serializable
@SerialVersionUID(0 - 3501153230598116017L)
protected class Val(i: Int, name: String) extends Value {
- def this(i: Int) = this(i, nextNameOrElse(i.toString))
+ def this(i: Int) = this(i, nextNameOrNull)
def this(name: String) = this(nextId, name)
def this() = this(nextId)
@@ -243,9 +242,9 @@ abstract class Enumeration(initial: Int, names: String*) {
/** A class for sets of values
* Iterating through this set will yield values in increasing order of their ids.
- * @param ids The set of ids of values, organized as a BitSet.
+ * @param ids The set of ids of values, organized as a SortedSet.
*/
- class ValueSet private[Enumeration] (val ids: immutable.BitSet) extends Set[Value] with SetLike[Value, ValueSet] {
+ class ValueSet private[Enumeration] (val ids: immutable.SortedSet[Int]) extends Set[Value] with SetLike[Value, ValueSet] {
override def empty = ValueSet.empty
def contains(v: Value) = ids contains (v.id)
def + (value: Value) = new ValueSet(ids + value.id)
@@ -260,7 +259,7 @@ abstract class Enumeration(initial: Int, names: String*) {
import generic.CanBuildFrom
/** The empty value set */
- val empty = new ValueSet(immutable.BitSet.empty)
+ val empty = new ValueSet(immutable.SortedSet.empty)
/** A value set consisting of given elements */
def apply(elems: Value*): ValueSet = empty ++ elems
/** A builder object for value sets */