
org.opalj.fpcf.seq.QualifiedTask.scala Maven / Gradle / Ivy
The newest version!
/* BSD 2-Clause License - see OPAL/LICENSE for details. */
package org.opalj
package fpcf
package seq
/**
* Encapsulates different tasks.
*
* @author Michael Eichberg
*/
sealed abstract class QualifiedTask extends (() => Unit) {
/**
* Returns `true` if and only if this task was definitively triggered
* by a final property.
*/
def isTriggeredByFinalProperty: Boolean
}
final case class HandleResultTask[E <: Entity, P <: Property](
ps: PropertyStore,
r: PropertyComputationResult
) extends QualifiedTask {
override def apply(): Unit = {
// Get the most current property when the depender is eventually evaluated.
ps.handleResult(r)
}
override def isTriggeredByFinalProperty: Boolean = {
r match {
case NoResult | _: FinalPropertyComputationResult => true
case _ => false
}
}
}
final case class PropertyComputationTask[E <: Entity](
ps: PropertyStore,
e: E,
pc: PropertyComputation[E]
) extends QualifiedTask {
override def apply(): Unit = ps.handleResult(pc(e))
override def isTriggeredByFinalProperty: Boolean = false
}
final case class OnFinalUpdateComputationTask[E <: Entity, P <: Property](
ps: PropertyStore,
r: FinalEP[E, P],
c: OnUpdateContinuation
) extends QualifiedTask {
override def apply(): Unit = {
ps.handleResult(c(r))
}
override def isTriggeredByFinalProperty: Boolean = true
}
final case class OnUpdateComputationTask[E <: Entity, P <: Property](
ps: PropertyStore,
epk: EPK[E, P],
c: OnUpdateContinuation
) extends QualifiedTask {
override def apply(): Unit = {
// Get the most current property when the depender is eventually evaluated.
ps.handleResult(c(ps(epk).asEPS))
}
override def isTriggeredByFinalProperty: Boolean = false
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy