summaryrefslogtreecommitdiff
path: root/src/library/scala/collection/mutable
diff options
context:
space:
mode:
authorPhilipp Haller <hallerp@gmail.com>2009-09-08 10:37:01 +0000
committerPhilipp Haller <hallerp@gmail.com>2009-09-08 10:37:01 +0000
commit6b01bf9c30fb8f52415166739508286a08f9e3db (patch)
tree032facdaedaa469d631b56620464236255fb4ef3 /src/library/scala/collection/mutable
parentba6cdaf1f3b7b0b4dc8b90bd5a6bf0b68dbabaec (diff)
downloadscala-6b01bf9c30fb8f52415166739508286a08f9e3db.tar.gz
scala-6b01bf9c30fb8f52415166739508286a08f9e3db.tar.bz2
scala-6b01bf9c30fb8f52415166739508286a08f9e3db.zip
Reintegrated DoubleLinkedList, SynchronizedBuff...
Reintegrated DoubleLinkedList, SynchronizedBuffer, ArrayStack, BufferProxy.
Diffstat (limited to 'src/library/scala/collection/mutable')
-rw-r--r--src/library/scala/collection/mutable/ArrayStack.scala12
-rw-r--r--src/library/scala/collection/mutable/BufferProxy.scala20
-rw-r--r--src/library/scala/collection/mutable/DoubleLinkedList.scala33
-rw-r--r--src/library/scala/collection/mutable/SynchronizedBuffer.scala7
4 files changed, 47 insertions, 25 deletions
diff --git a/src/library/scala/collection/mutable/ArrayStack.scala b/src/library/scala/collection/mutable/ArrayStack.scala
index cf7e401fd2..8ceff87d19 100644
--- a/src/library/scala/collection/mutable/ArrayStack.scala
+++ b/src/library/scala/collection/mutable/ArrayStack.scala
@@ -8,9 +8,10 @@
// $Id$
-// !!! todo: integrate in collections framework
package scala.collection.mutable;
+import scala.collection.generic._
+
private object Utils{
def growArray(x : Array[AnyRef]) = {
val y = new Array[AnyRef](x.length * 2);
@@ -33,9 +34,16 @@ private object Utils{
*/
@cloneable
class ArrayStack[T] private(private var table : Array[AnyRef],
- private var index : Int) extends Iterable[T]{
+ private var index : Int) extends collection.Sequence[T] with Cloneable[ArrayStack[T]] {
def this() = this(new Array[AnyRef](1), 0);
+ /** Retrieve n'th element from stack, where top of stack has index 0 */
+ def apply(n: Int) =
+ table(index - 1 - n).asInstanceOf[T]
+
+ /** The number of elements in the stack */
+ def length = index
+
/**
* Push an element onto the stack.
*
diff --git a/src/library/scala/collection/mutable/BufferProxy.scala b/src/library/scala/collection/mutable/BufferProxy.scala
index ad8ac0970f..a69b51cfb9 100644
--- a/src/library/scala/collection/mutable/BufferProxy.scala
+++ b/src/library/scala/collection/mutable/BufferProxy.scala
@@ -1,4 +1,3 @@
-/* TODO: Reintegrate
/* __ *\
** ________ ___ / / ___ Scala API **
** / __/ __// _ | / / / _ | (c) 2003-2009, LAMP/EPFL **
@@ -12,6 +11,8 @@
package scala.collection.mutable
+import scala.collection.generic._
+import scala.collection.script._
/** This is a simple proxy class for <a href="Buffer.html"
* target="contentFrame"><code>scala.collection.mutable.Buffer</code></a>.
@@ -45,7 +46,7 @@ trait BufferProxy[A] extends Buffer[A] with Proxy {
*/
def +=(elem: A): this.type = { self.+=(elem); this }
- override def readOnly = self.readOnly
+// override def readOnly = self.readOnly
/** Appends a number of elements provided by an iterable object
* via its <code>iterator</code> method. The identity of the
@@ -54,14 +55,14 @@ trait BufferProxy[A] extends Buffer[A] with Proxy {
* @param iter the iterable object.
* @return the updated buffer.
*/
- override def ++(iter: collection.Iterable[A]): Buffer[A] = self.++(iter)
+ def ++(iter: collection.Iterable[A]): Buffer[A] = self.++(iter)
/** Appends a number of elements provided by an iterable object
* via its <code>iterator</code> method.
*
* @param iter the iterable object.
*/
- override def ++=(iter: collection.Iterable[A]): this.type = { self.++=(iter); this }
+ def ++=(iter: collection.Iterable[A]): this.type = { self.++=(iter); this }
/** Appends a sequence of elements to this buffer.
*
@@ -74,7 +75,7 @@ trait BufferProxy[A] extends Buffer[A] with Proxy {
*
* @param iter the iterable object.
*/
- override def appendAll(iter: collection.Iterable[A]): Unit = self.appendAll(iter)
+ def appendAll(iter: collection.Iterable[A]): Unit = self.appendAll(iter)
/** Prepend a single element to this buffer and return
* the identity of the buffer.
@@ -89,7 +90,7 @@ trait BufferProxy[A] extends Buffer[A] with Proxy {
*
* @param iter the iterable object.
*/
- override def ++:(iter: collection.Iterable[A]): Buffer[A] = self.++:(iter)
+ def ++:(iter: collection.Iterable[A]): Buffer[A] = self.++:(iter)
/** Prepend an element to this list.
*
@@ -103,7 +104,7 @@ trait BufferProxy[A] extends Buffer[A] with Proxy {
*
* @param iter the iterable object.
*/
- override def prependAll(elems: collection.Iterable[A]): Unit = self.prependAll(elems)
+ def prependAll(elems: collection.Iterable[A]): Unit = self.prependAll(elems)
/** Inserts new elements at the index <code>n</code>. Opposed to method
* <code>update</code>, this method will not replace an element with a
@@ -123,6 +124,8 @@ trait BufferProxy[A] extends Buffer[A] with Proxy {
*/
def insertAll(n: Int, iter: collection.Iterable[A]): Unit = self.insertAll(n, iter)
+ override def insertAll(n: Int, iter: collection.Traversable[A]): Unit = self.insertAll(n, iter)
+
/** Replace element at index <code>n</code> with the new element
* <code>newelem</code>.
*
@@ -145,7 +148,7 @@ trait BufferProxy[A] extends Buffer[A] with Proxy {
*
* @param cmd the message to send.
*/
- override def <<(cmd: Message[(Location, A)]): Unit = self << cmd
+ override def <<(cmd: Message[A]): Unit = self << cmd
/** Return a clone of this buffer.
*
@@ -155,4 +158,3 @@ trait BufferProxy[A] extends Buffer[A] with Proxy {
def self = BufferProxy.this.self.clone()
}
}
-*/
diff --git a/src/library/scala/collection/mutable/DoubleLinkedList.scala b/src/library/scala/collection/mutable/DoubleLinkedList.scala
index 3b28648489..e66a20c0cf 100644
--- a/src/library/scala/collection/mutable/DoubleLinkedList.scala
+++ b/src/library/scala/collection/mutable/DoubleLinkedList.scala
@@ -1,5 +1,3 @@
-/* TODO: reintegrate
-
/* __ *\
** ________ ___ / / ___ Scala API **
** / __/ __// _ | / / / _ | (c) 2003-2009, LAMP/EPFL **
@@ -23,16 +21,29 @@ import scala.collection.generic._
* @version 2.8
*/
@serializable
-class DoubleLinkedList[A]/*(_elem: A, _next: DoubleLinkedList[A])*/ extends LinearSequence[A] with DoubleLinkedListTemplate[A, DoubleLinkedList[A]] {
- override protected[this] def newBuilder = DoubleLinkedList.newBuilder
- override def traversableBuilder[B]: Builder[B, DoubleLinkedList[B]] = DoubleLinkedList.newBuilder[B]
+class DoubleLinkedList[A](_elem: A, _next: DoubleLinkedList[A]) extends LinearSequence[A]
+ with TraversableClass[A, DoubleLinkedList]
+ with DoubleLinkedListTemplate[A, DoubleLinkedList[A]] {
+ elem = _elem
+ next = _next
+ override def companion: Companion[DoubleLinkedList] = DoubleLinkedList
}
object DoubleLinkedList extends SequenceFactory[DoubleLinkedList] {
- implicit def builderFactory[A]: BuilderFactory[A, DoubleLinkedList[A], Coll] = new BuilderFactory[A, DoubleLinkedList[A], Coll] { def apply(from: Coll) = from.traversableBuilder[A] }
- def newBuilder[A]: Builder[A, DoubleLinkedList[A]] = null // !!!
+ implicit def builderFactory[A]: BuilderFactory[A, DoubleLinkedList[A], Coll] = //new BuilderFactory[A, DoubleLinkedList[A], Coll] { def apply(from: Coll) = from.traversableBuilder[A] }
+ new VirtualBuilderFactory[A]
+ def newBuilder[A]: Builder[A, DoubleLinkedList[A]] =
+ new Builder[A, DoubleLinkedList[A]] {
+ var current: DoubleLinkedList[A] = _
+ def +=(elem: A): this.type = {
+ val tmp = new DoubleLinkedList(elem, null)
+ if (current != null)
+ current.insert(tmp)
+ else
+ current = tmp
+ this
+ }
+ def clear() { current = null }
+ def result() = current
+ }
}
-
-
-
-*/
diff --git a/src/library/scala/collection/mutable/SynchronizedBuffer.scala b/src/library/scala/collection/mutable/SynchronizedBuffer.scala
index 58c8d749bb..4120f09acd 100644
--- a/src/library/scala/collection/mutable/SynchronizedBuffer.scala
+++ b/src/library/scala/collection/mutable/SynchronizedBuffer.scala
@@ -11,6 +11,7 @@
package scala.collection.mutable
+import scala.collection.script._
/** This class should be used as a mixin. It synchronizes the <code>Buffer</code>
* methods of the class into which it is mixed in.
@@ -169,11 +170,11 @@ trait SynchronizedBuffer[A] extends Buffer[A] {
abstract override def clear(): Unit = synchronized {
super.clear
}
-/* TODO: Reintegrate
- override def <<(cmd: Message[(Location, A)]): Unit = synchronized {
+
+ override def <<(cmd: Message[A]): Unit = synchronized {
super.<<(cmd)
}
-*/
+
/** Return a clone of this buffer.
*
* @return an <code>ArrayBuffer</code> with the same elements.