main page
modules
namespaces
classes
files
Gecode home
Generated on Sat May 25 2013 18:00:33 for Gecode by
doxygen
1.8.3.1
gecode
int
branch
view-sel.cpp
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
#include <
gecode/int/branch.hh
>
39
40
namespace
Gecode {
namespace
Int {
namespace
Branch {
41
42
ViewSel<IntView>*
43
viewselint
(
Space
& home,
const
IntVarBranch
& ivb) {
44
switch
(ivb.
select
()) {
45
case
IntVarBranch::SEL_NONE
:
46
return
new
(home)
ViewSelNone<IntView>
(home,ivb);
47
case
IntVarBranch::SEL_RND
:
48
return
new
(home)
ViewSelRnd<IntView>
(home,ivb);
49
default
:
break
;
50
}
51
if
(ivb.
tbl
() != NULL) {
52
switch
(ivb.
select
()) {
53
case
IntVarBranch::SEL_MERIT_MIN
:
54
return
new
(home)
ViewSelMinTbl
<
MeritFunction<IntView>
>(home,ivb);
55
case
IntVarBranch::SEL_MERIT_MAX
:
56
return
new
(home)
ViewSelMaxTbl
<
MeritFunction<IntView>
>(home,ivb);
57
case
IntVarBranch::SEL_MIN_MIN
:
58
return
new
(home)
ViewSelMinTbl
<
MeritMin<IntView>
>(home,ivb);
59
case
IntVarBranch::SEL_MIN_MAX
:
60
return
new
(home)
ViewSelMaxTbl
<
MeritMin<IntView>
>(home,ivb);
61
case
IntVarBranch::SEL_MAX_MIN
:
62
return
new
(home)
ViewSelMinTbl
<
MeritMax<IntView>
>(home,ivb);
63
case
IntVarBranch::SEL_MAX_MAX
:
64
return
new
(home)
ViewSelMaxTbl
<
MeritMax<IntView>
>(home,ivb);
65
case
IntVarBranch::SEL_SIZE_MIN
:
66
return
new
(home)
ViewSelMinTbl
<
MeritSize<IntView>
>(home,ivb);
67
case
IntVarBranch::SEL_SIZE_MAX
:
68
return
new
(home)
ViewSelMaxTbl
<
MeritSize<IntView>
>(home,ivb);
69
case
IntVarBranch::SEL_DEGREE_MIN
:
70
return
new
(home)
ViewSelMinTbl
<
MeritDegree<IntView>
>(home,ivb);
71
case
IntVarBranch::SEL_DEGREE_MAX
:
72
return
new
(home)
ViewSelMaxTbl
<
MeritDegree<IntView>
>(home,ivb);
73
case
IntVarBranch::SEL_AFC_MIN
:
74
return
new
(home)
ViewSelMinTbl
<
MeritAFC<IntView>
>(home,ivb);
75
case
IntVarBranch::SEL_AFC_MAX
:
76
return
new
(home)
ViewSelMaxTbl
<
MeritAFC<IntView>
>(home,ivb);
77
case
IntVarBranch::SEL_ACTIVITY_MIN
:
78
return
new
(home)
ViewSelMinTbl
<
MeritActivity<IntView>
>(home,ivb);
79
case
IntVarBranch::SEL_ACTIVITY_MAX
:
80
return
new
(home)
ViewSelMaxTbl
<
MeritActivity<IntView>
>(home,ivb);
81
case
IntVarBranch::SEL_DEGREE_SIZE_MIN
:
82
return
new
(home)
ViewSelMinTbl
<
MeritDegreeSize<IntView>
>(home,ivb);
83
case
IntVarBranch::SEL_DEGREE_SIZE_MAX
:
84
return
new
(home)
ViewSelMaxTbl
<
MeritDegreeSize<IntView>
>(home,ivb);
85
case
IntVarBranch::SEL_AFC_SIZE_MIN
:
86
return
new
(home)
ViewSelMinTbl
<
MeritAFCSize<IntView>
>(home,ivb);
87
case
IntVarBranch::SEL_AFC_SIZE_MAX
:
88
return
new
(home)
ViewSelMaxTbl
<
MeritAFCSize<IntView>
>(home,ivb);
89
case
IntVarBranch::SEL_ACTIVITY_SIZE_MIN
:
90
return
new
(home)
ViewSelMinTbl
<
MeritActivitySize<IntView>
>(home,ivb);
91
case
IntVarBranch::SEL_ACTIVITY_SIZE_MAX
:
92
return
new
(home)
ViewSelMaxTbl
<
MeritActivitySize<IntView>
>(home,ivb);
93
case
IntVarBranch::SEL_REGRET_MIN_MIN
:
94
return
new
(home)
ViewSelMinTbl
<
MeritRegretMin<IntView>
>(home,ivb);
95
case
IntVarBranch::SEL_REGRET_MIN_MAX
:
96
return
new
(home)
ViewSelMaxTbl
<
MeritRegretMin<IntView>
>(home,ivb);
97
case
IntVarBranch::SEL_REGRET_MAX_MIN
:
98
return
new
(home)
ViewSelMinTbl
<
MeritRegretMax<IntView>
>(home,ivb);
99
case
IntVarBranch::SEL_REGRET_MAX_MAX
:
100
return
new
(home)
ViewSelMaxTbl
<
MeritRegretMax<IntView>
>(home,ivb);
101
default
:
102
throw
UnknownBranching
(
"Int::branch"
);
103
}
104
}
else
{
105
switch
(ivb.
select
()) {
106
case
IntVarBranch::SEL_MERIT_MIN
:
107
return
new
(home)
ViewSelMin
<
MeritFunction<IntView>
>(home,ivb);
108
case
IntVarBranch::SEL_MERIT_MAX
:
109
return
new
(home)
ViewSelMax
<
MeritFunction<IntView>
>(home,ivb);
110
case
IntVarBranch::SEL_MIN_MIN
:
111
return
new
(home)
ViewSelMin
<
MeritMin<IntView>
>(home,ivb);
112
case
IntVarBranch::SEL_MIN_MAX
:
113
return
new
(home)
ViewSelMax
<
MeritMin<IntView>
>(home,ivb);
114
case
IntVarBranch::SEL_MAX_MIN
:
115
return
new
(home)
ViewSelMin
<
MeritMax<IntView>
>(home,ivb);
116
case
IntVarBranch::SEL_MAX_MAX
:
117
return
new
(home)
ViewSelMax
<
MeritMax<IntView>
>(home,ivb);
118
case
IntVarBranch::SEL_SIZE_MIN
:
119
return
new
(home)
ViewSelMin
<
MeritSize<IntView>
>(home,ivb);
120
case
IntVarBranch::SEL_SIZE_MAX
:
121
return
new
(home)
ViewSelMax
<
MeritSize<IntView>
>(home,ivb);
122
case
IntVarBranch::SEL_DEGREE_MIN
:
123
return
new
(home)
ViewSelMin
<
MeritDegree<IntView>
>(home,ivb);
124
case
IntVarBranch::SEL_DEGREE_MAX
:
125
return
new
(home)
ViewSelMax
<
MeritDegree<IntView>
>(home,ivb);
126
case
IntVarBranch::SEL_AFC_MIN
:
127
return
new
(home)
ViewSelMin
<
MeritAFC<IntView>
>(home,ivb);
128
case
IntVarBranch::SEL_AFC_MAX
:
129
return
new
(home)
ViewSelMax
<
MeritAFC<IntView>
>(home,ivb);
130
case
IntVarBranch::SEL_ACTIVITY_MIN
:
131
return
new
(home)
ViewSelMin
<
MeritActivity<IntView>
>(home,ivb);
132
case
IntVarBranch::SEL_ACTIVITY_MAX
:
133
return
new
(home)
ViewSelMax
<
MeritActivity<IntView>
>(home,ivb);
134
case
IntVarBranch::SEL_DEGREE_SIZE_MIN
:
135
return
new
(home)
ViewSelMin
<
MeritDegreeSize<IntView>
>(home,ivb);
136
case
IntVarBranch::SEL_DEGREE_SIZE_MAX
:
137
return
new
(home)
ViewSelMax
<
MeritDegreeSize<IntView>
>(home,ivb);
138
case
IntVarBranch::SEL_AFC_SIZE_MIN
:
139
return
new
(home)
ViewSelMin
<
MeritAFCSize<IntView>
>(home,ivb);
140
case
IntVarBranch::SEL_AFC_SIZE_MAX
:
141
return
new
(home)
ViewSelMax
<
MeritAFCSize<IntView>
>(home,ivb);
142
case
IntVarBranch::SEL_ACTIVITY_SIZE_MIN
:
143
return
new
(home)
ViewSelMin
<
MeritActivitySize<IntView>
>(home,ivb);
144
case
IntVarBranch::SEL_ACTIVITY_SIZE_MAX
:
145
return
new
(home)
ViewSelMax
<
MeritActivitySize<IntView>
>(home,ivb);
146
case
IntVarBranch::SEL_REGRET_MIN_MIN
:
147
return
new
(home)
ViewSelMin
<
MeritRegretMin<IntView>
>(home,ivb);
148
case
IntVarBranch::SEL_REGRET_MIN_MAX
:
149
return
new
(home)
ViewSelMax
<
MeritRegretMin<IntView>
>(home,ivb);
150
case
IntVarBranch::SEL_REGRET_MAX_MIN
:
151
return
new
(home)
ViewSelMin
<
MeritRegretMax<IntView>
>(home,ivb);
152
case
IntVarBranch::SEL_REGRET_MAX_MAX
:
153
return
new
(home)
ViewSelMax
<
MeritRegretMax<IntView>
>(home,ivb);
154
default
:
155
throw
UnknownBranching
(
"Int::branch"
);
156
}
157
}
158
GECODE_NEVER
;
159
return
NULL;
160
}
161
162
ViewSel<BoolView>
*
163
viewselbool
(
Space
& home,
const
IntVarBranch
& ivb) {
164
switch
(ivb.
select
()) {
165
case
IntVarBranch::SEL_NONE
:
166
return
new
(home)
ViewSelNone<BoolView>
(home,ivb);
167
case
IntVarBranch::SEL_RND
:
168
return
new
(home)
ViewSelRnd<BoolView>
(home,ivb);
169
default
:
break
;
170
}
171
if
(ivb.
tbl
() != NULL) {
172
switch
(ivb.
select
()) {
173
case
IntVarBranch::SEL_MERIT_MIN
:
174
return
new
(home)
ViewSelMinTbl
<
MeritFunction<BoolView>
>(home,ivb);
175
case
IntVarBranch::SEL_MERIT_MAX
:
176
return
new
(home)
ViewSelMaxTbl
<
MeritFunction<BoolView>
>(home,ivb);
177
case
IntVarBranch::SEL_MIN_MIN
:
178
case
IntVarBranch::SEL_MIN_MAX
:
179
case
IntVarBranch::SEL_MAX_MIN
:
180
case
IntVarBranch::SEL_MAX_MAX
:
181
case
IntVarBranch::SEL_SIZE_MIN
:
182
case
IntVarBranch::SEL_SIZE_MAX
:
183
case
IntVarBranch::SEL_REGRET_MIN_MIN
:
184
case
IntVarBranch::SEL_REGRET_MIN_MAX
:
185
case
IntVarBranch::SEL_REGRET_MAX_MIN
:
186
case
IntVarBranch::SEL_REGRET_MAX_MAX
:
187
return
new
(home)
ViewSelNone<BoolView>
(home,ivb);
188
case
IntVarBranch::SEL_DEGREE_MIN
:
189
return
new
(home)
ViewSelMinTbl
<
MeritDegree<BoolView>
>(home,ivb);
190
case
IntVarBranch::SEL_DEGREE_MAX
:
191
return
new
(home)
ViewSelMaxTbl
<
MeritDegree<BoolView>
>(home,ivb);
192
case
IntVarBranch::SEL_AFC_MIN
:
193
return
new
(home)
ViewSelMinTbl
<
MeritAFC<BoolView>
>(home,ivb);
194
case
IntVarBranch::SEL_AFC_MAX
:
195
return
new
(home)
ViewSelMaxTbl
<
MeritAFC<BoolView>
>(home,ivb);
196
case
IntVarBranch::SEL_ACTIVITY_MIN
:
197
return
new
(home)
ViewSelMinTbl
<
MeritActivity<BoolView>
>(home,ivb);
198
case
IntVarBranch::SEL_ACTIVITY_MAX
:
199
return
new
(home)
ViewSelMaxTbl
<
MeritActivity<BoolView>
>(home,ivb);
200
case
IntVarBranch::SEL_DEGREE_SIZE_MIN
:
201
return
new
(home)
ViewSelMinTbl
<
MeritDegreeSize<BoolView>
>(home,ivb);
202
case
IntVarBranch::SEL_DEGREE_SIZE_MAX
:
203
return
new
(home)
ViewSelMaxTbl
<
MeritDegreeSize<BoolView>
>(home,ivb);
204
case
IntVarBranch::SEL_AFC_SIZE_MIN
:
205
return
new
(home)
ViewSelMinTbl
<
MeritAFCSize<BoolView>
>(home,ivb);
206
case
IntVarBranch::SEL_AFC_SIZE_MAX
:
207
return
new
(home)
ViewSelMaxTbl
<
MeritAFCSize<BoolView>
>(home,ivb);
208
case
IntVarBranch::SEL_ACTIVITY_SIZE_MIN
:
209
return
new
(home)
ViewSelMinTbl
<
MeritActivitySize<BoolView>
>(home,ivb);
210
case
IntVarBranch::SEL_ACTIVITY_SIZE_MAX
:
211
return
new
(home)
ViewSelMaxTbl
<
MeritActivitySize<BoolView>
>(home,ivb);
212
default
:
213
throw
UnknownBranching
(
"Int::branch"
);
214
}
215
}
else
{
216
switch
(ivb.
select
()) {
217
case
IntVarBranch::SEL_MERIT_MIN
:
218
return
new
(home)
ViewSelMin
<
MeritFunction<BoolView>
>(home,ivb);
219
case
IntVarBranch::SEL_MERIT_MAX
:
220
return
new
(home)
ViewSelMax
<
MeritFunction<BoolView>
>(home,ivb);
221
case
IntVarBranch::SEL_MIN_MIN
:
222
case
IntVarBranch::SEL_MIN_MAX
:
223
case
IntVarBranch::SEL_MAX_MIN
:
224
case
IntVarBranch::SEL_MAX_MAX
:
225
case
IntVarBranch::SEL_SIZE_MIN
:
226
case
IntVarBranch::SEL_SIZE_MAX
:
227
case
IntVarBranch::SEL_REGRET_MIN_MIN
:
228
case
IntVarBranch::SEL_REGRET_MIN_MAX
:
229
case
IntVarBranch::SEL_REGRET_MAX_MIN
:
230
case
IntVarBranch::SEL_REGRET_MAX_MAX
:
231
return
new
(home)
ViewSelNone<BoolView>
(home,ivb);
232
case
IntVarBranch::SEL_DEGREE_MIN
:
233
case
IntVarBranch::SEL_DEGREE_SIZE_MIN
:
234
return
new
(home)
ViewSelMin
<
MeritDegree<BoolView>
>(home,ivb);
235
case
IntVarBranch::SEL_DEGREE_MAX
:
236
case
IntVarBranch::SEL_DEGREE_SIZE_MAX
:
237
return
new
(home)
ViewSelMax
<
MeritDegree<BoolView>
>(home,ivb);
238
case
IntVarBranch::SEL_AFC_MIN
:
239
case
IntVarBranch::SEL_AFC_SIZE_MIN
:
240
return
new
(home)
ViewSelMin
<
MeritAFC<BoolView>
>(home,ivb);
241
case
IntVarBranch::SEL_AFC_MAX
:
242
case
IntVarBranch::SEL_AFC_SIZE_MAX
:
243
return
new
(home)
ViewSelMax
<
MeritAFC<BoolView>
>(home,ivb);
244
case
IntVarBranch::SEL_ACTIVITY_MIN
:
245
case
IntVarBranch::SEL_ACTIVITY_SIZE_MIN
:
246
return
new
(home)
ViewSelMin
<
MeritActivity<BoolView>
>(home,ivb);
247
case
IntVarBranch::SEL_ACTIVITY_MAX
:
248
case
IntVarBranch::SEL_ACTIVITY_SIZE_MAX
:
249
return
new
(home)
ViewSelMax
<
MeritActivity<BoolView>
>(home,ivb);
250
default
:
251
throw
UnknownBranching
(
"Int::branch"
);
252
}
253
}
254
GECODE_NEVER
;
255
return
NULL;
256
}
257
258
}}}
259
260
261
// STATISTICS: int-branch
262