diff options
author | Aleksandar Pokopec <aleksandar.prokopec@epfl.ch> | 2011-03-22 18:22:25 +0000 |
---|---|---|
committer | Aleksandar Pokopec <aleksandar.prokopec@epfl.ch> | 2011-03-22 18:22:25 +0000 |
commit | e579152f7329a314607d33c7e3761b769b93518d (patch) | |
tree | e1ff4d301bdf7bc11b30f047645698f6aa82f800 /src/library/scala/collection/parallel/immutable | |
parent | 60d9a5127cf190c90e2e3ce4f79455469dac54eb (diff) | |
download | scala-e579152f7329a314607d33c7e3761b769b93518d.tar.gz scala-e579152f7329a314607d33c7e3761b769b93518d.tar.bz2 scala-e579152f7329a314607d33c7e3761b769b93518d.zip |
Implementing foreach to work in parallel in Par...
Implementing foreach to work in parallel in ParIterableLike.
Doing a bunch of refactoring around in the collection framework to
ensure a parallel foreach is never called with a side-effecting method.
This still leaves other parts of the standard library and the compiler
unguarded.
No review.
Diffstat (limited to 'src/library/scala/collection/parallel/immutable')
6 files changed, 9 insertions, 6 deletions
diff --git a/src/library/scala/collection/parallel/immutable/ParHashMap.scala b/src/library/scala/collection/parallel/immutable/ParHashMap.scala index 66b981e8c4..84705c33e7 100644 --- a/src/library/scala/collection/parallel/immutable/ParHashMap.scala +++ b/src/library/scala/collection/parallel/immutable/ParHashMap.scala @@ -66,7 +66,7 @@ self => def parallelIterator: ParIterableIterator[(K, V)] = new ParHashMapIterator(trie.iterator, trie.size) with SCPI - def seq = trie + override def seq = trie def -(k: K) = new ParHashMap(trie - k) diff --git a/src/library/scala/collection/parallel/immutable/ParHashSet.scala b/src/library/scala/collection/parallel/immutable/ParHashSet.scala index bd9cefa298..29c6eb0f93 100644 --- a/src/library/scala/collection/parallel/immutable/ParHashSet.scala +++ b/src/library/scala/collection/parallel/immutable/ParHashSet.scala @@ -64,7 +64,7 @@ self => def parallelIterator: ParIterableIterator[T] = new ParHashSetIterator(trie.iterator, trie.size) with SCPI - def seq = trie + override def seq = trie def -(e: T) = new ParHashSet(trie - e) diff --git a/src/library/scala/collection/parallel/immutable/ParRange.scala b/src/library/scala/collection/parallel/immutable/ParRange.scala index f68c7c9062..157f6746fa 100644 --- a/src/library/scala/collection/parallel/immutable/ParRange.scala +++ b/src/library/scala/collection/parallel/immutable/ParRange.scala @@ -39,7 +39,7 @@ extends ParSeq[Int] { self => - def seq = range + override def seq = range @inline final def length = range.length diff --git a/src/library/scala/collection/parallel/immutable/ParSeq.scala b/src/library/scala/collection/parallel/immutable/ParSeq.scala index dbb37a9c69..a922642022 100644 --- a/src/library/scala/collection/parallel/immutable/ParSeq.scala +++ b/src/library/scala/collection/parallel/immutable/ParSeq.scala @@ -32,7 +32,7 @@ extends collection.immutable.Seq[T] with collection.parallel.ParSeq[T] with ParIterable[T] with GenericParTemplate[T, ParSeq] - with ParSeqLike[T, ParSeq[T], Seq[T]] + with ParSeqLike[T, ParSeq[T], collection.immutable.Seq[T]] { override def companion: GenericCompanion[ParSeq] with GenericParCompanion[ParSeq] = ParSeq override def toSeq: ParSeq[T] = this diff --git a/src/library/scala/collection/parallel/immutable/ParVector.scala b/src/library/scala/collection/parallel/immutable/ParVector.scala index f79ba2a7f9..05e057a2a4 100644 --- a/src/library/scala/collection/parallel/immutable/ParVector.scala +++ b/src/library/scala/collection/parallel/immutable/ParVector.scala @@ -52,13 +52,16 @@ extends ParSeq[T] type SCPI = SignalContextPassingIterator[ParVectorIterator] def apply(idx: Int) = vector.apply(idx) + def length = vector.length + def parallelIterator: ParSeqIterator[T] = { val pit = new ParVectorIterator(vector.startIndex, vector.endIndex) with SCPI vector.initIterator(pit) pit } - def seq: Vector[T] = vector + + override def seq: Vector[T] = vector class ParVectorIterator(_start: Int, _end: Int) extends VectorIterator[T](_start, _end) with ParIterator { self: SCPI => diff --git a/src/library/scala/collection/parallel/immutable/package.scala b/src/library/scala/collection/parallel/immutable/package.scala index 8bb0b2216d..87d5bfc9f9 100644 --- a/src/library/scala/collection/parallel/immutable/package.scala +++ b/src/library/scala/collection/parallel/immutable/package.scala @@ -37,7 +37,7 @@ package object immutable { private[parallel] class Repetition[T](elem: T, val length: Int) extends ParSeq[T] { self => def apply(idx: Int) = if (0 <= idx && idx < length) elem else throw new IndexOutOfBoundsException - def seq = throw new UnsupportedOperationException + override def seq = throw new UnsupportedOperationException def update(idx: Int, elem: T) = throw new UnsupportedOperationException type SCPI = SignalContextPassingIterator[ParIterator] |