Rename API interfaces for better readability.
This commit is contained in:
parent
58eea099f1
commit
0dcf1ecd81
|
|
@ -8,25 +8,25 @@ package jetbrains.mps.logic.reactor.logical;
|
|||
*
|
||||
* @param <T> the value type
|
||||
*/
|
||||
public interface SolverLogical<T> extends Logical<T> {
|
||||
public interface JoinableLogical<T> extends Logical<T> {
|
||||
|
||||
/**
|
||||
* Covariant override.
|
||||
*/
|
||||
SolverLogical<T> findRoot();
|
||||
JoinableLogical<T> findRoot();
|
||||
|
||||
/**
|
||||
* Unions two equivalence classes of logicals.
|
||||
* Both the receiver and the {@code other} parameter are expected to be representatives.
|
||||
* The one with the highest rank becomes the representative for the new class.
|
||||
*/
|
||||
void union(SolverLogical<T> other, SolverLogical.ValueReconciler<T> reconciler);
|
||||
void union(JoinableLogical<T> other, JoinableLogical.ValueReconciler<T> reconciler);
|
||||
|
||||
/**
|
||||
* Calls {@link jetbrains.mps.logic.reactor.logical.SolverLogical#union(SolverLogical<T>, SolverLogical.ValueReconciler<T>) } with the default value reconciler.
|
||||
* Calls {@link JoinableLogical#union(JoinableLogical <T>, JoinableLogical.ValueReconciler<T>) } with the default value reconciler.
|
||||
* The default reconciler throws {@link java.lang.IllegalArgumentException } if the two values are not equal.
|
||||
*/
|
||||
void union(SolverLogical<T> other);
|
||||
void union(JoinableLogical<T> other);
|
||||
|
||||
/**
|
||||
* Should only be called on a representative.
|
||||
|
|
@ -21,7 +21,7 @@ interface SessionObjects {
|
|||
|
||||
}
|
||||
|
||||
class MemEvaluationSession private constructor (
|
||||
class EvaluationSessionImpl private constructor (
|
||||
val program: Program,
|
||||
val sessionSolver: SessionSolver,
|
||||
val trace: EvaluationTrace) : EvaluationSession(), SessionObjects
|
||||
|
|
@ -72,7 +72,7 @@ class MemEvaluationSession private constructor (
|
|||
parameters.get("profiling.data") as MutableMap<String, String>?
|
||||
val profiler = durations?.let { Profiler() }
|
||||
|
||||
session = MemEvaluationSession(program, sessionSolver, evaluationTrace)
|
||||
session = EvaluationSessionImpl(program, sessionSolver, evaluationTrace)
|
||||
ourBackend.ourSession.set(session)
|
||||
try {
|
||||
session.launch(parameters["main"] as Constraint, profiler, storeView)
|
||||
|
|
@ -109,7 +109,7 @@ class MemEvaluationSession private constructor (
|
|||
|
||||
private class Backend : EvaluationSession.Backend {
|
||||
|
||||
val ourSession = ThreadLocal<MemEvaluationSession>()
|
||||
val ourSession = ThreadLocal<EvaluationSessionImpl>()
|
||||
|
||||
override fun current(): EvaluationSession = ourSession.get() ?: throw IllegalStateException("no session")
|
||||
|
||||
|
|
@ -3,7 +3,7 @@ package jetbrains.mps.logic.reactor.core
|
|||
|
||||
import jetbrains.mps.logic.reactor.logical.Logical
|
||||
import jetbrains.mps.logic.reactor.logical.MetaLogical
|
||||
import jetbrains.mps.logic.reactor.logical.SolverLogical
|
||||
import jetbrains.mps.logic.reactor.logical.JoinableLogical
|
||||
import java.util.*
|
||||
|
||||
/**
|
||||
|
|
@ -19,20 +19,20 @@ interface LogicalObserver {
|
|||
}
|
||||
|
||||
fun Logical<*>.addObserver(observer: LogicalObserver) {
|
||||
(this as MemLogical<*>).valueObservers.add(this.to(observer))
|
||||
(this as MemLogical<*>).parentObservers.add(this.to(observer))
|
||||
(this as LogicalImpl<*>).valueObservers.add(this.to(observer))
|
||||
(this as LogicalImpl<*>).parentObservers.add(this.to(observer))
|
||||
}
|
||||
|
||||
fun Logical<*>.removeObserver(observer: LogicalObserver) {
|
||||
(this as MemLogical<*>).valueObservers.removeAll { p -> p.second == observer }
|
||||
(this as MemLogical<*>).parentObservers.removeAll { p -> p.second == observer }
|
||||
(this as LogicalImpl<*>).valueObservers.removeAll { p -> p.second == observer }
|
||||
(this as LogicalImpl<*>).parentObservers.removeAll { p -> p.second == observer }
|
||||
}
|
||||
|
||||
fun <V> MetaLogical<V>.logical(): Logical<V> = MemLogical<V>(this)
|
||||
fun <V> MetaLogical<V>.logical(): Logical<V> = LogicalImpl<V>(this)
|
||||
|
||||
fun <V> MetaLogical<V>.logical(value: V): Logical<V> = MemLogical<V>(name(), value)
|
||||
fun <V> MetaLogical<V>.logical(value: V): Logical<V> = LogicalImpl<V>(name(), value)
|
||||
|
||||
class MemLogical<T> : SolverLogical<T> {
|
||||
class LogicalImpl<T> : JoinableLogical<T> {
|
||||
|
||||
companion object {
|
||||
var lastIdx = 0
|
||||
|
|
@ -42,15 +42,15 @@ class MemLogical<T> : SolverLogical<T> {
|
|||
|
||||
val metaLogical: MetaLogical<T>
|
||||
|
||||
var _parent: MemLogical<T>? = null
|
||||
var _parent: LogicalImpl<T>? = null
|
||||
|
||||
var _value: T? = null
|
||||
|
||||
var rank = 0
|
||||
|
||||
internal val valueObservers = ArrayList<Pair<MemLogical<*>, LogicalObserver>>()
|
||||
internal val valueObservers = ArrayList<Pair<LogicalImpl<*>, LogicalObserver>>()
|
||||
|
||||
internal val parentObservers = ArrayList<Pair<MemLogical<*>, LogicalObserver>>()
|
||||
internal val parentObservers = ArrayList<Pair<LogicalImpl<*>, LogicalObserver>>()
|
||||
|
||||
constructor(value: T) {
|
||||
this.name = "$${++lastIdx}"
|
||||
|
|
@ -84,7 +84,7 @@ class MemLogical<T> : SolverLogical<T> {
|
|||
|
||||
override fun metaLogical(): MetaLogical<T> = metaLogical
|
||||
|
||||
override fun findRoot(): SolverLogical<T> = find()
|
||||
override fun findRoot(): JoinableLogical<T> = find()
|
||||
|
||||
override fun setValue(newValue: T) {
|
||||
if (_value !== newValue) {
|
||||
|
|
@ -93,9 +93,9 @@ class MemLogical<T> : SolverLogical<T> {
|
|||
}
|
||||
}
|
||||
|
||||
override fun union(other: SolverLogical<T>, reconciler: SolverLogical.ValueReconciler<T>) {
|
||||
override fun union(other: JoinableLogical<T>, reconciler: JoinableLogical.ValueReconciler<T>) {
|
||||
val thisRepr = this.find()
|
||||
val otherRepr = (other as MemLogical<T>).find()
|
||||
val otherRepr = (other as LogicalImpl<T>).find()
|
||||
|
||||
// invariant: thisRepr.rank > otherRepr.rank
|
||||
if (thisRepr.rank() < otherRepr.rank()) {
|
||||
|
|
@ -136,11 +136,11 @@ class MemLogical<T> : SolverLogical<T> {
|
|||
}
|
||||
}
|
||||
|
||||
override fun union(other: SolverLogical<T>) {
|
||||
override fun union(other: JoinableLogical<T>) {
|
||||
union(other, { a, b -> if (a != b) throw IllegalStateException("$a does not equal to $b")})
|
||||
}
|
||||
|
||||
private fun find(): MemLogical<T> {
|
||||
private fun find(): LogicalImpl<T> {
|
||||
val tmp = _parent
|
||||
if (tmp == null) return this
|
||||
else {
|
||||
|
|
@ -154,19 +154,19 @@ class MemLogical<T> : SolverLogical<T> {
|
|||
|
||||
private fun incRank() { rank++ }
|
||||
|
||||
private fun setParent(parent: MemLogical<T>) {
|
||||
private fun setParent(parent: LogicalImpl<T>) {
|
||||
this._parent = parent
|
||||
notifyParentUpdated()
|
||||
}
|
||||
|
||||
private fun mergeValueObservers(mergeFrom: SolverLogical<T>) {
|
||||
val other = mergeFrom as MemLogical<T>
|
||||
private fun mergeValueObservers(mergeFrom: JoinableLogical<T>) {
|
||||
val other = mergeFrom as LogicalImpl<T>
|
||||
valueObservers.addAll(other.valueObservers)
|
||||
other.valueObservers.clear()
|
||||
}
|
||||
|
||||
private fun mergeParentObservers(mergeFrom: SolverLogical<T>) {
|
||||
val other = mergeFrom as MemLogical<T>
|
||||
private fun mergeParentObservers(mergeFrom: JoinableLogical<T>) {
|
||||
val other = mergeFrom as LogicalImpl<T>
|
||||
parentObservers.addAll(other.parentObservers)
|
||||
other.parentObservers.clear()
|
||||
}
|
||||
|
|
|
|||
|
|
@ -66,7 +66,7 @@ class Match(val rule: Rule,
|
|||
meta2logical[metaLogical] = when (value) {
|
||||
is Logical<*> -> value
|
||||
is LogicalOwner -> value.logical()
|
||||
else -> MemLogical(value)
|
||||
else -> LogicalImpl(value)
|
||||
}
|
||||
} else {
|
||||
meta2logical[metaLogical] = metaLogical.logical()
|
||||
|
|
|
|||
|
|
@ -7,7 +7,7 @@ import jetbrains.mps.logic.reactor.evaluation.PredicateInvocation
|
|||
import jetbrains.mps.logic.reactor.logical.Logical
|
||||
import jetbrains.mps.logic.reactor.logical.LogicalContext
|
||||
import jetbrains.mps.logic.reactor.logical.MetaLogical
|
||||
import jetbrains.mps.logic.reactor.logical.SolverLogical
|
||||
import jetbrains.mps.logic.reactor.logical.JoinableLogical
|
||||
import jetbrains.mps.logic.reactor.program.Predicate
|
||||
import jetbrains.mps.logic.reactor.program.PredicateSymbol
|
||||
|
||||
|
|
@ -22,11 +22,11 @@ class EqualsSolver : AbstractSolver() {
|
|||
}
|
||||
|
||||
private fun _ask(left: Any?, right: Any?): Boolean {
|
||||
return if (left is SolverLogical<*> && right is SolverLogical<*>) {
|
||||
return if (left is JoinableLogical<*> && right is JoinableLogical<*>) {
|
||||
ask_logical_logical(left, right)
|
||||
} else if (left is SolverLogical<*>) {
|
||||
} else if (left is JoinableLogical<*>) {
|
||||
ask_logical_value(left, right)
|
||||
} else if (right is SolverLogical<*>) {
|
||||
} else if (right is JoinableLogical<*>) {
|
||||
ask_value_logical(left, right)
|
||||
} else {
|
||||
ask_value_value(left, right)
|
||||
|
|
@ -38,27 +38,27 @@ class EqualsSolver : AbstractSolver() {
|
|||
}
|
||||
|
||||
private fun _tell(left: Any?, right: Any?) {
|
||||
if (left is SolverLogical<*> && right is SolverLogical<*>) {
|
||||
tell_logical_logical(left as SolverLogical<Any>, right as SolverLogical<Any>)
|
||||
} else if (left is SolverLogical<*>) {
|
||||
tell_logical_value(left as SolverLogical<Any>, right)
|
||||
} else if (right is SolverLogical<*>) {
|
||||
tell_value_logical(left, right as SolverLogical<Any>)
|
||||
if (left is JoinableLogical<*> && right is JoinableLogical<*>) {
|
||||
tell_logical_logical(left as JoinableLogical<Any>, right as JoinableLogical<Any>)
|
||||
} else if (left is JoinableLogical<*>) {
|
||||
tell_logical_value(left as JoinableLogical<Any>, right)
|
||||
} else if (right is JoinableLogical<*>) {
|
||||
tell_value_logical(left, right as JoinableLogical<Any>)
|
||||
} else {
|
||||
tell_value_value(left, right)
|
||||
}
|
||||
}
|
||||
|
||||
fun ask_logical_logical(left: SolverLogical<*>, right: SolverLogical<*>): Boolean {
|
||||
fun ask_logical_logical(left: JoinableLogical<*>, right: JoinableLogical<*>): Boolean {
|
||||
if (left.findRoot() == right.findRoot()) return true
|
||||
return left.isBound && right.isBound && left.findRoot().value() == right.findRoot().value()
|
||||
}
|
||||
|
||||
fun ask_logical_value(left: SolverLogical<*>, right: Any?): Boolean {
|
||||
fun ask_logical_value(left: JoinableLogical<*>, right: Any?): Boolean {
|
||||
return left.isBound && left.findRoot().value() == right
|
||||
}
|
||||
|
||||
fun ask_value_logical(left: Any?, right: SolverLogical<*>): Boolean {
|
||||
fun ask_value_logical(left: Any?, right: JoinableLogical<*>): Boolean {
|
||||
return right.isBound && right.findRoot().value() == left
|
||||
}
|
||||
|
||||
|
|
@ -66,7 +66,7 @@ class EqualsSolver : AbstractSolver() {
|
|||
return left == right
|
||||
}
|
||||
|
||||
fun <T> tell_logical_logical(left: SolverLogical<T>, right: SolverLogical<T>) {
|
||||
fun <T> tell_logical_logical(left: JoinableLogical<T>, right: JoinableLogical<T>) {
|
||||
if (left == right) return
|
||||
|
||||
val leftRepr = left.findRoot()
|
||||
|
|
@ -77,7 +77,7 @@ class EqualsSolver : AbstractSolver() {
|
|||
leftRepr.union(rightRepr, { a, b -> tell_value_value(a, b)})
|
||||
}
|
||||
|
||||
fun <T> tell_logical_value(left: SolverLogical<T>, right: T?) {
|
||||
fun <T> tell_logical_value(left: JoinableLogical<T>, right: T?) {
|
||||
if (left.isBound) {
|
||||
check(left.findRoot().value() == right)
|
||||
}
|
||||
|
|
@ -86,7 +86,7 @@ class EqualsSolver : AbstractSolver() {
|
|||
}
|
||||
}
|
||||
|
||||
fun <T> tell_value_logical(left: T?, right: SolverLogical<T>) {
|
||||
fun <T> tell_value_logical(left: T?, right: JoinableLogical<T>) {
|
||||
if (right.isBound) {
|
||||
check(right.findRoot().value() == left)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
import jetbrains.mps.logic.reactor.core.LogicalObserver
|
||||
import jetbrains.mps.logic.reactor.core.MemLogical
|
||||
import jetbrains.mps.logic.reactor.core.LogicalImpl
|
||||
import jetbrains.mps.logic.reactor.evaluation.PredicateInvocation
|
||||
import jetbrains.mps.logic.reactor.logical.*
|
||||
import jetbrains.mps.logic.reactor.program.Predicate
|
||||
|
|
@ -11,14 +11,14 @@ import java.util.*
|
|||
*/
|
||||
|
||||
|
||||
fun <T: Any> anon(value: T) = MemLogical(value)
|
||||
fun <T: Any> anon(value: T) = LogicalImpl(value)
|
||||
|
||||
fun <T: Any> logical(name: String) = MemLogical<T>(name)
|
||||
fun <T: Any> logical(name: String) = LogicalImpl<T>(name)
|
||||
|
||||
fun <T: Any> logical(name1: String, name2: String) = Pair(MemLogical<T>(name1), MemLogical<T>(name2))
|
||||
fun <T: Any> logical(name1: String, name2: String) = Pair(LogicalImpl<T>(name1), LogicalImpl<T>(name2))
|
||||
|
||||
fun <T: Any> logical(name1: String, name2: String, name3: String) =
|
||||
Triple(MemLogical<T>(name1), MemLogical<T>(name2), MemLogical<T>(name3))
|
||||
Triple(LogicalImpl<T>(name1), LogicalImpl<T>(name2), LogicalImpl<T>(name3))
|
||||
|
||||
inline fun <reified T: Any> metaLogical(name: String) = MetaLogical<T>(name, T::class.java)
|
||||
|
||||
|
|
@ -36,7 +36,7 @@ fun <T: Any> Logical<T>.get(): T = findRoot().value()
|
|||
fun <T: Any> Logical<T>.getNullable(): T? = findRoot().value()
|
||||
|
||||
fun <T: Any> Logical<T>.set(t: T) {
|
||||
if (this is SolverLogical<T>)
|
||||
if (this is JoinableLogical<T>)
|
||||
findRoot().setValue(t)
|
||||
else
|
||||
throw IllegalStateException("unexpected receiver $this")
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
import jetbrains.mps.logic.reactor.core.LogicalObserver
|
||||
import jetbrains.mps.logic.reactor.core.MemLogical
|
||||
import jetbrains.mps.logic.reactor.core.LogicalImpl
|
||||
import jetbrains.mps.logic.reactor.core.addObserver
|
||||
import jetbrains.mps.logic.reactor.logical.Logical
|
||||
import org.junit.Test
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
import jetbrains.mps.logic.reactor.core.MemEvaluationSession
|
||||
import jetbrains.mps.logic.reactor.core.EvaluationSessionImpl
|
||||
import jetbrains.mps.logic.reactor.evaluation.EvaluationSession
|
||||
import jetbrains.mps.logic.reactor.evaluation.StoreView
|
||||
import jetbrains.mps.logic.reactor.logical.Logical
|
||||
|
|
@ -19,10 +19,10 @@ class TestProgram {
|
|||
|
||||
companion object {
|
||||
@BeforeClass @JvmStatic fun setup() {
|
||||
MemEvaluationSession.init();
|
||||
EvaluationSessionImpl.init();
|
||||
}
|
||||
@AfterClass @JvmStatic fun teardown() {
|
||||
MemEvaluationSession.deinit();
|
||||
EvaluationSessionImpl.deinit();
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue