this repo has no description
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 * This file is part of Gecode, the generic constraint
10 * development environment:
11 * http://www.gecode.org
12 *
13 * Permission is hereby granted, free of charge, to any person obtaining
14 * a copy of this software and associated documentation files (the
15 * "Software"), to deal in the Software without restriction, including
16 * without limitation the rights to use, copy, modify, merge, publish,
17 * distribute, sublicense, and/or sell copies of the Software, and to
18 * permit persons to whom the Software is furnished to do so, subject to
19 * the following conditions:
20 *
21 * The above copyright notice and this permission notice shall be
22 * included in all copies or substantial portions of the Software.
23 *
24 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
25 * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
26 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
27 * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
28 * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
29 * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
30 * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
31 *
32 */
33
34namespace Gecode {
35
36 forceinline
37 FloatVarBranch::FloatVarBranch(void)
38 : s(SEL_NONE) {}
39
40 forceinline
41 FloatVarBranch::FloatVarBranch(Select s0, BranchTbl t)
42 : VarBranch<FloatVar>(t), s(s0) {}
43
44 forceinline
45 FloatVarBranch::FloatVarBranch(Rnd r)
46 : VarBranch<FloatVar>(r), s(SEL_RND) {}
47
48 forceinline
49 FloatVarBranch::FloatVarBranch(Select s0, double d, BranchTbl t)
50 : VarBranch<FloatVar>(d,t), s(s0) {}
51
52 forceinline
53 FloatVarBranch::FloatVarBranch(Select s0, FloatAFC a, BranchTbl t)
54 : VarBranch<FloatVar>(a,t), s(s0) {}
55
56 forceinline
57 FloatVarBranch::FloatVarBranch(Select s0, FloatAction a, BranchTbl t)
58 : VarBranch<FloatVar>(a,t), s(s0) {}
59
60 forceinline
61 FloatVarBranch::FloatVarBranch(Select s0, FloatCHB c, BranchTbl t)
62 : VarBranch<FloatVar>(c,t), s(s0) {}
63
64 forceinline
65 FloatVarBranch::FloatVarBranch(Select s0, FloatBranchMerit mf, BranchTbl t)
66 : VarBranch<FloatVar>(mf,t), s(s0) {}
67
68 forceinline FloatVarBranch::Select
69 FloatVarBranch::select(void) const {
70 return s;
71 }
72
73 forceinline void
74 FloatVarBranch::expand(Home home, const FloatVarArgs& 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)
79 _afc = FloatAFC(home,x,decay());
80 break;
81 case SEL_ACTION_MIN: case SEL_ACTION_MAX:
82 case SEL_ACTION_SIZE_MIN: case SEL_ACTION_SIZE_MAX:
83 if (!_act)
84 _act = FloatAction(home,x,decay());
85 break;
86 case SEL_CHB_MIN: case SEL_CHB_MAX:
87 case SEL_CHB_SIZE_MIN: case SEL_CHB_SIZE_MAX:
88 if (!_chb)
89 _chb = FloatCHB(home,x);
90 break;
91 default: ;
92 }
93 }
94
95
96 inline FloatVarBranch
97 FLOAT_VAR_NONE(void) {
98 return FloatVarBranch(FloatVarBranch::SEL_NONE,nullptr);
99 }
100
101 inline FloatVarBranch
102 FLOAT_VAR_MERIT_MIN(FloatBranchMerit bm, BranchTbl tbl) {
103 return FloatVarBranch(FloatVarBranch::SEL_MERIT_MIN,bm,tbl);
104 }
105
106 inline FloatVarBranch
107 FLOAT_VAR_MERIT_MAX(FloatBranchMerit bm, BranchTbl tbl) {
108 return FloatVarBranch(FloatVarBranch::SEL_MERIT_MAX,bm,tbl);
109 }
110
111 inline FloatVarBranch
112 FLOAT_VAR_RND(Rnd r) {
113 return FloatVarBranch(r);
114 }
115
116 inline FloatVarBranch
117 FLOAT_VAR_DEGREE_MIN(BranchTbl tbl) {
118 return FloatVarBranch(FloatVarBranch::SEL_DEGREE_MIN,tbl);
119 }
120
121 inline FloatVarBranch
122 FLOAT_VAR_DEGREE_MAX(BranchTbl tbl) {
123 return FloatVarBranch(FloatVarBranch::SEL_DEGREE_MAX,tbl);
124 }
125
126 inline FloatVarBranch
127 FLOAT_VAR_AFC_MIN(double d, BranchTbl tbl) {
128 return FloatVarBranch(FloatVarBranch::SEL_AFC_MIN,d,tbl);
129 }
130
131 inline FloatVarBranch
132 FLOAT_VAR_AFC_MIN(FloatAFC a, BranchTbl tbl) {
133 return FloatVarBranch(FloatVarBranch::SEL_AFC_MIN,a,tbl);
134 }
135
136 inline FloatVarBranch
137 FLOAT_VAR_AFC_MAX(double d, BranchTbl tbl) {
138 return FloatVarBranch(FloatVarBranch::SEL_AFC_MAX,d,tbl);
139 }
140
141 inline FloatVarBranch
142 FLOAT_VAR_AFC_MAX(FloatAFC a, BranchTbl tbl) {
143 return FloatVarBranch(FloatVarBranch::SEL_AFC_MAX,a,tbl);
144 }
145
146 inline FloatVarBranch
147 FLOAT_VAR_ACTION_MIN(double d, BranchTbl tbl) {
148 return FloatVarBranch(FloatVarBranch::SEL_ACTION_MIN,d,tbl);
149 }
150
151 inline FloatVarBranch
152 FLOAT_VAR_ACTION_MIN(FloatAction a, BranchTbl tbl) {
153 return FloatVarBranch(FloatVarBranch::SEL_ACTION_MIN,a,tbl);
154 }
155
156 inline FloatVarBranch
157 FLOAT_VAR_ACTION_MAX(double d, BranchTbl tbl) {
158 return FloatVarBranch(FloatVarBranch::SEL_ACTION_MAX,d,tbl);
159 }
160
161 inline FloatVarBranch
162 FLOAT_VAR_ACTION_MAX(FloatAction a, BranchTbl tbl) {
163 return FloatVarBranch(FloatVarBranch::SEL_ACTION_MAX,a,tbl);
164 }
165
166 inline FloatVarBranch
167 FLOAT_VAR_CHB_MIN(BranchTbl tbl) {
168 return FloatVarBranch(FloatVarBranch::SEL_CHB_MIN,tbl);
169 }
170
171 inline FloatVarBranch
172 FLOAT_VAR_CHB_MIN(FloatCHB c, BranchTbl tbl) {
173 return FloatVarBranch(FloatVarBranch::SEL_CHB_MIN,c,tbl);
174 }
175
176 inline FloatVarBranch
177 FLOAT_VAR_CHB_MAX(BranchTbl tbl) {
178 return FloatVarBranch(FloatVarBranch::SEL_CHB_MAX,tbl);
179 }
180
181 inline FloatVarBranch
182 FLOAT_VAR_CHB_MAX(FloatCHB c, BranchTbl tbl) {
183 return FloatVarBranch(FloatVarBranch::SEL_CHB_MAX,c,tbl);
184 }
185
186 inline FloatVarBranch
187 FLOAT_VAR_MIN_MIN(BranchTbl tbl) {
188 return FloatVarBranch(FloatVarBranch::SEL_MIN_MIN,tbl);
189 }
190
191 inline FloatVarBranch
192 FLOAT_VAR_MIN_MAX(BranchTbl tbl) {
193 return FloatVarBranch(FloatVarBranch::SEL_MIN_MAX,tbl);
194 }
195
196 inline FloatVarBranch
197 FLOAT_VAR_MAX_MIN(BranchTbl tbl) {
198 return FloatVarBranch(FloatVarBranch::SEL_MAX_MIN,tbl);
199 }
200
201 inline FloatVarBranch
202 FLOAT_VAR_MAX_MAX(BranchTbl tbl) {
203 return FloatVarBranch(FloatVarBranch::SEL_MAX_MAX,tbl);
204 }
205
206 inline FloatVarBranch
207 FLOAT_VAR_SIZE_MIN(BranchTbl tbl) {
208 return FloatVarBranch(FloatVarBranch::SEL_SIZE_MIN,tbl);
209 }
210
211 inline FloatVarBranch
212 FLOAT_VAR_SIZE_MAX(BranchTbl tbl) {
213 return FloatVarBranch(FloatVarBranch::SEL_SIZE_MAX,tbl);
214 }
215
216 inline FloatVarBranch
217 FLOAT_VAR_DEGREE_SIZE_MIN(BranchTbl tbl) {
218 return FloatVarBranch(FloatVarBranch::SEL_DEGREE_SIZE_MIN,tbl);
219 }
220
221 inline FloatVarBranch
222 FLOAT_VAR_DEGREE_SIZE_MAX(BranchTbl tbl) {
223 return FloatVarBranch(FloatVarBranch::SEL_DEGREE_SIZE_MAX,tbl);
224 }
225
226 inline FloatVarBranch
227 FLOAT_VAR_AFC_SIZE_MIN(double d, BranchTbl tbl) {
228 return FloatVarBranch(FloatVarBranch::SEL_AFC_SIZE_MIN,d,tbl);
229 }
230
231 inline FloatVarBranch
232 FLOAT_VAR_AFC_SIZE_MIN(FloatAFC a, BranchTbl tbl) {
233 return FloatVarBranch(FloatVarBranch::SEL_AFC_SIZE_MIN,a,tbl);
234 }
235
236 inline FloatVarBranch
237 FLOAT_VAR_AFC_SIZE_MAX(double d, BranchTbl tbl) {
238 return FloatVarBranch(FloatVarBranch::SEL_AFC_SIZE_MAX,d,tbl);
239 }
240
241 inline FloatVarBranch
242 FLOAT_VAR_AFC_SIZE_MAX(FloatAFC a, BranchTbl tbl) {
243 return FloatVarBranch(FloatVarBranch::SEL_AFC_SIZE_MAX,a,tbl);
244 }
245
246 inline FloatVarBranch
247 FLOAT_VAR_ACTION_SIZE_MIN(double d, BranchTbl tbl) {
248 return FloatVarBranch(FloatVarBranch::SEL_ACTION_SIZE_MIN,d,tbl);
249 }
250
251 inline FloatVarBranch
252 FLOAT_VAR_ACTION_SIZE_MIN(FloatAction a, BranchTbl tbl) {
253 return FloatVarBranch(FloatVarBranch::SEL_ACTION_SIZE_MIN,a,tbl);
254 }
255
256 inline FloatVarBranch
257 FLOAT_VAR_ACTION_SIZE_MAX(double d, BranchTbl tbl) {
258 return FloatVarBranch(FloatVarBranch::SEL_ACTION_SIZE_MAX,d,tbl);
259 }
260
261 inline FloatVarBranch
262 FLOAT_VAR_ACTION_SIZE_MAX(FloatAction a, BranchTbl tbl) {
263 return FloatVarBranch(FloatVarBranch::SEL_ACTION_SIZE_MAX,a,tbl);
264 }
265
266 inline FloatVarBranch
267 FLOAT_VAR_CHB_SIZE_MIN(BranchTbl tbl) {
268 return FloatVarBranch(FloatVarBranch::SEL_CHB_SIZE_MIN,tbl);
269 }
270
271 inline FloatVarBranch
272 FLOAT_VAR_CHB_SIZE_MIN(FloatCHB c, BranchTbl tbl) {
273 return FloatVarBranch(FloatVarBranch::SEL_CHB_SIZE_MIN,c,tbl);
274 }
275
276 inline FloatVarBranch
277 FLOAT_VAR_CHB_SIZE_MAX(BranchTbl tbl) {
278 return FloatVarBranch(FloatVarBranch::SEL_CHB_SIZE_MAX,tbl);
279 }
280
281 inline FloatVarBranch
282 FLOAT_VAR_CHB_SIZE_MAX(FloatCHB c, BranchTbl tbl) {
283 return FloatVarBranch(FloatVarBranch::SEL_CHB_SIZE_MAX,c,tbl);
284 }
285
286}
287
288// STATISTICS: float-branch