import gnu.trove.set.hash.TIntHashSet;
public class CHRRule extends Symbol {
+ public CHRRuleset parentRuleset;
public int priority;
public CHRQuery head;
public CHRQuery body;
public Variable[] existentialVariables;
// Analysis
- public int firstPriorityExecuted;
+ //public int firstPriorityExecuted;
public int lastPriorityExecuted;
// Plans
}
public void compile(CompilationContext compilationContext, CHRConstraint initConstraint) {
- boolean hasActiveLiteral = false;
+ boolean hasLocalActiveLiteral = false;
for(int i=0;i<head.literals.length;++i) {
CHRLiteral literal = head.literals[i];
if(literal.passive)
body.createEnforcePlan(context, priority);
addPlan(new CHRSearchPlan(constraint, activeFact, context.getPlanOps()));
- hasActiveLiteral = true;
+ if(constraint.parentRuleset == parentRuleset)
+ hasLocalActiveLiteral = true;
}
- if(!hasActiveLiteral) {
+ if(!hasLocalActiveLiteral) {
Variable activeFact = new Variable("activeFact", initConstraint.factType);
QueryPlanningContext context = new QueryPlanningContext(compilationContext, existentialVariables);
if(!head.createQueryPlan(context, null, -1))
private void addPlan(CHRSearchPlan plan) {
plans.add(plan);
- plan.constraint.minimumPriority = Math.min(plan.constraint.minimumPriority, priority);
}
public String toString() {