package cx.prutser.sudoku.solver; import java.util.HashSet; import java.util.Set; /** * TODO: verify if using the fastutils data structures makes sense performance wise. * * @author Erik van Zijst */ class UniqueConstraint<T> implements Constraint { private final Set<T> set = new HashSet<T>(); private Tile<T> tiles[] = new Tile[0]; public void addTile(Tile<T> tile) { Tile<T> buf[] = new Tile[tiles.length + 1]; for (int i = 0; i < tiles.length; i++) { buf[i] = tiles[i]; } buf[tiles.length] = tile; tiles = buf; } /** * Returns <code>true</code> if all {@link Tile}s contain unique values, * <code>false</code> otherwise. Note that a <code>null</code> value * indicates the tile does not have a value set. * * @return <code>true</code> if all tiles contain unique values. */ public boolean isSatisfied() { try { for (Tile<T> tile : tiles) { if (tile.getValue() != null && !set.add(tile.getValue())) { return false; } } return true; } finally { set.clear(); } } }