+package org.simantics.scl.compiler.elaboration.chr.plan;\r
+\r
+import org.simantics.scl.compiler.constants.Constant;\r
+import org.simantics.scl.compiler.constants.JavaComparisonOperation;\r
+import org.simantics.scl.compiler.constants.JavaComparisonToZeroOperation;\r
+import org.simantics.scl.compiler.elaboration.chr.relations.CHRConstraint;\r
+import org.simantics.scl.compiler.internal.codegen.continuations.ICont;\r
+import org.simantics.scl.compiler.internal.codegen.references.IVal;\r
+import org.simantics.scl.compiler.internal.codegen.writer.CodeWriter;\r
+\r
+public class PartnerFact {\r
+ public final boolean active;\r
+ public final IVal id;\r
+ public final CHRConstraint constraint;\r
+ public final IVal factVar;\r
+ public final boolean mayBeRemoved;\r
+ public final boolean killAfterMatch;\r
+\r
+ public final Constant nextFact;\r
+ public final ICont continueCont;\r
+ public final ICont finishCont;\r
+ \r
+ public PartnerFact(boolean active, IVal id, CHRConstraint constraint, IVal factVar, boolean mayBeRemoved, boolean killAfterMatch,\r
+ Constant nextFact, ICont continueCont, ICont finishCont) {\r
+ this.active = active;\r
+ this.id = id;\r
+ this.constraint = constraint;\r
+ this.factVar = factVar;\r
+ this.mayBeRemoved = mayBeRemoved;\r
+ this.killAfterMatch = killAfterMatch;\r
+ this.nextFact = nextFact;\r
+ this.continueCont = continueCont;\r
+ this.finishCont = finishCont;\r
+ }\r
+ \r
+ public IVal isAlive(long location, CodeWriter w) {\r
+ return w.apply(location, JavaComparisonOperation.IEQUAL, w.apply(location, constraint.accessId, factVar), id);\r
+ }\r
+ \r
+ public IVal isAlive(long location, CodeWriter w, IVal fact) {\r
+ return w.apply(location, JavaComparisonToZeroOperation.IGREATER_OR_EQUAL, w.apply(location, constraint.accessId, fact));\r
+ }\r
+}\r