main page
modules
namespaces
classes
files
Gecode home
Generated on Tue Jan 28 2020 00:00:00 for Gecode by
doxygen
1.8.17
gecode
set
cardinality.cpp
Go to the documentation of this file.
1
/* -*- mode: C++; c-basic-offset: 2; indent-tabs-mode: nil -*- */
2
/*
3
* Main authors:
4
* Gabor Szokoli <szokoli@gecode.org>
5
* Guido Tack <tack@gecode.org>
6
* Christian Schulte <schulte@gecode.org>
7
*
8
* Copyright:
9
* Gabor Szokoli, 2004
10
* Guido Tack, 2004
11
* Christian Schulte, 2004
12
*
13
* Last modified:
14
* $Date: 2017-03-10 10:15:56 +0100 (Fri, 10 Mar 2017) $ by $Author: schulte $
15
* $Revision: 15566 $
16
*
17
* This file is part of Gecode, the generic constraint
18
* development environment:
19
* http://www.gecode.org
20
*
21
* Permission is hereby granted, free of charge, to any person obtaining
22
* a copy of this software and associated documentation files (the
23
* "Software"), to deal in the Software without restriction, including
24
* without limitation the rights to use, copy, modify, merge, publish,
25
* distribute, sublicense, and/or sell copies of the Software, and to
26
* permit persons to whom the Software is furnished to do so, subject to
27
* the following conditions:
28
*
29
* The above copyright notice and this permission notice shall be
30
* included in all copies or substantial portions of the Software.
31
*
32
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
33
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
34
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
35
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
36
* LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
37
* OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
38
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
39
*
40
*/
41
42
#include <
gecode/set.hh
>
43
#include <
gecode/set/int.hh
>
44
45
namespace
Gecode
{
46
47
void
48
cardinality
(
Home
home,
SetVar
x
,
unsigned
int
i
,
unsigned
int
j) {
49
Set::Limits::check
(
i
,
"Set::cardinality"
);
50
Set::Limits::check
(j,
"Set::cardinality"
);
51
GECODE_POST
;
52
Set::SetView
_x(
x
);
53
GECODE_ME_FAIL
(_x.
cardMin
(home,
i
));
54
GECODE_ME_FAIL
(_x.
cardMax
(home, j));
55
}
56
57
void
58
cardinality
(
Home
home,
const
SetVarArgs
&
x
,
unsigned
int
i
,
unsigned
int
j) {
59
Set::Limits::check
(
i
,
"Set::cardinality"
);
60
Set::Limits::check
(j,
"Set::cardinality"
);
61
GECODE_POST
;
62
for
(
int
k=
x
.size(); k--; ) {
63
Set::SetView
_x(
x
[k]);
64
GECODE_ME_FAIL
(_x.
cardMin
(home,
i
));
65
GECODE_ME_FAIL
(_x.
cardMax
(home, j));
66
}
67
}
68
69
void
70
cardinality
(
Home
home,
SetVar
s,
IntVar
x
) {
71
GECODE_POST
;
72
GECODE_ES_FAIL
(
Set::Int::Card<Set::SetView>::post
(home,s,
x
));
73
}
74
75
void
76
cardinality
(
Home
home,
SetVar
s,
IntVar
x
,
Reify
r
) {
77
IntVar
y
(home, 0,
static_cast<
int
>
(
Set::Limits::card
));
78
rel
(home,
x
,
IRT_EQ
,
y
,
r
);
79
cardinality
(home, s,
y
);
80
}
81
82
}
83
84
// STATISTICS: set-post
Gecode::x
Post propagator for SetVar x
Definition:
set.hh:784
Gecode::Set::SetView::cardMax
unsigned int cardMax(void) const
Return maximum cardinality.
Definition:
set.hpp:90
Gecode::y
Post propagator for SetVar SetOpType SetVar y
Definition:
set.hh:784
GECODE_ES_FAIL
#define GECODE_ES_FAIL(es)
Check whether execution status es is failed, and fail space home.
Definition:
macros.hpp:107
Test::Int::Basic::i
Gecode::IntArgs i(4, 1, 2, 3, 4)
Gecode::SetVarArgs
Passing set variables.
Definition:
set.hh:492
Gecode
Gecode toplevel namespace
Gecode::Set::SetView::cardMin
unsigned int cardMin(void) const
Return minimum cardinality.
Definition:
set.hpp:86
Gecode::Set::Limits::card
const unsigned int card
Maximum cardinality of an integer set.
Definition:
set.hh:105
Gecode::Reify
Reification specification.
Definition:
int.hh:857
Gecode::Home
Home class for posting propagators
Definition:
core.hpp:922
Gecode::r
Post propagator for SetVar SetOpType SetVar SetRelType r
Definition:
set.hh:784
Gecode::SetVar
Set variables
Definition:
set.hh:131
Gecode::cardinality
LinIntExpr cardinality(const SetExpr &e)
Cardinality of set expression.
Definition:
set-expr.cpp:818
Gecode::IntVar
Integer variables.
Definition:
int.hh:353
Gecode::rel
void rel(Home home, FloatVar x0, FloatRelType frt, FloatVal n)
Propagates .
Definition:
rel.cpp:47
Gecode::Set::SetView
Set view for set variables
Definition:
view.hpp:60
Gecode::Set::Limits::check
void check(int n, const char *l)
Check whether integer n is in range, otherwise throw overflow exception with information l.
Definition:
limits.hpp:41
GECODE_POST
#define GECODE_POST
Check for failure in a constraint post function.
Definition:
macros.hpp:44
Gecode::Set::Int::Card
Propagator for cardinality
Definition:
int.hh:233
set.hh
GECODE_ME_FAIL
#define GECODE_ME_FAIL(me)
Check whether modification event me is failed, and fail space home.
Definition:
macros.hpp:81
Gecode::IRT_EQ
@ IRT_EQ
Equality ( )
Definition:
int.hh:907
int.hh