Cache propagators

git-svn-id: svn://sunsvr01.isp.uni-luebeck.de/swproj13/trunk@437 72836036-5685-4462-b002-a69064685172
This commit is contained in:
Jannis Harder 2011-06-14 17:48:24 +02:00
parent 7568f37824
commit 0a63df955e
9 changed files with 15 additions and 13 deletions

View file

@ -2,10 +2,12 @@ package jrummikub.ai.fdsolver;
import java.util.Collection;
public interface Constraint {
public Collection<Var<?>> getWatchedVars();
public abstract class Constraint {
Collection<Propagator> cachedPropagators;
public abstract Collection<Var<?>> getWatchedVars();
public Collection<Propagator> getPropagators(boolean negate);
public abstract Collection<Propagator> getPropagators(boolean negate);
public Satisfiability getSatisfiability();
public abstract Satisfiability getSatisfiability();
}

View file

@ -99,7 +99,7 @@ public class Solver {
finishedConstraint(constraint, dirtyVar);
continue;
}
for (Propagator propagator : constraint.getPropagators(false)) {
for (Propagator propagator : constraint.cachedPropagators) {
if (propagator.getWatchedVars().contains(dirtyVar)) {
propagator.propagate();
if (contradiction) {
@ -124,8 +124,8 @@ public class Solver {
}
public void addConstraint(Constraint constraint) {
constraint.cachedPropagators = constraint.getPropagators(false);
constraints.add(constraint);
for (Var<?> var : constraint.getWatchedVars()) {
var.makeDirty();
var.getConstraints().add(constraint);

View file

@ -12,7 +12,7 @@ import jrummikub.ai.fdsolver.Propagator;
import jrummikub.ai.fdsolver.Satisfiability;
import jrummikub.ai.fdsolver.Var;
public class ComparatorConstraint<T> implements Constraint {
public class ComparatorConstraint<T> extends Constraint {
Var<T> x, y;
Comparator<T> comparator, reverseComparator;
ComparatorPropagator<T> trueX, trueY, falseX, falseY;

View file

@ -12,7 +12,7 @@ import jrummikub.ai.fdsolver.Propagator;
import jrummikub.ai.fdsolver.Satisfiability;
import jrummikub.ai.fdsolver.Var;
public class FilterConstraint<T> implements Constraint {
public class FilterConstraint<T> extends Constraint {
private Var<T> var;
private Propagator trueProp, falseProp;
private Filter<T> filter;

View file

@ -11,7 +11,7 @@ import jrummikub.ai.fdsolver.Propagator;
import jrummikub.ai.fdsolver.Satisfiability;
import jrummikub.ai.fdsolver.Var;
public class IfConstraint implements Constraint {
public class IfConstraint extends Constraint {
Var<Boolean> condition;
Constraint child;
Collection<Var<?>> vars;

View file

@ -13,7 +13,7 @@ import jrummikub.ai.fdsolver.Propagator;
import jrummikub.ai.fdsolver.Satisfiability;
import jrummikub.ai.fdsolver.Var;
public class IndexConstraint<T> implements Constraint {
public class IndexConstraint<T> extends Constraint {
Var<T> target;
Var<Integer> index;
List<Var<T>> list;

View file

@ -10,7 +10,7 @@ import jrummikub.ai.fdsolver.Propagator;
import jrummikub.ai.fdsolver.Satisfiability;
import jrummikub.ai.fdsolver.Var;
public class OffsetConstraint implements Constraint {
public class OffsetConstraint extends Constraint {
private Var<Integer> x, y;
int offset;
Propagator propX, propY;

View file

@ -10,7 +10,7 @@ import jrummikub.ai.fdsolver.Propagator;
import jrummikub.ai.fdsolver.Satisfiability;
import jrummikub.ai.fdsolver.Var;
public class SameConstraint<T> implements Constraint {
public class SameConstraint<T> extends Constraint {
private Var<T> x, y;
Propagator propX, propY;

View file

@ -10,7 +10,7 @@ import jrummikub.ai.fdsolver.Propagator;
import jrummikub.ai.fdsolver.Satisfiability;
import jrummikub.ai.fdsolver.Var;
public class SumConstraint implements Constraint {
public class SumConstraint extends Constraint {
Var<Integer> x, y, z;
public SumConstraint(Var<Integer> x, Var<Integer> y, Var<Integer> z) {