public class UsageAnalysis {
public static void analyzeUsage(CHRRuleset ruleset) {
THashMap<CHRConstraint,ArrayList<CHRRule>> headConstraintMap = createHeadConstraintMap(ruleset);
- calculateFirstPriorities(ruleset, headConstraintMap);
+ //calculateFirstPriorities(ruleset, headConstraintMap);
calculateLastPriorities(ruleset, headConstraintMap);
- for(CHRRule rule : ruleset.rules)
- determinePassiveLiterals(rule);
+ if(!ruleset.extensible)
+ for(CHRRule rule : ruleset.rules)
+ determinePassiveLiterals(rule);
//printPriorities(ruleset);
}
-
+ /*
private static void calculateFirstPriorities(CHRRuleset ruleset,
THashMap<CHRConstraint, ArrayList<CHRRule>> headConstraintMap) {
for(CHRRule rule : ruleset.rules)
int constraintPriority = constraint.firstPriorityAdded;
if(constraintPriority == Integer.MAX_VALUE)
return;
- result = Math.max(result, constraint.firstPriorityAdded);
+ result = Math.max(result, constraintPriority);
}
rule.firstPriorityExecuted = result;
for(CHRLiteral literal : rule.head.literals)
if(literal.killAfterMatch && literal.relation instanceof CHRConstraint) {
CHRConstraint constraint = (CHRConstraint)literal.relation;
- if(constraint.firstPriorityRemoved != Integer.MAX_VALUE)
- continue;
- constraint.firstPriorityRemoved = result;
+ if(constraint.firstPriorityRemoved == Integer.MAX_VALUE)
+ constraint.firstPriorityRemoved = result;
}
for(CHRLiteral literal : rule.body.literals)
if(literal.relation instanceof CHRConstraint) {
continue;
for(CHRRule lowerPriorityRule : list)
if(lowerPriorityRule.priority < rule.priority)
+ // We know here that previous call to lowerPriorityRule "failed",
+ // because constraint.firstPriorityAdded was previously Integer.MAX_VALUE
calculateFirstPriority(headConstraintMap, lowerPriorityRule);
}
}
-
+ */
private static void calculateLastPriorities(CHRRuleset ruleset,
THashMap<CHRConstraint, ArrayList<CHRRule>> headConstraintMap) {
for(CHRRule rule : ruleset.rules)
rule.lastPriorityExecuted = Integer.MIN_VALUE;
- for(CHRConstraint constraint : ruleset.constraints) {
+ for(CHRConstraint constraint : headConstraintMap.keySet()) {
constraint.lastPriorityAdded = Integer.MIN_VALUE;
constraint.lastPriorityRemoved = Integer.MIN_VALUE;
}
for(CHRLiteral literal : rule.head.literals)
if(literal.killAfterMatch && literal.relation instanceof CHRConstraint) {
CHRConstraint constraint = (CHRConstraint)literal.relation;
- if(constraint.lastPriorityRemoved != Integer.MIN_VALUE)
- continue;
- constraint.lastPriorityRemoved = priority;
+ if(constraint.lastPriorityRemoved == Integer.MIN_VALUE)
+ constraint.lastPriorityRemoved = priority;
}
for(CHRLiteral literal : rule.body.literals)
if(literal.relation instanceof CHRConstraint) {
return map;
}
- private static void printPriorities(CHRRuleset ruleset) {
+ /*private static void printPriorities(CHRRuleset ruleset) {
System.out.println("-------------------------------");
for(CHRConstraint constraint : ruleset.constraints) {
System.out.print(" [" + constraint.firstPriorityAdded + ".." + constraint.lastPriorityAdded + "]");
System.out.print(" [" + rule.firstPriorityExecuted + ".." + rule.lastPriorityExecuted + "] ");
System.out.println(rule);
}
- }
+ }*/
private static void determinePassiveLiterals(CHRRule rule) {
for(CHRLiteral literal : rule.head.literals) {