1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
|
package jrummikub.ai.fdsolver;
import java.util.List;
import jrummikub.ai.fdsolver.constraint.Filter;
import jrummikub.ai.fdsolver.constraint.FilterConstraint;
import jrummikub.ai.fdsolver.constraint.IfConstraint;
import jrummikub.ai.fdsolver.constraint.IndexConstraint;
import jrummikub.ai.fdsolver.constraint.LessThan;
import jrummikub.ai.fdsolver.constraint.ListSumConstraint;
import jrummikub.ai.fdsolver.constraint.OffsetConstraint;
import jrummikub.ai.fdsolver.constraint.SameConstraint;
import jrummikub.ai.fdsolver.constraint.SumConstraint;
public class Constraints {
public static Constraint when(Var<Boolean> cond, Constraint c) {
return new IfConstraint(false, cond, c);
}
public static Constraint unless(Var<Boolean> cond, Constraint c) {
return new IfConstraint(true, cond, c);
}
public static <T> Constraint index(Var<T> target, Var<Integer> index, List<Var<T>> list) {
return new IndexConstraint<T>(target, index, list);
}
public static <T> Constraint constant(Var<T> target, final T constant) {
return new FilterConstraint<T>(new Filter<T>() {
@Override
public boolean accept(T value) {
return value.equals(constant);
}
}, target);
}
public static Constraint offset(int offset, Var<Integer> x, Var<Integer> y) {
return new OffsetConstraint(offset, x, y);
}
public static <T> Constraint same(Var<T> x, Var<T> y) {
return new SameConstraint<T>(x, y);
}
public static Constraint sum(Var<Integer> x, Var<Integer> y, Var<Integer> z) {
return new SumConstraint(x, y, z);
}
public static Constraint sum(Var<Integer> sum, List<Var<Integer>> list) {
return new ListSumConstraint(sum, list);
}
public static <T extends Comparable<T>> Constraint lessThan(Var<T> x, Var<T> y) {
return new LessThan<T>(false, x, y);
}
public static <T extends Comparable<T>> Constraint lessThanEq(Var<T> x, Var<T> y) {
return new LessThan<T>(true, x, y);
}
}
|