package scala.collection.parallel
import scala.collection.mutable.ArrayBuffer
import scala.collection.mutable.ArraySeq
import scala.collection.generic.Sizing
package object mutable {
type ParArrayCombiner[T] = ResizableParArrayCombiner[T]
val ParArrayCombiner = ResizableParArrayCombiner
private[mutable] trait SizeMapUtils {
protected def calcNumElems(from: Int, until: Int, tableLength: Int, sizeMapBucketSize: Int) = {
val fbindex = from / sizeMapBucketSize
val lbindex = until / sizeMapBucketSize
if (fbindex == lbindex) {
countElems(from, until)
} else {
val fbuntil = ((fbindex + 1) * sizeMapBucketSize) min tableLength
val fbcount = countElems(from, fbuntil)
val lbstart = lbindex * sizeMapBucketSize
val lbcount = countElems(lbstart, until)
val inbetween = countBucketSizes(fbindex + 1, lbindex)
fbcount + inbetween + lbcount
}
}
protected def countElems(from: Int, until: Int): Int
protected def countBucketSizes(fromBucket: Int, untilBucket: Int): Int
}
private[mutable] class ExposedArrayBuffer[T] extends ArrayBuffer[T] with Sizing {
def internalArray = array
def setInternalSize(s: Int) = size0 = s
override def sizeHint(len: Int) = {
if (len > size && len >= 1) {
val newarray = new Array[AnyRef](len)
Array.copy(array, 0, newarray, 0, size0)
array = newarray
}
}
}
private[mutable] class ExposedArraySeq[T](arr: Array[AnyRef], sz: Int) extends ArraySeq[T](sz) {
override val array = arr
override val length = sz
override def stringPrefix = "ArraySeq"
}
}