sigma.data.Lazy.scala Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of sigma-state_2.12 Show documentation
Show all versions of sigma-state_2.12 Show documentation
Interpreter of a Sigma-State language
The newest version!
package sigma.data
/** Non-thread safe (but efficient on single thread) immutable lazy value.
* The `block` is executed only once. */
class Lazy[A] private (block: => A) {
@volatile private[this] var _isSet: Boolean = false
private[this] var _value: A = _
def value: A = {
if (!_isSet) {
_value = block
_isSet = true
}
_value
}
@inline def isSet = _isSet
override def toString = {
if (!_isSet)
""
else
value.toString
}
}
object Lazy {
def apply[A](block: => A): Lazy[A] = new Lazy(block)
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy