From f9fed3d5ced2972575ec8d12a922e3fee165f21e Mon Sep 17 00:00:00 2001 From: mihaylov Date: Fri, 3 Mar 2006 16:51:09 +0000 Subject: Small refactoring in some collection classes --- src/library/scala/Iterator.scala | 6 +++--- src/library/scala/collection/Set.scala | 2 +- src/library/scala/collection/immutable/ListMap.scala | 2 +- src/library/scala/collection/immutable/ListSet.scala | 2 ++ src/library/scala/collection/immutable/Queue.scala | 10 +--------- src/library/scala/collection/immutable/Set.scala | 4 ++++ src/library/scala/collection/immutable/Tree.scala | 4 +--- src/library/scala/collection/immutable/TreeSet.scala | 2 ++ src/library/scala/collection/mutable/ArrayBuffer.scala | 3 +-- src/library/scala/collection/mutable/Buffer.scala | 7 +++++-- src/library/scala/collection/mutable/BufferProxy.scala | 4 ++-- src/library/scala/collection/mutable/DoubleLinkedList.scala | 2 +- src/library/scala/collection/mutable/ImmutableMapAdaptor.scala | 10 ++++------ src/library/scala/collection/mutable/ImmutableSetAdaptor.scala | 7 ++----- src/library/scala/collection/mutable/LinkedList.scala | 4 +--- src/library/scala/collection/mutable/ListBuffer.scala | 7 ------- src/library/scala/collection/mutable/SingleLinkedList.scala | 8 +++----- src/library/scala/collection/mutable/SynchronizedBuffer.scala | 4 ++-- 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 C. */ - 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 elem. * * @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]; + /** incl 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]()); + /** - 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 elements 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 elements 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); } -- cgit v1.2.3