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

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