Skip to content

Instantly share code, notes, and snippets.

@MishaelRosenthal
Created September 21, 2015 11:24
Show Gist options
  • Select an option

  • Save MishaelRosenthal/20e5081388cb7eec04f5 to your computer and use it in GitHub Desktop.

Select an option

Save MishaelRosenthal/20e5081388cb7eec04f5 to your computer and use it in GitHub Desktop.
package core.common.datastructures
import scala.collection.generic.{GenericCompanion, CanBuildFrom}
import scala.collection.{SeqLike, mutable}
import scala.collection.mutable.ListBuffer
final class LimitedParSeq[T] private (internal: Seq[T], parLimit: Int) extends Seq[T] with SeqLike[T,LimitedParSeq[T]] {
override def length: Int = internal.length
override def apply(idx: Int): T = internal.apply(idx)
override def iterator: Iterator[T] = internal.iterator
override def foreach[U](f: T => U): Unit = internal.grouped(parLimit).foreach(_.par.foreach(f))
override protected[this] def newBuilder: mutable.Builder[T, LimitedParSeq[T]] = LimitedParSeq.newBuilder[T]
override def companion: GenericCompanion[LimitedParSeq] = LimitedParSeq
}
object LimitedParSeq extends GenericCompanion[LimitedParSeq]{
def fromSeq[T](seq: Seq[T], parLimit: Int = 3) = new LimitedParSeq(seq, parLimit)
override def apply[T](elems: T*) = fromSeq[T](elems)
def newBuilder[T]: mutable.Builder[T, LimitedParSeq[T]] =
new ListBuffer mapResult(fromSeq(_))
implicit def canBuildFrom[T]: CanBuildFrom[Coll, T, LimitedParSeq[T]] =
new CanBuildFrom[Coll, T, LimitedParSeq[T]] {
def apply() = newBuilder[T]
def apply(from: Coll) = newBuilder[T]
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment