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

laika.collection.TransitionalCollectionOps.scala Maven / Gradle / Ivy

/*
 * Copyright 2013-2018 the original author or authors.
 *
 * 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 laika.collection

/** Temporary extension methods for cross-building to Scala 2.12 and 2.13.
  *
  * @author Jens Halm
  */
object TransitionalCollectionOps {

  implicit class TransitionalMapOps[K,V] (val map: Map[K,V]) extends AnyVal {

    /** Temporary replacement for the `mapValues` method of the Scala SDK
      * which is deprecated in Scala 2.13 as it had returned a lazy Map
      * instance in contrast to most other methods in strict Maps.
      *
      * This is a temporary, strict implementation of `mapValues` until
      * the SDK offers such a method.
      */
    def mapValuesStrict[W](f: V ⇒ W): Map[K, W] = {
      map.map {
        case (k,v) => (k,f(v))
      }
    }

  }

  /** Temporary replacement for the deprecated Tuple3.zipped method,
    * to be replaced by xs.lazyZip(ys).lazyZip(zs) once support for 2.12 is dropped.
    */
  case class Zip3Iterator[A,B,C](as: Iterable[A], bs: Iterable[B], cs: Iterable[C]) extends Iterator[(A,B,C)] {
    private val aIter = as.iterator
    private val bIter = bs.iterator
    private val cIter = cs.iterator
    def hasNext = aIter.hasNext && bIter.hasNext && cIter.hasNext
    def next() = (aIter.next(), bIter.next(), cIter.next())
  }

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy