]> gerrit.simantics Code Review - simantics/platform.git/blobdiff - bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/chr/plan/PartnerFact.java
Merged changes from feature/scl to master.
[simantics/platform.git] / bundles / org.simantics.scl.compiler / src / org / simantics / scl / compiler / elaboration / chr / plan / PartnerFact.java
diff --git a/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/chr/plan/PartnerFact.java b/bundles/org.simantics.scl.compiler/src/org/simantics/scl/compiler/elaboration/chr/plan/PartnerFact.java
new file mode 100644 (file)
index 0000000..cdec9a3
--- /dev/null
@@ -0,0 +1,43 @@
+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