]> gerrit.simantics Code Review - simantics/platform.git/blob - bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/chr/plan/PartnerFact.java
(refs #7250) Refactoring CHR implementation
[simantics/platform.git] / bundles / org.simantics.scl.compiler / src / org / simantics / scl / compiler / elaboration / chr / plan / PartnerFact.java
1 package org.simantics.scl.compiler.elaboration.chr.plan;
2
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;
10
11 public class PartnerFact {
12     public final boolean active;
13     public final IVal id;
14     public final CHRConstraint constraint;
15     public final IVal factVar;
16     public final boolean mayBeRemoved;
17     public final boolean killAfterMatch;
18
19     public final Constant nextFact;
20     public final ICont continueCont;
21     public final ICont finishCont;
22     
23     public PartnerFact(boolean active, IVal id, CHRConstraint constraint, IVal factVar, boolean mayBeRemoved, boolean killAfterMatch,
24             Constant nextFact, ICont continueCont, ICont finishCont) {
25         this.active = active;
26         this.id = id;
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;
34     }
35     
36     public IVal isAlive(long location, CodeWriter w) {
37         return w.apply(location, JavaComparisonOperation.IEQUAL, w.apply(location, constraint.accessId, factVar), id);
38     }
39     
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));
42     }
43 }