diff options
author | Jannis Harder <harder@informatik.uni-luebeck.de> | 2011-06-13 22:19:31 +0200 |
---|---|---|
committer | Jannis Harder <harder@informatik.uni-luebeck.de> | 2011-06-13 22:19:31 +0200 |
commit | 2b4ad89e72fdf9612854b27bc8dd818c8f062d35 (patch) | |
tree | cf323935dd3e58f43cdd4b2c19660055639948e0 /src/jrummikub/ai/fdsolver/Var.java | |
parent | a15626ac3b86d3153e32b7b160403c9ab66b1034 (diff) | |
download | JRummikub-2b4ad89e72fdf9612854b27bc8dd818c8f062d35.tar JRummikub-2b4ad89e72fdf9612854b27bc8dd818c8f062d35.zip |
Restructured fdsolver api and made first test succeed
git-svn-id: svn://sunsvr01.isp.uni-luebeck.de/swproj13/trunk@423 72836036-5685-4462-b002-a69064685172
Diffstat (limited to 'src/jrummikub/ai/fdsolver/Var.java')
-rw-r--r-- | src/jrummikub/ai/fdsolver/Var.java | 69 |
1 files changed, 61 insertions, 8 deletions
diff --git a/src/jrummikub/ai/fdsolver/Var.java b/src/jrummikub/ai/fdsolver/Var.java index a2b5cd7..eb6f432 100644 --- a/src/jrummikub/ai/fdsolver/Var.java +++ b/src/jrummikub/ai/fdsolver/Var.java @@ -2,24 +2,77 @@ package jrummikub.ai.fdsolver; import java.util.Collection; import java.util.HashSet; -import java.util.Set; +import java.util.Iterator; public class Var<T> { - Set<T> range; - + private Solver solver; + private HashSet<T> range; + public Var(Solver solver, Collection<T> range) { + this.solver = solver; this.range = new HashSet<T>(range); } - public static <T> Var<T> range(Solver solver, T low, T high) { - // TODO todo todo todo - return null; - } - public T getValue() { if (range.size() != 1) return null; return range.iterator().next(); } + public HashSet<T> getRange() { + return range; + } + + public void choose(T value) { + for (Iterator<T> i = this.iterator(); i.hasNext();) { + if (i.next() != value) { + i.remove(); + } + } + } + + public void makeDirty() { + this.solver.dirtyVars.add(this); + } + + public void invalidate(T value) { + range.remove(value); + solver.logInvalidation(this, value); + makeDirty(); + } + + public Iterator<T> iterator() { + final Iterator<T> iterator = range.iterator(); + return new Iterator<T>() { + T lastValue; + + @Override + public boolean hasNext() { + return iterator.hasNext(); + } + + @Override + public T next() { + lastValue = iterator.next(); + return lastValue; + } + + @Override + public void remove() { + // TODO logging + iterator.remove(); + solver.logInvalidation(Var.this, lastValue); + makeDirty(); + if (range.size() == 0) { + solver.contradiction = true; + } + } + }; + } + + @Override + public String toString() { + return "Var" + range; + } + } |