59 template<
class I,
class J>
61 sol(I& i, J& j)
const {
86 share0 == 0 ? 3 : 2,ds_22,false)
87 , sot(sot0), srt(srt0), share(share0) {}
92 case 0: a=
x[0]; b=
x[1];
c=
x[2];
break;
93 case 1: a=
x[0]; b=
x[0];
c=
x[0];
break;
94 case 2: a=
x[0]; b=
x[0];
c=
x[1];
break;
95 case 3: a=
x[0]; b=
x[1];
c=
x[0];
break;
96 case 4: a=
x[0]; b=
x[1];
c=
x[1];
break;
143 case 0: a=
x[0]; b=
x[1];
c=
x[2];
break;
144 case 1: a=
x[0]; b=
x[0];
c=
x[0];
break;
145 case 2: a=
x[0]; b=
x[0];
c=
x[1];
break;
146 case 3: a=
x[0]; b=
x[1];
c=
x[0];
break;
147 case 4: a=
x[0]; b=
x[1];
c=
x[1];
break;
161 for (
int i=0; i<=4; i++) {
162 (void)
new Rel(sots.sot(),srts.srt(),i);
183 "::C"+
str(withConst0 ? 1 : 0),
184 shared0 == 0 ? n0+1 : (shared0 <= 2 ? 3 : 2),ds_12,false)
185 , sot(sot0), n(n0), shared(shared0), withConst(withConst0)
190 int realN = shared == 0 ? n : 3;
196 for (
int i=realN; i--; )
197 isrs[i].init(
x.lub,
x[i]);
200 isrs[0].
init(
x.lub,
x[0]);
201 isrs[1].
init(
x.lub,
x[0]);
202 isrs[2].
init(
x.lub,
x[1]);
205 isrs[0].
init(
x.lub,
x[0]);
206 isrs[1].
init(
x.lub,
x[1]);
207 isrs[2].
init(
x.lub,
x[2]);
210 isrs[0].
init(
x.lub,
x[0]);
211 isrs[1].
init(
x.lub,
x[1]);
212 isrs[2].
init(
x.lub,
x[0]);
218 int result = shared == 0 ?
x.size() - 1 : (shared <= 2 ? 2 : 0);
224 if (shared == 1 && (isrs[0]() || isrs[1]())) {
225 delete[] isrs;
return false;
227 if (shared == 3 && (isrs[0]() || isrs[2]())) {
228 delete[] isrs;
return false;
230 unsigned int cardSum = 0;
231 if (shared == 1 || shared == 3) {
235 for (
int i=0; i<realN; i++) {
244 delete[] isrs;
return false;
307 int size = shared == 0 ?
x.size()-1 : 3;
312 for (
int i=
x.size()-1; i--;)
317 xs[0] =
x[0]; xs[1] =
x[0]; xs[2] =
x[1]; xn =
x[2];
320 xs[0] =
x[0]; xs[1] =
x[1]; xs[2] =
x[2]; xn =
x[2];
323 xs[0] =
x[0]; xs[1] =
x[1]; xs[2] =
x[0]; xn =
x[0];
341 for (
int wc=0; wc<=1; wc++) {
342 for (
int i=0; i<=3; i++) {
370 "::C"+
str(withConst0 ? 1 : 0),
372 , sot(sot0), n(n0), withConst(withConst0)
377 int* isrs =
new int[n];
378 for (
int i=0; i<n; i++)
379 isrs[i] =
x.ints()[i];
389 if (cardSum !=
static_cast<unsigned int>(n)) {
420 bool allEqual =
true;
421 for (
int i=1; i<n; i++) {
422 if (isrs[i] != isrs[0]) {
481 for (
int wc=0; wc<=1; wc++) {
482 for (
int i=0; i<=3; i++) {
Range iterator for integer sets.
Range iterator for computing set difference.
Range iterator for computing intersection (binary)
Range iterator for intersection of iterators.
Range iterator for union of iterators.
Range iterator for singleton range.
Range iterator for computing union (binary)
A complement iterator spezialized for the BndSet limits.
Test for Region memory area
Range iterator producing subsets of an IntSet.
void init(const Gecode::IntSet &d, int cur)
Initialize with set d0 and bit-pattern cur0.
Help class to create and register tests.
CreateIntN(void)
Perform creation and registration.
Help class to create and register tests.
CreateN(void)
Perform creation and registration.
Help class to create and register tests.
Create(void)
Perform creation and registration.
Test for n-ary partition constraint
bool solution(const SetAssignment &x) const
Test whether x is solution
RelIntN(Gecode::SetOpType sot0, int n0, bool withConst0)
Create and register test.
void post(Space &home, SetVarArray &x, IntVarArray &y)
Post constraint on x.
Test for n-ary partition constraint
void post(Space &home, SetVarArray &x, IntVarArray &)
Post constraint on x.
bool solution(const SetAssignment &x) const
Test whether x is solution
RelN(Gecode::SetOpType sot0, int n0, int shared0, bool withConst0)
Create and register test.
Test for ternary relation constraint
bool solution(const SetAssignment &x) const
Test whether x is solution
Rel(Gecode::SetOpType sot0, Gecode::SetRelType srt0, int share0=0)
Create and register test.
void post(Space &home, SetVarArray &x, IntVarArray &)
Post constraint on x.
Generate all set assignments.
Iterator for Boolean operation types.
Iterator for set relation types.
static std::string str(Gecode::SetRelType srt)
Map set relation to string.
SetTest(const std::string &s, int a, const Gecode::IntSet &d, bool r=false, int w=0)
Constructor.
void rel(Home home, FloatVar x0, FloatRelType frt, FloatVar x1)
Post propagator for .
SetOpType
Common operations for sets.
SetRelType
Common relation types for sets.
@ SOT_DUNION
Disjoint union.
bool subset(I &i, J &j)
Check whether range iterator i is subset of range iterator j.
unsigned int size(I &i)
Size of all ranges of range iterator i.
bool equal(I &i, J &j)
Check whether range iterators i and j are equal.
const unsigned int card
Maximum cardinality of an integer set.
Gecode toplevel namespace
SetExpr inter(const SetVarArgs &)
Intersection of set variables.
Post propagator for SetVar SetOpType SetVar y
Post propagator for SetVar x
Tests for relation/operation constraints
#define GECODE_NEVER
Assert that this command is never executed.