package xsbti
object SafeLazy
{
def apply[T <: AnyRef](eval: xsbti.F0[T]): xsbti.api.Lazy[T] =
apply( eval() )
def apply[T <: AnyRef](eval: => T): xsbti.api.Lazy[T] =
fromFunction0( eval _ )
def fromFunction0[T <: AnyRef](eval: () => T): xsbti.api.Lazy[T] =
new Impl( eval )
def strict[T <: AnyRef](value: T): xsbti.api.Lazy[T] = apply(value)
private[this] final class Impl[T <: AnyRef](private[this] var eval: () => T) extends xsbti.api.AbstractLazy[T]
{
private[this] lazy val _t =
{
val t = eval()
eval = null
t
}
def get: T = _t
}
}