All Downloads are FREE. Search and download functionalities are using the official Maven repository.

pimpathon.builder.scala Maven / Gradle / Ivy

The newest version!
package pimpathon

import scala.collection.{mutable ⇒ M}

import pimpathon.any._


object builder {
  implicit def builderPimps[A, B](builder: M.Builder[A, B]): BuilderPimps[A, B] = new BuilderPimps[A, B](builder)

  class BuilderPimps[A, B](builder: M.Builder[A, B]) {
    def +++=(xss: TraversableOnce[TraversableOnce[A]]): M.Builder[A, B] = builder.tap(b ⇒ xss.foreach(b ++= _))
    def on[C](f: C ⇒ A): M.Builder[C, B] = new ContramappedBuilder(builder, f)
    def run[Discarded](actions: (M.Builder[A, B] ⇒ Discarded)*): B = builder.tap(actions: _*).reset()
    def reset(): B = builder.result().tap(_ ⇒ builder.clear())
  }

  private class ContramappedBuilder[A, B, C](builder: M.Builder[A, B], f: C ⇒ A) extends M.Builder[C, B] {
    def +=(elem: C): this.type = { builder += f(elem); this }
    def result(): B = builder.result()
    def clear(): Unit = builder.clear()
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy