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

japgolly.microlibs.utils.Ref.scala Maven / Gradle / Ivy

The newest version!
package japgolly.microlibs.utils

import japgolly.univeq.UnivEq
import scala.annotation.nowarn

/**
 * Wraps a value such that reference equality holds.
 *
 * Allows values to be used as map-keys, in sets, etc with uniqueness being by reference.
 */
final class Ref[A <: AnyRef](val value: A) {
  override def hashCode = value.##

  @nowarn
  override def equals(other: Any) =
    other match {
      case r: Ref[A] => value eq r.value
      case _         => false
    }
}

object Ref {
  def apply[A <: AnyRef](a: A): Ref[A] =
    new Ref(a)

  implicit def refEquality[A <: AnyRef]: UnivEq[Ref[A]] =
    UnivEq.force
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy