summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormihaylov <mihaylov@epfl.ch>2006-03-03 16:51:09 +0000
committermihaylov <mihaylov@epfl.ch>2006-03-03 16:51:09 +0000
commitf9fed3d5ced2972575ec8d12a922e3fee165f21e (patch)
tree0ab1cab894ad6d02ae2ac303c01691275963528d
parent19cd1641c14fd029505779054a828d10c5f16927 (diff)
downloadscala-f9fed3d5ced2972575ec8d12a922e3fee165f21e.tar.gz
scala-f9fed3d5ced2972575ec8d12a922e3fee165f21e.tar.bz2
scala-f9fed3d5ced2972575ec8d12a922e3fee165f21e.zip
Small refactoring in some collection classes
-rw-r--r--src/library/scala/Iterator.scala6
-rw-r--r--src/library/scala/collection/Set.scala2
-rw-r--r--src/library/scala/collection/immutable/ListMap.scala2
-rw-r--r--src/library/scala/collection/immutable/ListSet.scala2
-rw-r--r--src/library/scala/collection/immutable/Queue.scala10
-rw-r--r--src/library/scala/collection/immutable/Set.scala4
-rw-r--r--src/library/scala/collection/immutable/Tree.scala4
-rw-r--r--src/library/scala/collection/immutable/TreeSet.scala2
-rw-r--r--src/library/scala/collection/mutable/ArrayBuffer.scala3
-rw-r--r--src/library/scala/collection/mutable/Buffer.scala7
-rw-r--r--src/library/scala/collection/mutable/BufferProxy.scala4
-rw-r--r--src/library/scala/collection/mutable/DoubleLinkedList.scala2
-rw-r--r--src/library/scala/collection/mutable/ImmutableMapAdaptor.scala10
-rw-r--r--src/library/scala/collection/mutable/ImmutableSetAdaptor.scala7
-rw-r--r--src/library/scala/collection/mutable/LinkedList.scala4
-rw-r--r--src/library/scala/collection/mutable/ListBuffer.scala7
-rw-r--r--src/library/scala/collection/mutable/SingleLinkedList.scala8
-rw-r--r--src/library/scala/collection/mutable/SynchronizedBuffer.scala4
18 files changed, 36 insertions, 52 deletions
diff --git a/src/library/scala/Iterator.scala b/src/library/scala/Iterator.scala
index 1c813543d4..99526ddc41 100644
--- a/src/library/scala/Iterator.scala
+++ b/src/library/scala/Iterator.scala
@@ -430,11 +430,11 @@ mixin class Iterator[+A] {
* @return a list which enumerates all elements of this iterator.
*/
def toList: List[A] = {
- var res: List[A] = Nil;
+ val res = new collection.mutable.ListBuffer[A];
while (hasNext) {
- res = next :: res;
+ res += next;
}
- res.reverse
+ res.toList
}
}
diff --git a/src/library/scala/collection/Set.scala b/src/library/scala/collection/Set.scala
index 66f571213e..99d7968567 100644
--- a/src/library/scala/collection/Set.scala
+++ b/src/library/scala/collection/Set.scala
@@ -87,5 +87,5 @@ mixin class Set[A] extends AnyRef with Function1[A, Boolean] with Iterable[A] {
* @return a string showing all elements of this set.
*/
override def toString(): String =
- if (size == 0) "{}" else toList.mkString("{", ", ", "}");
+ if (isEmpty) "{}" else toList.mkString("{", ", ", "}");
}
diff --git a/src/library/scala/collection/immutable/ListMap.scala b/src/library/scala/collection/immutable/ListMap.scala
index 21ffd72da8..6efe90b4b2 100644
--- a/src/library/scala/collection/immutable/ListMap.scala
+++ b/src/library/scala/collection/immutable/ListMap.scala
@@ -30,7 +30,7 @@ class ListMap[A, B] extends AnyRef with Map[A, B] {
/** This method returns a new ListMap instance mapping keys of the
* same type to values of type <code>C</code>.
*/
- def empty[C] = new ListMap[A, C];
+ def empty[C] = ListMap.Empty[A, C];
/** Returns the number of mappings in this map.
*
diff --git a/src/library/scala/collection/immutable/ListSet.scala b/src/library/scala/collection/immutable/ListSet.scala
index e510f4bfc5..2f63aa610e 100644
--- a/src/library/scala/collection/immutable/ListSet.scala
+++ b/src/library/scala/collection/immutable/ListSet.scala
@@ -36,6 +36,8 @@ class ListSet[A] extends AnyRef with Set[A] {
*/
def size: Int = 0;
+ def empty = new ListSet[A];
+
/** Checks if this set contains element <code>elem</code>.
*
* @param elem the element to check for membership.
diff --git a/src/library/scala/collection/immutable/Queue.scala b/src/library/scala/collection/immutable/Queue.scala
index 02a8533383..88b725a656 100644
--- a/src/library/scala/collection/immutable/Queue.scala
+++ b/src/library/scala/collection/immutable/Queue.scala
@@ -25,15 +25,7 @@ object Queue {
[serializable]
class Queue[+A](elem: A*) extends Seq[A] {
protected val in: List[A] = Nil;
- protected val out: List[A] = itToList(elem.elements);
-
- protected def itToList[B >: A](elems: Iterator[B]): List[B] =
- if (elems.hasNext) {
- val hd = elems.next;
- hd :: itToList(elems)
- }
- else
- Nil;
+ protected val out: List[A] = elem.elements.toList;
protected def mkQueue[A](i: List[A], o: List[A]): Queue[A] =
new Queue[A]() {
diff --git a/src/library/scala/collection/immutable/Set.scala b/src/library/scala/collection/immutable/Set.scala
index 8f479d1b50..78e78257d6 100644
--- a/src/library/scala/collection/immutable/Set.scala
+++ b/src/library/scala/collection/immutable/Set.scala
@@ -26,6 +26,10 @@ mixin class Set[A] extends AnyRef with collection.Set[A] {
*/
def +(elem: A): Set[A];
+ /** @return an empty set of the same type as this set
+ */
+ def empty: Set[A];
+
/** <code>incl</code> can be used to add many elements to the set
* at the same time.
*/
diff --git a/src/library/scala/collection/immutable/Tree.scala b/src/library/scala/collection/immutable/Tree.scala
index d069ca82ad..fdeea70f1f 100644
--- a/src/library/scala/collection/immutable/Tree.scala
+++ b/src/library/scala/collection/immutable/Tree.scala
@@ -90,11 +90,9 @@ abstract class Tree[A <% Ordered[A], B]() extends AnyRef {
*/
protected type aNode = GBTree[A,B];
- private val empty: aNode = GBLeaf[A,B]();
-
/** The nodes in the tree.
*/
- protected def tree: aNode = empty;
+ protected def tree: aNode = GBLeaf[A,B]();
/** This abstract method should be defined by a concrete implementation
** C[T] as something like:
diff --git a/src/library/scala/collection/immutable/TreeSet.scala b/src/library/scala/collection/immutable/TreeSet.scala
index d681f01fb7..24a11c8b81 100644
--- a/src/library/scala/collection/immutable/TreeSet.scala
+++ b/src/library/scala/collection/immutable/TreeSet.scala
@@ -41,6 +41,8 @@ class TreeSet[A <% Ordered[A]]() extends Tree[A, A] with Set[A] {
*/
def +(elem: A): TreeSet[A] = updateOrAdd(elem, elem);
+ override def empty: Set[A] = New(0, GBLeaf[A,A]());
+
/** <code>-</code> can be used to remove a single element from
* a set.
*/
diff --git a/src/library/scala/collection/mutable/ArrayBuffer.scala b/src/library/scala/collection/mutable/ArrayBuffer.scala
index 8f56d42447..1986964280 100644
--- a/src/library/scala/collection/mutable/ArrayBuffer.scala
+++ b/src/library/scala/collection/mutable/ArrayBuffer.scala
@@ -35,11 +35,10 @@ class ArrayBuffer[A] extends Buffer[A] with ResizableArray[A] {
*
* @param elem the element to append.
*/
- def +(elem: A): Buffer[A] = {
+ def +=(elem: A): Unit = {
ensureSize(size+1);
array(size) = elem;
size = size + 1;
- this
}
/** Appends a number of elements provided by an iterable object
diff --git a/src/library/scala/collection/mutable/Buffer.scala b/src/library/scala/collection/mutable/Buffer.scala
index f04c2dbe1e..da89424865 100644
--- a/src/library/scala/collection/mutable/Buffer.scala
+++ b/src/library/scala/collection/mutable/Buffer.scala
@@ -33,13 +33,16 @@ mixin class Buffer[A] extends AnyRef
*
* @param elem the element to append.
*/
- def +(elem: A): Buffer[A];
+ def +(elem: A): Buffer[A] = {
+ this += elem;
+ this
+ }
/** Append a single element to this buffer.
*
* @param elem the element to append.
*/
- def +=(elem: A): Unit = this + elem;
+ def +=(elem: A): Unit;
/** Appends a number of elements provided by an iterable object
* via its <code>elements</code> method. The identity of the
diff --git a/src/library/scala/collection/mutable/BufferProxy.scala b/src/library/scala/collection/mutable/BufferProxy.scala
index 463f537841..f21ad6c339 100644
--- a/src/library/scala/collection/mutable/BufferProxy.scala
+++ b/src/library/scala/collection/mutable/BufferProxy.scala
@@ -34,13 +34,13 @@ mixin class BufferProxy[A] extends Buffer[A] with Proxy {
*
* @param elem the element to append.
*/
- def +(elem: A): Buffer[A] = self.+(elem);
+ override def +(elem: A): Buffer[A] = self.+(elem);
/** Append a single element to this buffer.
*
* @param elem the element to append.
*/
- override def +=(elem: A): Unit = self.+=(elem);
+ def +=(elem: A): Unit = self.+=(elem);
/** Appends a number of elements provided by an iterable object
* via its <code>elements</code> method. The identity of the
diff --git a/src/library/scala/collection/mutable/DoubleLinkedList.scala b/src/library/scala/collection/mutable/DoubleLinkedList.scala
index 4bc79652ca..610dc3f6e5 100644
--- a/src/library/scala/collection/mutable/DoubleLinkedList.scala
+++ b/src/library/scala/collection/mutable/DoubleLinkedList.scala
@@ -25,7 +25,7 @@ abstract class DoubleLinkedList[A, This >: AllRef <: DoubleLinkedList[A, This]]
extends SingleLinkedList[A, This]
{
- var prev: This = _;
+ var prev: This;
override def append(that: This): Unit =
if (that == null)
diff --git a/src/library/scala/collection/mutable/ImmutableMapAdaptor.scala b/src/library/scala/collection/mutable/ImmutableMapAdaptor.scala
index cd90a3e2d0..29e1e36161 100644
--- a/src/library/scala/collection/mutable/ImmutableMapAdaptor.scala
+++ b/src/library/scala/collection/mutable/ImmutableMapAdaptor.scala
@@ -22,9 +22,9 @@ package scala.collection.mutable;
* @version 1.0, 21/07/2003
*/
[serializable]
-class ImmutableMapAdaptor[A, B](m: immutable.Map[A, B]) extends Map[A, B] {
-
- protected var imap = m;
+class ImmutableMapAdaptor[A, B](protected var imap: immutable.Map[A, B])
+extends Map[A, B]
+{
def size: Int = imap.size;
@@ -54,13 +54,11 @@ class ImmutableMapAdaptor[A, B](m: immutable.Map[A, B]) extends Map[A, B] {
def -=(key: A): Unit = { imap = imap - key; }
- override def clear: Unit = { imap = empty; }
+ override def clear: Unit = { imap = imap.empty; }
override def map(f: (A, B) => B): Unit = { imap = imap.map(f); }
override def filter(p: (A, B) => Boolean): Unit = { imap = imap.filter(p); }
override def mappingToString(p: Pair[A, B]) = imap.mappingToString(p);
-
- protected def empty: scala.collection.immutable.Map[A, B] = m;
}
diff --git a/src/library/scala/collection/mutable/ImmutableSetAdaptor.scala b/src/library/scala/collection/mutable/ImmutableSetAdaptor.scala
index 80db910c1c..b6f1cfd710 100644
--- a/src/library/scala/collection/mutable/ImmutableSetAdaptor.scala
+++ b/src/library/scala/collection/mutable/ImmutableSetAdaptor.scala
@@ -22,9 +22,7 @@ package scala.collection.mutable;
* @version 1.0, 21/07/2003
*/
[serializable]
-class ImmutableSetAdaptor[A](s: immutable.Set[A]) extends Set[A] {
-
- protected var set = s;
+class ImmutableSetAdaptor[A](protected var set: immutable.Set[A]) extends Set[A] {
def size: Int = set.size;
@@ -46,7 +44,6 @@ class ImmutableSetAdaptor[A](s: immutable.Set[A]) extends Set[A] {
def -=(elem: A): Unit = { set = set - elem; }
- def clear: Unit = { set = empty; }
+ def clear: Unit = { set = set.empty; }
- protected def empty: scala.collection.immutable.Set[A] = s;
}
diff --git a/src/library/scala/collection/mutable/LinkedList.scala b/src/library/scala/collection/mutable/LinkedList.scala
index b6b80fa3e0..e5045950d6 100644
--- a/src/library/scala/collection/mutable/LinkedList.scala
+++ b/src/library/scala/collection/mutable/LinkedList.scala
@@ -19,11 +19,9 @@ package scala.collection.mutable;
* @version 1.0, 08/07/2003
*/
[serializable]
-class LinkedList[A](head: A, tail: LinkedList[A])
+class LinkedList[A](var elem: A, var next: LinkedList[A])
extends SingleLinkedList[A, LinkedList[A]]
{
- elem = head;
- next = tail;
override def equals(obj: Any): Boolean = (
obj.isInstanceOf[LinkedList[A]]
diff --git a/src/library/scala/collection/mutable/ListBuffer.scala b/src/library/scala/collection/mutable/ListBuffer.scala
index 815a34b014..eabeabeaa1 100644
--- a/src/library/scala/collection/mutable/ListBuffer.scala
+++ b/src/library/scala/collection/mutable/ListBuffer.scala
@@ -21,13 +21,6 @@ final class ListBuffer[A] extends Buffer[A] {
private var last: ::[A] = _;
private var exported: boolean = false;
- /** Append a single element to this buffer and return
- * the identity of the buffer. Same as ``this += x; this''
- *
- * @param x the element to append.
- */
- def + (x: A): Buffer[A] = { this += x; this }
-
/** Prepend a single element to this buffer.
*
* @param x the element to prepend.
diff --git a/src/library/scala/collection/mutable/SingleLinkedList.scala b/src/library/scala/collection/mutable/SingleLinkedList.scala
index 67151cb29e..32b4690d4d 100644
--- a/src/library/scala/collection/mutable/SingleLinkedList.scala
+++ b/src/library/scala/collection/mutable/SingleLinkedList.scala
@@ -20,15 +20,14 @@ package scala.collection.mutable;
* @author Matthias Zenger
* @version 1.0, 08/07/2003
*/
-[serializable]
abstract class SingleLinkedList[A, This >: AllRef <: SingleLinkedList[A, This]]
requires This
extends AnyRef with Seq[A]
{
- var elem: A = _;
+ var elem: A;
- var next: This = null;
+ var next: This;
def length: Int = 1 + (if (next == null) 0 else next.length);
@@ -62,7 +61,6 @@ abstract class SingleLinkedList[A, This >: AllRef <: SingleLinkedList[A, This]]
}
}
- override def toList: List[A] =
- if (next == null) (elem :: Nil) else (elem :: next.toList);
+ override def toList: List[A] = elements toList;
}
diff --git a/src/library/scala/collection/mutable/SynchronizedBuffer.scala b/src/library/scala/collection/mutable/SynchronizedBuffer.scala
index 5c41720732..ed692d4f1b 100644
--- a/src/library/scala/collection/mutable/SynchronizedBuffer.scala
+++ b/src/library/scala/collection/mutable/SynchronizedBuffer.scala
@@ -37,7 +37,7 @@ mixin class SynchronizedBuffer[A] extends Buffer[A] {
*
* @param elem the element to append.
*/
- abstract override def +(elem: A): Buffer[A] = synchronized {
+ override def +(elem: A): Buffer[A] = synchronized {
super.+(elem);
}
@@ -45,7 +45,7 @@ mixin class SynchronizedBuffer[A] extends Buffer[A] {
*
* @param elem the element to append.
*/
- override def +=(elem: A): Unit = synchronized {
+ abstract override def +=(elem: A): Unit = synchronized {
super.+=(elem);
}