com.spotify.featran.CanBuild.scala Maven / Gradle / Ivy
The newest version!
/*
* Copyright 2017 Spotify AB.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package com.spotify.featran
import scala.collection.mutable
import scala.reflect.ClassTag
// Workaround for CanBuildFrom not serializable
trait CanBuild[T, M[_]] extends Serializable {
def apply(): mutable.Builder[T, M[T]]
}
object CanBuild {
// Collection types in _root_.scala.*
implicit def iterableCB[T]: CanBuild[T, Iterable] = new CanBuild[T, Iterable] {
override def apply(): mutable.Builder[T, Iterable[T]] = Iterable.newBuilder
}
implicit def seqCB[T]: CanBuild[T, Seq] = new CanBuild[T, Seq] {
override def apply(): mutable.Builder[T, Seq[T]] = Seq.newBuilder
}
implicit def indexedSeqCB[T]: CanBuild[T, IndexedSeq] = new CanBuild[T, IndexedSeq] {
override def apply(): mutable.Builder[T, IndexedSeq[T]] = IndexedSeq.newBuilder
}
implicit def listCB[T]: CanBuild[T, List] = new CanBuild[T, List] {
override def apply(): mutable.Builder[T, List[T]] = List.newBuilder
}
implicit def vectorCB[T]: CanBuild[T, Vector] = new CanBuild[T, Vector] {
override def apply(): mutable.Builder[T, Vector[T]] = Vector.newBuilder
}
implicit def bufferCB[T]: CanBuild[T, mutable.Buffer] = new CanBuild[T, mutable.Buffer] {
override def apply(): mutable.Builder[T, mutable.Buffer[T]] = mutable.Buffer.newBuilder
}
implicit def floatArrayCB: CanBuild[Float, Array] = new CanBuild[Float, Array] {
override def apply(): mutable.Builder[Float, Array[Float]] = Array.newBuilder[Float]
}
implicit def doubleArrayCB: CanBuild[Double, Array] = new CanBuild[Double, Array] {
override def apply(): mutable.Builder[Double, Array[Double]] = Array.newBuilder[Double]
}
implicit def arrayCB[T: ClassTag]: CanBuild[T, Array] = new CanBuild[T, Array] {
override def apply(): mutable.Builder[T, Array[T]] = Array.newBuilder[T]
}
}
© 2015 - 2024 Weber Informatics LLC | Privacy Policy