summaryrefslogtreecommitdiffstats
path: root/src/jrummikub/ai/fdsolver/Constraints.java
blob: 0885d2a9819f1544bbbff118d3d14574fc7ee636 (plain)
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
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.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 <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);
	}
}