diff options
author | Philipp Haller <hallerp@gmail.com> | 2009-09-08 10:37:01 +0000 |
---|---|---|
committer | Philipp Haller <hallerp@gmail.com> | 2009-09-08 10:37:01 +0000 |
commit | 6b01bf9c30fb8f52415166739508286a08f9e3db (patch) | |
tree | 032facdaedaa469d631b56620464236255fb4ef3 | |
parent | ba6cdaf1f3b7b0b4dc8b90bd5a6bf0b68dbabaec (diff) | |
download | scala-6b01bf9c30fb8f52415166739508286a08f9e3db.tar.gz scala-6b01bf9c30fb8f52415166739508286a08f9e3db.tar.bz2 scala-6b01bf9c30fb8f52415166739508286a08f9e3db.zip |
Reintegrated DoubleLinkedList, SynchronizedBuff...
Reintegrated DoubleLinkedList, SynchronizedBuffer, ArrayStack,
BufferProxy.
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. |