main page
modules
namespaces
classes
files
Gecode home
Generated on Sat Nov 9 2013 19:18:26 for Gecode by
doxygen
1.8.4
gecode
int
branch
var.hpp
Go to the documentation of this file.
1
/* -*- mode: C++; c-basic-offset: 2; indent-tabs-mode: nil -*- */
2
/*
3
* Main authors:
4
* Christian Schulte <schulte@gecode.org>
5
*
6
* Copyright:
7
* Christian Schulte, 2012
8
*
9
* Last modified:
10
* $Date: 2013-02-19 13:26:08 +0100 (Tue, 19 Feb 2013) $ by $Author: schulte $
11
* $Revision: 13313 $
12
*
13
* This file is part of Gecode, the generic constraint
14
* development environment:
15
* http://www.gecode.org
16
*
17
* Permission is hereby granted, free of charge, to any person obtaining
18
* a copy of this software and associated documentation files (the
19
* "Software"), to deal in the Software without restriction, including
20
* without limitation the rights to use, copy, modify, merge, publish,
21
* distribute, sublicense, and/or sell copies of the Software, and to
22
* permit persons to whom the Software is furnished to do so, subject to
23
* the following conditions:
24
*
25
* The above copyright notice and this permission notice shall be
26
* included in all copies or substantial portions of the Software.
27
*
28
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
29
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
30
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
31
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
32
* LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
33
* OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
34
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
35
*
36
*/
37
38
namespace
Gecode {
39
40
forceinline
41
IntVarBranch::IntVarBranch
(
void
)
42
:
VarBranch
(NULL), s(SEL_NONE) {}
43
44
forceinline
45
IntVarBranch::IntVarBranch
(
Select
s0,
BranchTbl
t
)
46
:
VarBranch
(t), s(s0) {}
47
48
forceinline
49
IntVarBranch::IntVarBranch
(
Rnd
r
)
50
:
VarBranch
(r), s(SEL_RND) {}
51
52
forceinline
53
IntVarBranch::IntVarBranch
(
Select
s0,
double
d
,
BranchTbl
t
)
54
:
VarBranch
(d,t), s(s0) {}
55
56
forceinline
57
IntVarBranch::IntVarBranch
(
Select
s0,
AFC
a
,
BranchTbl
t
)
58
:
VarBranch
(a,t), s(s0) {}
59
60
forceinline
61
IntVarBranch::IntVarBranch
(
Select
s0,
Activity
a
,
BranchTbl
t
)
62
:
VarBranch
(a,t), s(s0) {}
63
64
forceinline
65
IntVarBranch::IntVarBranch
(
Select
s0,
VoidFunction
mf,
BranchTbl
t
)
66
:
VarBranch
(mf,t), s(s0) {}
67
68
forceinline
IntVarBranch::Select
69
IntVarBranch::select
(
void
)
const
{
70
return
s
;
71
}
72
73
forceinline
void
74
IntVarBranch::expand
(
Home
home,
const
IntVarArgs
&
x
) {
75
switch
(
select
()) {
76
case
SEL_AFC_MIN
:
case
SEL_AFC_MAX
:
77
case
SEL_AFC_SIZE_MIN
:
case
SEL_AFC_SIZE_MAX
:
78
if
(!
_afc
.
initialized
())
79
_afc
=
IntAFC
(home,x,
decay
());
80
break
;
81
case
SEL_ACTIVITY_MIN
:
case
SEL_ACTIVITY_MAX
:
82
case
SEL_ACTIVITY_SIZE_MIN
:
case
SEL_ACTIVITY_SIZE_MAX
:
83
if
(!
_act
.
initialized
())
84
_act
=
IntActivity
(home,x,
decay
());
85
break
;
86
default
: ;
87
}
88
}
89
90
forceinline
void
91
IntVarBranch::expand
(
Home
home,
const
BoolVarArgs
&
x
) {
92
switch
(
select
()) {
93
case
SEL_AFC_MIN
:
case
SEL_AFC_MAX
:
94
case
SEL_AFC_SIZE_MIN
:
case
SEL_AFC_SIZE_MAX
:
95
if
(!
_afc
.
initialized
())
96
_afc
=
IntAFC
(home,x,
decay
());
97
break
;
98
case
SEL_ACTIVITY_MIN
:
case
SEL_ACTIVITY_MAX
:
99
case
SEL_ACTIVITY_SIZE_MIN
:
case
SEL_ACTIVITY_SIZE_MAX
:
100
if
(!
_act
.
initialized
())
101
_act
=
IntActivity
(home,x,
decay
());
102
break
;
103
default
: ;
104
}
105
}
106
107
inline
IntVarBranch
108
INT_VAR_NONE
(
void
) {
109
return
IntVarBranch
(
IntVarBranch::SEL_NONE
,NULL);
110
}
111
112
inline
IntVarBranch
113
INT_VAR_RND
(
Rnd
r
) {
114
return
IntVarBranch
(r);
115
}
116
117
inline
IntVarBranch
118
INT_VAR_MERIT_MIN
(
IntBranchMerit
bm,
BranchTbl
tbl
) {
119
return
IntVarBranch
(
IntVarBranch::SEL_MERIT_MIN
,
120
function_cast<VoidFunction>(bm),tbl);
121
}
122
123
inline
IntVarBranch
124
INT_VAR_MERIT_MIN
(
BoolBranchMerit
bm,
BranchTbl
tbl
) {
125
return
IntVarBranch
(
IntVarBranch::SEL_MERIT_MIN
,
126
function_cast<VoidFunction>(bm),tbl);
127
}
128
129
inline
IntVarBranch
130
INT_VAR_MERIT_MAX
(
IntBranchMerit
bm,
BranchTbl
tbl
) {
131
return
IntVarBranch
(
IntVarBranch::SEL_MERIT_MAX
,
132
function_cast<VoidFunction>(bm),tbl);
133
}
134
135
inline
IntVarBranch
136
INT_VAR_MERIT_MAX
(
BoolBranchMerit
bm,
BranchTbl
tbl
) {
137
return
IntVarBranch
(
IntVarBranch::SEL_MERIT_MAX
,
138
function_cast<VoidFunction>(bm),tbl);
139
}
140
141
inline
IntVarBranch
142
INT_VAR_DEGREE_MIN
(
BranchTbl
tbl
) {
143
return
IntVarBranch
(
IntVarBranch::SEL_DEGREE_MIN
,tbl);
144
}
145
146
inline
IntVarBranch
147
INT_VAR_DEGREE_MAX
(
BranchTbl
tbl
) {
148
return
IntVarBranch
(
IntVarBranch::SEL_DEGREE_MAX
,tbl);
149
}
150
151
inline
IntVarBranch
152
INT_VAR_AFC_MIN
(
double
d
,
BranchTbl
tbl
) {
153
return
IntVarBranch
(
IntVarBranch::SEL_AFC_MIN
,d,tbl);
154
}
155
156
inline
IntVarBranch
157
INT_VAR_AFC_MIN
(
IntAFC
a
,
BranchTbl
tbl
) {
158
return
IntVarBranch
(
IntVarBranch::SEL_AFC_MIN
,a,tbl);
159
}
160
161
inline
IntVarBranch
162
INT_VAR_AFC_MAX
(
double
d
,
BranchTbl
tbl
) {
163
return
IntVarBranch
(
IntVarBranch::SEL_AFC_MAX
,d,tbl);
164
}
165
166
inline
IntVarBranch
167
INT_VAR_AFC_MAX
(
IntAFC
a
,
BranchTbl
tbl
) {
168
return
IntVarBranch
(
IntVarBranch::SEL_AFC_MAX
,a,tbl);
169
}
170
171
inline
IntVarBranch
172
INT_VAR_ACTIVITY_MIN
(
double
d
,
BranchTbl
tbl
) {
173
return
IntVarBranch
(
IntVarBranch::SEL_ACTIVITY_MIN
,d,tbl);
174
}
175
176
inline
IntVarBranch
177
INT_VAR_ACTIVITY_MIN
(
IntActivity
a
,
BranchTbl
tbl
) {
178
return
IntVarBranch
(
IntVarBranch::SEL_ACTIVITY_MIN
,a,tbl);
179
}
180
181
inline
IntVarBranch
182
INT_VAR_ACTIVITY_MAX
(
double
d
,
BranchTbl
tbl
) {
183
return
IntVarBranch
(
IntVarBranch::SEL_ACTIVITY_MAX
,d,tbl);
184
}
185
186
inline
IntVarBranch
187
INT_VAR_ACTIVITY_MAX
(
IntActivity
a
,
BranchTbl
tbl
) {
188
return
IntVarBranch
(
IntVarBranch::SEL_ACTIVITY_MAX
,a,tbl);
189
}
190
191
inline
IntVarBranch
192
INT_VAR_MIN_MIN
(
BranchTbl
tbl
) {
193
return
IntVarBranch
(
IntVarBranch::SEL_MIN_MIN
,tbl);
194
}
195
196
inline
IntVarBranch
197
INT_VAR_MIN_MAX
(
BranchTbl
tbl
) {
198
return
IntVarBranch
(
IntVarBranch::SEL_MIN_MAX
,tbl);
199
}
200
201
inline
IntVarBranch
202
INT_VAR_MAX_MIN
(
BranchTbl
tbl
) {
203
return
IntVarBranch
(
IntVarBranch::SEL_MAX_MIN
,tbl);
204
}
205
206
inline
IntVarBranch
207
INT_VAR_MAX_MAX
(
BranchTbl
tbl
) {
208
return
IntVarBranch
(
IntVarBranch::SEL_MAX_MAX
,tbl);
209
}
210
211
inline
IntVarBranch
212
INT_VAR_SIZE_MIN
(
BranchTbl
tbl
) {
213
return
IntVarBranch
(
IntVarBranch::SEL_SIZE_MIN
,tbl);
214
}
215
216
inline
IntVarBranch
217
INT_VAR_SIZE_MAX
(
BranchTbl
tbl
) {
218
return
IntVarBranch
(
IntVarBranch::SEL_SIZE_MAX
,tbl);
219
}
220
221
inline
IntVarBranch
222
INT_VAR_DEGREE_SIZE_MIN
(
BranchTbl
tbl
) {
223
return
IntVarBranch
(
IntVarBranch::SEL_DEGREE_SIZE_MIN
,tbl);
224
}
225
226
inline
IntVarBranch
227
INT_VAR_DEGREE_SIZE_MAX
(
BranchTbl
tbl
) {
228
return
IntVarBranch
(
IntVarBranch::SEL_DEGREE_SIZE_MAX
,tbl);
229
}
230
231
inline
IntVarBranch
232
INT_VAR_AFC_SIZE_MIN
(
double
d
,
BranchTbl
tbl
) {
233
return
IntVarBranch
(
IntVarBranch::SEL_AFC_SIZE_MIN
,d,tbl);
234
}
235
236
inline
IntVarBranch
237
INT_VAR_AFC_SIZE_MIN
(
IntAFC
a
,
BranchTbl
tbl
) {
238
return
IntVarBranch
(
IntVarBranch::SEL_AFC_SIZE_MIN
,a,tbl);
239
}
240
241
inline
IntVarBranch
242
INT_VAR_AFC_SIZE_MAX
(
double
d
,
BranchTbl
tbl
) {
243
return
IntVarBranch
(
IntVarBranch::SEL_AFC_SIZE_MAX
,d,tbl);
244
}
245
246
inline
IntVarBranch
247
INT_VAR_AFC_SIZE_MAX
(
IntAFC
a
,
BranchTbl
tbl
) {
248
return
IntVarBranch
(
IntVarBranch::SEL_AFC_SIZE_MAX
,a,tbl);
249
}
250
251
inline
IntVarBranch
252
INT_VAR_ACTIVITY_SIZE_MIN
(
double
d
,
BranchTbl
tbl
) {
253
return
IntVarBranch
(
IntVarBranch::SEL_ACTIVITY_SIZE_MIN
,d,tbl);
254
}
255
256
inline
IntVarBranch
257
INT_VAR_ACTIVITY_SIZE_MIN
(
IntActivity
a
,
BranchTbl
tbl
) {
258
return
IntVarBranch
(
IntVarBranch::SEL_ACTIVITY_SIZE_MIN
,a,tbl);
259
}
260
261
inline
IntVarBranch
262
INT_VAR_ACTIVITY_SIZE_MAX
(
double
d
,
BranchTbl
tbl
) {
263
return
IntVarBranch
(
IntVarBranch::SEL_ACTIVITY_SIZE_MAX
,d,tbl);
264
}
265
266
inline
IntVarBranch
267
INT_VAR_ACTIVITY_SIZE_MAX
(
IntActivity
a
,
BranchTbl
tbl
) {
268
return
IntVarBranch
(
IntVarBranch::SEL_ACTIVITY_SIZE_MAX
,a,tbl);
269
}
270
271
inline
IntVarBranch
272
INT_VAR_REGRET_MIN_MIN
(
BranchTbl
tbl
) {
273
return
IntVarBranch
(
IntVarBranch::SEL_REGRET_MIN_MIN
,tbl);
274
}
275
276
inline
IntVarBranch
277
INT_VAR_REGRET_MIN_MAX
(
BranchTbl
tbl
) {
278
return
IntVarBranch
(
IntVarBranch::SEL_REGRET_MIN_MAX
,tbl);
279
}
280
281
inline
IntVarBranch
282
INT_VAR_REGRET_MAX_MIN
(
BranchTbl
tbl
) {
283
return
IntVarBranch
(
IntVarBranch::SEL_REGRET_MAX_MIN
,tbl);
284
}
285
286
inline
IntVarBranch
287
INT_VAR_REGRET_MAX_MAX
(
BranchTbl
tbl
) {
288
return
IntVarBranch
(
IntVarBranch::SEL_REGRET_MAX_MAX
,tbl);
289
}
290
291
}
292
293
// STATISTICS: int-branch