package org.simantics.scl.compiler.elaboration.chr.planning.items; import org.simantics.scl.compiler.common.exceptions.InternalCompilerError; import org.simantics.scl.compiler.elaboration.chr.CHRLiteral; import org.simantics.scl.compiler.elaboration.chr.CHRRelation; import org.simantics.scl.compiler.elaboration.chr.plan.CheckOp; import org.simantics.scl.compiler.elaboration.chr.plan.IterateConstraintOp; import org.simantics.scl.compiler.elaboration.chr.plan.IterateRelationOp; import org.simantics.scl.compiler.elaboration.chr.planning.PrePlanItem; import org.simantics.scl.compiler.elaboration.chr.planning.QueryPlanningContext; import org.simantics.scl.compiler.elaboration.chr.relations.CHRConstraint; import org.simantics.scl.compiler.elaboration.chr.relations.ExternalCHRRelation; import org.simantics.scl.compiler.elaboration.expressions.EApply; import org.simantics.scl.compiler.elaboration.expressions.EConstant; import org.simantics.scl.compiler.elaboration.expressions.EVariable; import org.simantics.scl.compiler.elaboration.expressions.Expression; import org.simantics.scl.compiler.elaboration.expressions.Variable; import org.simantics.scl.compiler.elaboration.java.Builtins; import org.simantics.scl.compiler.elaboration.relations.SCLRelation; import gnu.trove.set.hash.THashSet; import gnu.trove.set.hash.TIntHashSet; public class GenericPrePlanItem extends PrePlanItem { public CHRLiteral literal; public CHRRelation relation; public Expression[] expressions; public TIntHashSet[] variableSets; TIntHashSet allVars; public GenericPrePlanItem(CHRLiteral literal, CHRRelation relation, Expression[] expressions, TIntHashSet[] variableSets, int secondaryPriority) { super(secondaryPriority); this.literal = literal; this.relation = relation; this.expressions = expressions; this.variableSets = variableSets; allVars = new TIntHashSet(); for(TIntHashSet variableSet : variableSets) allVars.addAll(variableSet); updatePrimaryPriority(); } private void updatePrimaryPriority() { int boundCount = 0; int boundMask = 0; for(int i=0;i 1) { THashSet usedVariables = new THashSet(freeVariableCount); for(int i=0;i