--- /dev/null
+package org.simantics.scl.compiler.elaboration.query.compilation;
+
+
+public abstract class QueryConstraint {
+ public int[] variables;
+ public long finalBoundVariables;
+
+ public QueryConstraint(int[] variables) {
+ this.variables = variables;
+ }
+
+ public QueryConstraint() {
+ }
+
+ public long getVariableMask() {
+ long result = 0L;
+ for(int v : variables)
+ result |= 1 << v;
+ return result;
+ }
+
+ public abstract boolean canBeSolvedFrom(long boundVariables);
+ public abstract double getSolutionCost(long boundVariables);
+ public abstract double getSolutionBranching(long boundVariables);
+ public abstract void generate(QueryCompilationContext context);
+
+ public void generateAndUpdateCost(QueryCompilationContext context) {
+ generate(context);
+ context.updateCost(getSolutionBranching(finalBoundVariables), getSolutionCost(finalBoundVariables));
+ }
+}