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

scalaj.collection.j2s.Implicits.scala Maven / Gradle / Ivy

The newest version!
package scalaj
package collection
package j2s

import java.{lang => jl, util => ju}
import scala.{collection => sc}
import scala.collection.{immutable => sci, mutable => scm}

object Implicits extends Implicits

trait Implicits {
  implicit def RichJComparable[A](underlying: jl.Comparable[A]): RichComparable[A] = new RichComparable(underlying)
  implicit def RichJComparator[A](underlying: ju.Comparator[A]): RichComparator[A] = new RichComparator(underlying)
  implicit def RichJEnumeration[A](underlying: ju.Enumeration[A]): RichEnumeration[A] = new RichEnumeration(underlying)
  implicit def RichJIterator[A](underlying: ju.Iterator[A]): RichIterator[A] = new RichIterator(underlying)
  implicit def RichJIterable[A](underlying: jl.Iterable[A]): RichIterable[A] = new RichIterable(underlying)
  implicit def RichJList[A](underlying: ju.List[A]): RichList[A] = new RichList(underlying)
  implicit def RichJSet[A](underlying: ju.Set[A]): RichSet[A] = new RichSet(underlying)
  implicit def RichJMap[A, B](underlying: ju.Map[A, B]): RichMap[A, B] = new RichMap(underlying)
  implicit def RichJDictionary[A, B](underlying: ju.Dictionary[A, B]): RichDictionary[A, B] = new RichDictionary(underlying)
}

sealed trait Coercible[-A, +B] {
  def apply(x: A): B
}

object Coercible extends LowPriorityCoercible {
  private[collection] def coerce[M[_], A, B](m: M[A])(implicit c: Coercible[A, B]): M[B] = m.asInstanceOf[M[B]]
  private[collection] def coerce2[M[_, _], A, B, C, D](m: M[A, B])(implicit c1: Coercible[A, C], c2: Coercible[B, D]): M[C, D] = m.asInstanceOf[M[C, D]]

  implicit object CoercibleBoolean extends PrimitiveCoercible[jl.Boolean, Boolean]
  implicit object CoercibleChar extends PrimitiveCoercible[jl.Character, Char]
  implicit object CoercibleByte extends PrimitiveCoercible[jl.Byte, Byte]
  implicit object CoercibleShort extends PrimitiveCoercible[jl.Short, Short]
  implicit object CoercibleInt extends PrimitiveCoercible[jl.Integer, Int]
  implicit object CoercibleLong extends PrimitiveCoercible[jl.Long, Long]
  implicit object CoercibleFloat extends PrimitiveCoercible[jl.Float, Float]
  implicit object CoercibleDouble extends PrimitiveCoercible[jl.Double, Double]

  private[Coercible] class PrimitiveCoercible[A, B] extends Coercible[A, B] {
    override def apply(x: A): B = x.asInstanceOf[B]
  }
}

trait LowPriorityCoercible {
  implicit def CoercibleSelf[A]: Coercible[A, A] = CoercibleSelfObject.asInstanceOf[Coercible[A, A]]

  private object CoercibleSelfObject extends Coercible[Any, Any] {
    override def apply(x: Any): Any = x
  }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy