Scala Library: scala.collection.parallel.immutable.ParVector
scala.collection.parallel.immutable.ParVector
object ParVector extends ParFactory[ParVector] with SerializableThis object provides a set of operations to create immutable.ParVector values.
Type Members
type Coll = ParVector[_]
The underlying collection type with unknown element type
- Attributes
- protected[this]
- Definition Classes
- GenericCompanion
class GenericCanBuildFrom[A] extends CanBuildFrom[CC[_], A, CC[A]]
A generic implementation of the CanBuildFrom trait, which forwards all calls
to apply(from) to the genericBuilder method of collection from , and which
forwards all calls of apply() to the newBuilder method of this factory.
- Definition Classes
- GenTraversableFactory
class GenericCanCombineFrom[A] extends GenericCanBuildFrom[A] with CanCombineFrom[CC[_], A, CC[A]]
A generic implementation of the CanCombineFrom trait, which forwards all calls
to apply(from) to the genericParBuilder method of the parallel collection
from , and calls to apply() to this factory.
- Definition Classes
- ParFactory
Value Members From scala.collection.generic.GenTraversableFactory
def ReusableCBF: GenericCanBuildFrom[Nothing]
- Definition Classes
- GenTraversableFactory
(defined at scala.collection.generic.GenTraversableFactory)
def concat[A](xss: Traversable[A]*): ParVector[A]
Concatenates all argument collections into a single collection.
- xss
- the collections that are to be concatenated.
- returns
- the concatenation of all the collections.
- Definition Classes
- GenTraversableFactory
(defined at scala.collection.generic.GenTraversableFactory)
def fill[A](n: Int)(elem: ⇒ A): ParVector[A]
Produces a collection containing the results of some element computation a number of times.
- n
- the number of elements contained in the collection.
- elem
- the element computation
- returns
- A collection that contains the results of
nevaluations ofelem.
- A collection that contains the results of
- Definition Classes
- GenTraversableFactory
(defined at scala.collection.generic.GenTraversableFactory)
def fill[A](n1: Int, n2: Int)(elem: ⇒ A): ParVector[ParVector[A]]
Produces a two-dimensional collection containing the results of some element computation a number of times.
- n1
- the number of elements in the 1st dimension
- n2
- the number of elements in the 2nd dimension
- elem
- the element computation
- returns
- A collection that contains the results of
n1 x n2evaluations ofelem.
- A collection that contains the results of
- Definition Classes
- GenTraversableFactory
(defined at scala.collection.generic.GenTraversableFactory)
def fill[A](n1: Int, n2: Int, n3: Int)(elem: ⇒ A): ParVector[ParVector[ParVector[A]]]
Produces a three-dimensional collection containing the results of some element computation a number of times.
- n1
- the number of elements in the 1st dimension
- n2
- the number of elements in the 2nd dimension
- n3
- the number of elements in the 3nd dimension
- elem
- the element computation
- returns
- A collection that contains the results of
n1 x n2 x n3evaluations ofelem.
- A collection that contains the results of
- Definition Classes
- GenTraversableFactory
(defined at scala.collection.generic.GenTraversableFactory)
def fill[A](n1: Int, n2: Int, n3: Int, n4: Int)(elem: ⇒ A): ParVector[ParVector[ParVector[ParVector[A]]]]
Produces a four-dimensional collection containing the results of some element computation a number of times.
- n1
- the number of elements in the 1st dimension
- n2
- the number of elements in the 2nd dimension
- n3
- the number of elements in the 3nd dimension
- n4
- the number of elements in the 4th dimension
- elem
- the element computation
- returns
- A collection that contains the results of
n1 x n2 x n3 x n4evaluations ofelem.
- A collection that contains the results of
- Definition Classes
- GenTraversableFactory
(defined at scala.collection.generic.GenTraversableFactory)
def fill[A](n1: Int, n2: Int, n3: Int, n4: Int, n5: Int)(elem: ⇒ A): ParVector[ParVector[ParVector[ParVector[ParVector[A]]]]]
Produces a five-dimensional collection containing the results of some element computation a number of times.
- n1
- the number of elements in the 1st dimension
- n2
- the number of elements in the 2nd dimension
- n3
- the number of elements in the 3nd dimension
- n4
- the number of elements in the 4th dimension
- n5
- the number of elements in the 5th dimension
- elem
- the element computation
- returns
- A collection that contains the results of
n1 x n2 x n3 x n4 x n5evaluations ofelem.
- A collection that contains the results of
- Definition Classes
- GenTraversableFactory
(defined at scala.collection.generic.GenTraversableFactory)
def iterate[A](start: A, len: Int)(f: (A) ⇒ A): ParVector[A]
Produces a collection containing repeated applications of a function to a start value.
- start
- the start value of the collection
- len
- the number of elements contained inthe collection
- f
- the function that’s repeatedly applied
- returns
- a collection with
lenvalues in the sequencestart, f(start), f(f(start)), ...
- a collection with
- Definition Classes
- GenTraversableFactory
(defined at scala.collection.generic.GenTraversableFactory)
def range[T](start: T, end: T)(implicit arg0: Integral[T]): ParVector[T]
Produces a collection containing a sequence of increasing of integers.
- start
- the first element of the collection
- end
- the end value of the collection (the first value NOT contained)
- returns
- a collection with values
start, start + 1, ..., end - 1
- a collection with values
- Definition Classes
- GenTraversableFactory
(defined at scala.collection.generic.GenTraversableFactory)
def range[T](start: T, end: T, step: T)(implicit arg0: Integral[T]): ParVector[T]
Produces a collection containing equally spaced values in some integer interval.
- start
- the start value of the collection
- end
- the end value of the collection (the first value NOT contained)
- step
- the difference between successive elements of the collection (must be positive or negative)
- returns
- a collection with values
start, start + step, ...up to, but excludingend
- a collection with values
- Definition Classes
- GenTraversableFactory
(defined at scala.collection.generic.GenTraversableFactory)
def tabulate[A](n: Int)(f: (Int) ⇒ A): ParVector[A]
Produces a collection containing values of a given function over a range of integer values starting from 0.
- n
- The number of elements in the collection
- f
- The function computing element values
- returns
- A collection consisting of elements
f(0), ..., f(n -1)
- A collection consisting of elements
- Definition Classes
- GenTraversableFactory
(defined at scala.collection.generic.GenTraversableFactory)
def tabulate[A](n1: Int, n2: Int)(f: (Int, Int) ⇒ A): ParVector[ParVector[A]]
Produces a two-dimensional collection containing values of a given function over ranges of integer values starting from 0.
- n1
- the number of elements in the 1st dimension
- n2
- the number of elements in the 2nd dimension
- f
- The function computing element values
- returns
- A collection consisting of elements
f(i1, i2)for0 <= i1 < n1and0 <= i2 < n2.
- A collection consisting of elements
- Definition Classes
- GenTraversableFactory
(defined at scala.collection.generic.GenTraversableFactory)
def tabulate[A](n1: Int, n2: Int, n3: Int)(f: (Int, Int, Int) ⇒ A): ParVector[ParVector[ParVector[A]]]
Produces a three-dimensional collection containing values of a given function over ranges of integer values starting from 0.
- n1
- the number of elements in the 1st dimension
- n2
- the number of elements in the 2nd dimension
- n3
- the number of elements in the 3nd dimension
- f
- The function computing element values
- returns
- A collection consisting of elements
f(i1, i2, i3)for0 <= i1 < n1,0 <= i2 < n2, and0 <= i3 < n3.
- A collection consisting of elements
- Definition Classes
- GenTraversableFactory
(defined at scala.collection.generic.GenTraversableFactory)
def tabulate[A](n1: Int, n2: Int, n3: Int, n4: Int)(f: (Int, Int, Int, Int) ⇒ A): ParVector[ParVector[ParVector[ParVector[A]]]]
Produces a four-dimensional collection containing values of a given function over ranges of integer values starting from 0.
- n1
- the number of elements in the 1st dimension
- n2
- the number of elements in the 2nd dimension
- n3
- the number of elements in the 3nd dimension
- n4
- the number of elements in the 4th dimension
- f
- The function computing element values
- returns
- A collection consisting of elements
f(i1, i2, i3, i4)for0 <= i1 < n1,0 <= i2 < n2,0 <= i3 < n3, and0 <= i4 < n4.
- A collection consisting of elements
- Definition Classes
- GenTraversableFactory
(defined at scala.collection.generic.GenTraversableFactory)
def tabulate[A](n1: Int, n2: Int, n3: Int, n4: Int, n5: Int)(f: (Int, Int, Int, Int, Int) ⇒ A): ParVector[ParVector[ParVector[ParVector[ParVector[A]]]]]
Produces a five-dimensional collection containing values of a given function over ranges of integer values starting from 0.
- n1
- the number of elements in the 1st dimension
- n2
- the number of elements in the 2nd dimension
- n3
- the number of elements in the 3nd dimension
- n4
- the number of elements in the 4th dimension
- n5
- the number of elements in the 5th dimension
- f
- The function computing element values
- returns
- A collection consisting of elements
f(i1, i2, i3, i4, i5)for0 <= i1 < n1,0 <= i2 < n2,0 <= i3 < n3,0 <= i4 < n4, and0 <= i5 < n5.
- A collection consisting of elements
- Definition Classes
- GenTraversableFactory
(defined at scala.collection.generic.GenTraversableFactory)
Value Members From scala.collection.generic.GenericCompanion
def apply[A](elems: A*): ParVector[A]
Creates a collection with the specified elements.
- A
- the type of the collection’s elements
- elems
- the elements of the created collection
- returns
- a new collection with elements
elems
- a new collection with elements
- Definition Classes
- GenericCompanion
(defined at scala.collection.generic.GenericCompanion)
def empty[A]: ParVector[A]
An empty collection of type CC[A]
- A
- the type of the collection’s elements
- Definition Classes
- GenericCompanion
(defined at scala.collection.generic.GenericCompanion)
Value Members From scala.collection.parallel.immutable.ParVector
implicit def canBuildFrom[T]: CanCombineFrom[Coll, T, ParVector[T]]
(defined at scala.collection.parallel.immutable.ParVector)
def newBuilder[T]: Combiner[T, ParVector[T]]
The default builder for immutable.ParVector objects.
- Definition Classes
- ParVector → GenericParCompanion → GenericCompanion
(defined at scala.collection.parallel.immutable.ParVector)
def newCombiner[T]: Combiner[T, ParVector[T]]
The parallel builder for immutable.ParVector objects.
- Definition Classes
- ParVector → GenericParCompanion (defined at scala.collection.parallel.immutable.ParVector)
Full Source:
/* __ *\
** ________ ___ / / ___ Scala API **
** / __/ __// _ | / / / _ | (c) 2003-2013, LAMP/EPFL **
** __\ \/ /__/ __ |/ /__/ __ | http://scala-lang.org/ **
** /____/\___/_/ |_/____/_/ | | **
** |/ **
\* */
package scala
package collection
package parallel.immutable
import scala.collection.generic.{GenericParTemplate, CanCombineFrom, ParFactory}
import scala.collection.parallel.ParSeqLike
import scala.collection.parallel.Combiner
import scala.collection.parallel.SeqSplitter
import mutable.ArrayBuffer
import immutable.Vector
import immutable.VectorBuilder
import immutable.VectorIterator
/** Immutable parallel vectors, based on vectors.
*
* $paralleliterableinfo
*
* $sideeffects
*
* @tparam T the element type of the vector
*
* @author Aleksandar Prokopec
* @since 2.9
* @see [[http://docs.scala-lang.org/overviews/parallel-collections/concrete-parallel-collections.html#parallel_vector Scala's Parallel Collections Library overview]]
* section on `ParVector` for more information.
*
* @define Coll `immutable.ParVector`
* @define coll immutable parallel vector
*/
class ParVector[+T](private[this] val vector: Vector[T])
extends ParSeq[T]
with GenericParTemplate[T, ParVector]
with ParSeqLike[T, ParVector[T], Vector[T]]
with Serializable
{
override def companion = ParVector
def this() = this(Vector())
def apply(idx: Int) = vector.apply(idx)
def length = vector.length
def splitter: SeqSplitter[T] = {
val pit = new ParVectorIterator(vector.startIndex, vector.endIndex)
vector.initIterator(pit)
pit
}
override def seq: Vector[T] = vector
override def toVector: Vector[T] = vector
class ParVectorIterator(_start: Int, _end: Int) extends VectorIterator[T](_start, _end) with SeqSplitter[T] {
def remaining: Int = remainingElementCount
def dup: SeqSplitter[T] = (new ParVector(remainingVector)).splitter
def split: Seq[ParVectorIterator] = {
val rem = remaining
if (rem >= 2) psplit(rem / 2, rem - rem / 2)
else Seq(this)
}
def psplit(sizes: Int*): Seq[ParVectorIterator] = {
var remvector = remainingVector
val splitted = new ArrayBuffer[Vector[T]]
for (sz <- sizes) {
splitted += remvector.take(sz)
remvector = remvector.drop(sz)
}
splitted.map(v => new ParVector(v).splitter.asInstanceOf[ParVectorIterator])
}
}
}
/** $factoryInfo
* @define Coll `immutable.ParVector`
* @define coll immutable parallel vector
*/
object ParVector extends ParFactory[ParVector] {
implicit def canBuildFrom[T]: CanCombineFrom[Coll, T, ParVector[T]] =
new GenericCanCombineFrom[T]
def newBuilder[T]: Combiner[T, ParVector[T]] = newCombiner[T]
def newCombiner[T]: Combiner[T, ParVector[T]] = new LazyParVectorCombiner[T] // was: with EPC[T, ParVector[T]]
}
private[immutable] class LazyParVectorCombiner[T] extends Combiner[T, ParVector[T]] {
//self: EnvironmentPassingCombiner[T, ParVector[T]] =>
var sz = 0
val vectors = new ArrayBuffer[VectorBuilder[T]] += new VectorBuilder[T]
def size: Int = sz
def +=(elem: T): this.type = {
vectors.last += elem
sz += 1
this
}
def clear() = {
vectors.clear()
vectors += new VectorBuilder[T]
sz = 0
}
def result: ParVector[T] = {
val rvb = new VectorBuilder[T]
for (vb <- vectors) {
rvb ++= vb.result
}
new ParVector(rvb.result)
}
def combine[U <: T, NewTo >: ParVector[T]](other: Combiner[U, NewTo]) = if (other eq this) this else {
val that = other.asInstanceOf[LazyParVectorCombiner[T]]
sz += that.sz
vectors ++= that.vectors
this
}
}Interested in Scala?
I send out weekly, personalized emails with articles and conference talks.
Subscribe now.