summaryrefslogtreecommitdiff
path: root/src/library/scala/collection/parallel/mutable/ResizableParArrayCombiner.scala
diff options
context:
space:
mode:
authorAleksandar Prokopec <axel22@gmail.com>2012-02-23 16:34:34 +0100
committerAleksandar Prokopec <axel22@gmail.com>2012-02-23 16:34:34 +0100
commit1852a7ddf7f8c5fb4a85e64b73123d333e698932 (patch)
treef9b5f405c56544b37f51c9f99b8dab1882fe2d58 /src/library/scala/collection/parallel/mutable/ResizableParArrayCombiner.scala
parent4a984f82d5bfca05123c53bd385d0299818f8a75 (diff)
downloadscala-1852a7ddf7f8c5fb4a85e64b73123d333e698932.tar.gz
scala-1852a7ddf7f8c5fb4a85e64b73123d333e698932.tar.bz2
scala-1852a7ddf7f8c5fb4a85e64b73123d333e698932.zip
Add tasksupport as a configurable field in parallel collections.
This required a bit of refactoring in the tasks objects and implementations of various operations. Combiners now hold a reference to a tasksupport object and pass it on to their result if `resultWithTaskSupport` is called. Additionally, several bugs that have to do with CanBuildFrom and combiner resolution have been fixed.
Diffstat (limited to 'src/library/scala/collection/parallel/mutable/ResizableParArrayCombiner.scala')
-rw-r--r--src/library/scala/collection/parallel/mutable/ResizableParArrayCombiner.scala12
1 files changed, 7 insertions, 5 deletions
diff --git a/src/library/scala/collection/parallel/mutable/ResizableParArrayCombiner.scala b/src/library/scala/collection/parallel/mutable/ResizableParArrayCombiner.scala
index eadc93d422..01eb17024e 100644
--- a/src/library/scala/collection/parallel/mutable/ResizableParArrayCombiner.scala
+++ b/src/library/scala/collection/parallel/mutable/ResizableParArrayCombiner.scala
@@ -8,18 +8,20 @@
package scala.collection.parallel.mutable
+
+
import scala.collection.generic.Sizing
import scala.collection.mutable.ArraySeq
import scala.collection.mutable.ArrayBuffer
import scala.collection.parallel.TaskSupport
-//import scala.collection.parallel.EnvironmentPassingCombiner
import scala.collection.parallel.unsupportedop
import scala.collection.parallel.Combiner
+import scala.collection.parallel.Task
+
+
/** An array combiner that uses a chain of arraybuffers to store elements. */
trait ResizableParArrayCombiner[T] extends LazyCombiner[T, ParArray[T], ExposedArrayBuffer[T]] {
-//self: EnvironmentPassingCombiner[T, ParArray[T]] =>
- import collection.parallel.tasksupport._
override def sizeHint(sz: Int) = if (chain.length == 1) chain(0).sizeHint(sz)
@@ -30,7 +32,7 @@ trait ResizableParArrayCombiner[T] extends LazyCombiner[T, ParArray[T], ExposedA
val arrayseq = new ArraySeq[T](size)
val array = arrayseq.array.asInstanceOf[Array[Any]]
- executeAndWaitResult(new CopyChainToArray(array, 0, size))
+ combinerTaskSupport.executeAndWaitResult(new CopyChainToArray(array, 0, size))
new ParArray(arrayseq)
} else { // optimisation if there is only 1 array
@@ -79,7 +81,7 @@ trait ResizableParArrayCombiner[T] extends LazyCombiner[T, ParArray[T], ExposedA
val fp = howmany / 2
List(new CopyChainToArray(array, offset, fp), new CopyChainToArray(array, offset + fp, howmany - fp))
}
- def shouldSplitFurther = howmany > collection.parallel.thresholdFromSize(size, parallelismLevel)
+ def shouldSplitFurther = howmany > collection.parallel.thresholdFromSize(size, combinerTaskSupport.parallelismLevel)
}
}