diff options
author | Jannis Harder <harder@informatik.uni-luebeck.de> | 2011-06-14 17:48:24 +0200 |
---|---|---|
committer | Jannis Harder <harder@informatik.uni-luebeck.de> | 2011-06-14 17:48:24 +0200 |
commit | 0a63df955ee7e748c43a0cd9303add78eda0018b (patch) | |
tree | b4f26ffdaf45ea4d2c3d7863e1e7d8c442eb9d1d | |
parent | 7568f3782466531fe04fc14a40dc4d3a393c1fb9 (diff) | |
download | JRummikub-0a63df955ee7e748c43a0cd9303add78eda0018b.tar JRummikub-0a63df955ee7e748c43a0cd9303add78eda0018b.zip |
Cache propagators
git-svn-id: svn://sunsvr01.isp.uni-luebeck.de/swproj13/trunk@437 72836036-5685-4462-b002-a69064685172
9 files changed, 15 insertions, 13 deletions
diff --git a/src/jrummikub/ai/fdsolver/Constraint.java b/src/jrummikub/ai/fdsolver/Constraint.java index f7955ce..b081d4b 100644 --- a/src/jrummikub/ai/fdsolver/Constraint.java +++ b/src/jrummikub/ai/fdsolver/Constraint.java @@ -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(); } diff --git a/src/jrummikub/ai/fdsolver/Solver.java b/src/jrummikub/ai/fdsolver/Solver.java index c3ede1b..2277ba4 100644 --- a/src/jrummikub/ai/fdsolver/Solver.java +++ b/src/jrummikub/ai/fdsolver/Solver.java @@ -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); diff --git a/src/jrummikub/ai/fdsolver/constraint/ComparatorConstraint.java b/src/jrummikub/ai/fdsolver/constraint/ComparatorConstraint.java index 24e7ecf..ab0edde 100644 --- a/src/jrummikub/ai/fdsolver/constraint/ComparatorConstraint.java +++ b/src/jrummikub/ai/fdsolver/constraint/ComparatorConstraint.java @@ -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; diff --git a/src/jrummikub/ai/fdsolver/constraint/FilterConstraint.java b/src/jrummikub/ai/fdsolver/constraint/FilterConstraint.java index e676882..d01a109 100644 --- a/src/jrummikub/ai/fdsolver/constraint/FilterConstraint.java +++ b/src/jrummikub/ai/fdsolver/constraint/FilterConstraint.java @@ -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; diff --git a/src/jrummikub/ai/fdsolver/constraint/IfConstraint.java b/src/jrummikub/ai/fdsolver/constraint/IfConstraint.java index 802acc2..3046eb5 100644 --- a/src/jrummikub/ai/fdsolver/constraint/IfConstraint.java +++ b/src/jrummikub/ai/fdsolver/constraint/IfConstraint.java @@ -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; diff --git a/src/jrummikub/ai/fdsolver/constraint/IndexConstraint.java b/src/jrummikub/ai/fdsolver/constraint/IndexConstraint.java index 999924f..9d80a37 100644 --- a/src/jrummikub/ai/fdsolver/constraint/IndexConstraint.java +++ b/src/jrummikub/ai/fdsolver/constraint/IndexConstraint.java @@ -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; diff --git a/src/jrummikub/ai/fdsolver/constraint/OffsetConstraint.java b/src/jrummikub/ai/fdsolver/constraint/OffsetConstraint.java index f91dcda..a324d2a 100644 --- a/src/jrummikub/ai/fdsolver/constraint/OffsetConstraint.java +++ b/src/jrummikub/ai/fdsolver/constraint/OffsetConstraint.java @@ -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; diff --git a/src/jrummikub/ai/fdsolver/constraint/SameConstraint.java b/src/jrummikub/ai/fdsolver/constraint/SameConstraint.java index 7fc8961..954b6fa 100644 --- a/src/jrummikub/ai/fdsolver/constraint/SameConstraint.java +++ b/src/jrummikub/ai/fdsolver/constraint/SameConstraint.java @@ -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; diff --git a/src/jrummikub/ai/fdsolver/constraint/SumConstraint.java b/src/jrummikub/ai/fdsolver/constraint/SumConstraint.java index 80b19e2..c96a751 100644 --- a/src/jrummikub/ai/fdsolver/constraint/SumConstraint.java +++ b/src/jrummikub/ai/fdsolver/constraint/SumConstraint.java @@ -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) { |