diff options
Diffstat (limited to 'src/library/scala/collection/mutable')
5 files changed, 43 insertions, 7 deletions
diff --git a/src/library/scala/collection/mutable/ArrayBuffer.scala b/src/library/scala/collection/mutable/ArrayBuffer.scala index 2fe5f23a46..83109d0255 100644 --- a/src/library/scala/collection/mutable/ArrayBuffer.scala +++ b/src/library/scala/collection/mutable/ArrayBuffer.scala @@ -175,6 +175,11 @@ class ArrayBuffer[A](override protected val initialSize: Int) /** Defines the prefix of the string representation. */ override def stringPrefix: String = "ArrayBuffer" + + override def toParIterable = par + + override def toParSeq = par + } /** Factory object for the `ArrayBuffer` class. diff --git a/src/library/scala/collection/mutable/ArraySeq.scala b/src/library/scala/collection/mutable/ArraySeq.scala index 3fc45eaa5f..91bc864224 100644 --- a/src/library/scala/collection/mutable/ArraySeq.scala +++ b/src/library/scala/collection/mutable/ArraySeq.scala @@ -12,6 +12,7 @@ package scala.collection package mutable import generic._ +import parallel.mutable.ParArray /** A class for polymorphic arrays of elements that's represented * internally by an array of objects. This means that elements of @@ -42,12 +43,16 @@ import generic._ class ArraySeq[A](override val length: Int) extends IndexedSeq[A] with GenericTraversableTemplate[A, ArraySeq] - with IndexedSeqOptimized[A, ArraySeq[A]] { + with IndexedSeqOptimized[A, ArraySeq[A]] + with Parallelizable[ParArray[A]] +{ override def companion: GenericCompanion[ArraySeq] = ArraySeq val array: Array[AnyRef] = new Array[AnyRef](length) + def par = ParArray.handoff(array.asInstanceOf[Array[A]]) + def apply(idx: Int): A = { if (idx >= length) throw new IndexOutOfBoundsException(idx.toString) array(idx).asInstanceOf[A] @@ -75,10 +80,15 @@ extends IndexedSeq[A] * @param start starting index. * @param len number of elements to copy */ - override def copyToArray[B >: A](xs: Array[B], start: Int, len: Int) { - val len1 = len min (xs.length - start) min length - Array.copy(array, 0, xs, start, len1) - } + override def copyToArray[B >: A](xs: Array[B], start: Int, len: Int) { + val len1 = len min (xs.length - start) min length + Array.copy(array, 0, xs, start, len1) + } + + override def toParIterable = par + + override def toParSeq = par + } /** $factoryInfo diff --git a/src/library/scala/collection/mutable/HashMap.scala b/src/library/scala/collection/mutable/HashMap.scala index 44461eaf74..3960af763b 100644 --- a/src/library/scala/collection/mutable/HashMap.scala +++ b/src/library/scala/collection/mutable/HashMap.scala @@ -56,7 +56,7 @@ extends Map[A, B] def this() = this(null) - def par = new ParHashMap[A, B](contents) + def par = new ParHashMap[A, B](hashTableContents) def get(key: A): Option[B] = { val e = findEntry(key) @@ -129,6 +129,11 @@ extends Map[A, B] init[B](in, new Entry(_, _)) } + override def toParIterable = par + + private type C = (A, B) + override def toParMap[D, E](implicit ev: C <:< (D, E)) = par.asInstanceOf[ParHashMap[D, E]] + } /** $factoryInfo diff --git a/src/library/scala/collection/mutable/HashSet.scala b/src/library/scala/collection/mutable/HashSet.scala index a7b1fb477c..377f58e74e 100644 --- a/src/library/scala/collection/mutable/HashSet.scala +++ b/src/library/scala/collection/mutable/HashSet.scala @@ -92,6 +92,10 @@ extends Set[A] if (!isSizeMapDefined) sizeMapInitAndRebuild } else sizeMapDisable + override def toParIterable = par + + override def toParSet[B >: A] = par.asInstanceOf[ParHashSet[B]] + } /** $factoryInfo diff --git a/src/library/scala/collection/mutable/WrappedArray.scala b/src/library/scala/collection/mutable/WrappedArray.scala index 6aea49ec9d..4246a59bf8 100644 --- a/src/library/scala/collection/mutable/WrappedArray.scala +++ b/src/library/scala/collection/mutable/WrappedArray.scala @@ -13,6 +13,7 @@ package mutable import scala.reflect.ClassManifest import scala.collection.generic._ +import scala.collection.parallel.mutable.ParArray /** * A class representing `Array[T]`. @@ -29,7 +30,11 @@ import scala.collection.generic._ * @define mayNotTerminateInf * @define willNotTerminateInf */ -abstract class WrappedArray[T] extends IndexedSeq[T] with ArrayLike[T, WrappedArray[T]] { +abstract class WrappedArray[T] +extends IndexedSeq[T] + with ArrayLike[T, WrappedArray[T]] + with Parallelizable[ParArray[T]] +{ override protected[this] def thisCollection: WrappedArray[T] = this override protected[this] def toCollection(repr: WrappedArray[T]): WrappedArray[T] = repr @@ -49,6 +54,8 @@ abstract class WrappedArray[T] extends IndexedSeq[T] with ArrayLike[T, WrappedAr /** The underlying array */ def array: Array[T] + def par = ParArray.handoff(array) + override def toArray[U >: T : ClassManifest]: Array[U] = if (implicitly[ClassManifest[U]].erasure eq array.getClass.getComponentType) array.asInstanceOf[Array[U]] @@ -64,6 +71,11 @@ abstract class WrappedArray[T] extends IndexedSeq[T] with ArrayLike[T, WrappedAr */ override protected[this] def newBuilder: Builder[T, WrappedArray[T]] = new WrappedArrayBuilder[T](elemManifest) + + override def toParIterable = par + + override def toParSeq = par + } /** A companion object used to create instances of `WrappedArray`. |