1 package org.simantics.scl.compiler.elaboration.chr.plan;
3 import org.simantics.scl.compiler.constants.Constant;
4 import org.simantics.scl.compiler.constants.JavaComparisonOperation;
5 import org.simantics.scl.compiler.constants.JavaComparisonToZeroOperation;
6 import org.simantics.scl.compiler.elaboration.chr.relations.CHRConstraint;
7 import org.simantics.scl.compiler.internal.codegen.continuations.ICont;
8 import org.simantics.scl.compiler.internal.codegen.references.IVal;
9 import org.simantics.scl.compiler.internal.codegen.writer.CodeWriter;
11 public class PartnerFact {
12 public final boolean active;
14 public final CHRConstraint constraint;
15 public final IVal factVar;
16 public final boolean mayBeRemoved;
17 public final boolean killAfterMatch;
19 public final Constant nextFact;
20 public final ICont continueCont;
21 public final ICont finishCont;
23 public PartnerFact(boolean active, IVal id, CHRConstraint constraint, IVal factVar, boolean mayBeRemoved, boolean killAfterMatch,
24 Constant nextFact, ICont continueCont, ICont finishCont) {
27 this.constraint = constraint;
28 this.factVar = factVar;
29 this.mayBeRemoved = mayBeRemoved;
30 this.killAfterMatch = killAfterMatch;
31 this.nextFact = nextFact;
32 this.continueCont = continueCont;
33 this.finishCont = finishCont;
36 public IVal isAlive(long location, CodeWriter w) {
37 return w.apply(location, JavaComparisonOperation.IEQUAL, w.apply(location, constraint.accessId, factVar), id);
40 public IVal isAlive(long location, CodeWriter w, IVal fact) {
41 return w.apply(location, JavaComparisonToZeroOperation.IGREATER_OR_EQUAL, w.apply(location, constraint.accessId, fact));